Keil 如何关联电脑中独立安装的Jlink驱动
在用keil开发过程中经常遇到这种情况,安装了一个新版本的keil MDK, keil自带的安装目录下有jlink驱动,但是keil 安装目录中自带的 jlink 驱动中没有想要的mcu型号,导致使用keil 无法下载mcu代码,本文章介绍如何解决这个问题。
在keil的安装目录下默认会安装 jlink 驱动,这个驱动中自带了很多支持的MCU 型号:


但是很多新型号的 MCU,尤其是近年来推出的国产芯片或 STM32H7 等新系列,没有添加到keil 自带的 jlink 中,这时候使用keil 下载会提示这样的报错:

通常是因为当前使用的 J-Link 驱动版本较旧,或者芯片厂商较新,导致 J-Link 的内置设备数据库中没有收录该 MCU。以下两种方法解决:
1 手动单独安装 J-Link 并升级 jlink 软件与固件
下载最新版软件:前往SEGGER下载最新的J-Llink 版本: https://www.segger.com/downloads/jlink/并安装它。安装完成后,接上Jlink 仿真器和MCU, 打开 jlink 安装目录下自带的 jflash工具, 查看当前版本的 jlink 是否支持所使用的 MCU型号(请注意以下截图不是 jlink 最新版本,参考操作时以最新版本为准):



如果支持当前MCU型号,将当前所有打开的Keil,jlink 软件关闭,然后到上面安装的最新版本的 jlink目录下去拷贝文件到 Keil_v5\ARM\Segger 安装目录下,如果没有修改jlink 的安装目录,默认路径通常是:C:\Program Files\SEGGER\JLink(或 C:\Program Files (x86)\SEGGER\JLink),将以下文件拷贝过去:
JLinkARM.dll(最核心的驱动接口文件)JLink.exeJLinkRDI.dllJL2CM3.dll(以及其他类似的JL2CMx.dll文件)
在覆盖之前,建议你将 Keil Segger 文件夹里原有的这几个文件备份一下(比如复制到一个新建的 Backup 文件夹里)。这样如果新版驱动出现不兼容的情况,你还可以随时把它们还原回去。
完成上述文件替换后,重新打开 Keil,它就会调用最新版的 J-Link 驱动了。此时再去 Options for Target -> Debug -> Settings 中查看,应该就能正常识别到想要的 MCU 型号了。
2 手动添加MCU型号及手动来指定Keil 调用jlink 路径
但是也有很多MCU型号并没有收录到最新的 jlink 中,前面介绍的方法1就不适用了,这个时候需要用户自己手动在 jlink中添加。这里以国民技术N32H7x 系列为例来说明。
N32H7x 系列MCU 在最新的 jlink 中已经添加了( 目前的 jlink 最新的版本是Version V9.42 (2026-05-06)),这里以旧版本 jlink 做说明,因为旧版本就没有添加 N32H7x 系列,如 V7.50 和 V7.90 就没有添加。这个添加方法国民技术官网有文档介绍:
用户需要先到国民技术官网下载相关的配置文件:https://www.nationstech.com/support/down/

配置文件下载下来解压之后是这样的:

Devices 文件夹是存放 FLM(Flash Loader Module) 下载算法文件的:

Samples是存放 .jflash文件的:

XML 描述文件是描述MCU设备的配置文件。以上资料在官网下载完之后分别拷贝到jlink 对应的安装目录下:


V7.5版本 jlink 安装目录中还有 JLinkDevices.xml 这个文件,对于用户来说只需要把 Nations-JLinkDevices.xml 中的内容拷贝到 JLinkDevices.xml 中即可,如需要添加 N32H785 2M 这个型号,则只需把下面的内容拷贝到JLinkDevices.xml 文件的最后面,请注意JLinkDevices.xml 最后面有个</DataBase>,拷贝的内容要在</DataBase> 前面。
<!-- -->
<!-- N32H785 2M -->
<!-- -->
<Device>
<ChipInfo Vendor="Nationstech" Name="N32H785xIx7:CM7" jlinkscriptFile="Devices/Nationstech/N32H7xx_CM7.jlinkscript" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x24000000" WorkRAMSize="0x00020000" Aliases="N32H785xIB7EC:CM7" />
<FlashBankInfo Name="SIP Flash" BaseAddr="0x15000000" MaxSize="0x001E0000" Loader="Devices/Nationstech/N32H78x_2048.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
<Device>
<ChipInfo Vendor="Nationstech" Name="N32H785xIx7:CM4" jlinkscriptFile="Devices/Nationstech/N32H7xx_CM4.jlinkscript" Core="JLINK_CORE_CORTEX_M4" WorkRAMAddr="0x30000000" WorkRAMSize="0x00020000" Aliases="N32H785xIB7EC:CM4" />
<FlashBankInfo Name="SIP Flash" BaseAddr="0x15080000" MaxSize="0x00160000" Loader="Devices/Nationstech/N32H78x_2048.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
对于V7.90 版本jlink来说,当安装好jlink 以后,安装目录下默认是没有Devices这个文件的,SEGGER官方应该是把 FLM 文件集成到了某个 dll 文件中了, JLinkDevices.xml 文件也没有了,对于这中没有Devices 和 JLinkDevices.xml 的jlink 版本也可以按照上述办法,直接把Devices文件夹和 JLinkDevices.xml 拷贝到jlink 安装目录下,请注意 国民官方下载的 xml文件名是Nations-JLinkDevices.xml 和 Nsing-JLinkDevices.xml,用户需要手动把文件名改成 JLinkDevices.xml 然后再添加到 C:\Program Files\SEGGER\JLink 路径下。可以把Nations-JLinkDevices.xml,Nsing-JLinkDevices.xml 两个文件合并成一个 JLinkDevices.xml 再复制。
以上添加完MCU 型号的方法,还只是将 Jlink 驱动中添加了想要的 MCU,但是并没有把 Keil 使用的 jlink指向最新的 jlink 芯片型号数据库, 它还是用自己安装目录下的旧数据库,最关键的步骤来了:
用户需要在keil /ARM/Segger目录下添加一个名为 JLinkDevices.ref 的文件,在文件中添加以用户前面安装的jlink路径,如 C:\Program Files\SEGGER\JLink\(用户需要根据自己jlink 安装路径来填)


这一步才是通过创建 JLinkDevices.ref 文件来指定路径,本质上就是给 Keil 留一个“路标”,告诉它:“别用你自己目录下那堆旧的数据库了,直接去我指定的最新 J-Link 安装目录里找设备信息吧!这个方法的核心作用是同步设备数据库。它能让 Keil 直接调用最新版 J-Link 里的 Devices 文件夹和 JLinkDevices.xml,从而识别出最新的 MCU 型号。
更多推荐
所有评论(0)