大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是JLink 7.62优化了手动增加新MCU型号支持方法

  JLink 工具可以说是搞单片机开发的必备神器,JLink 包括一个硬件仿真器(分不同用途的 EDU/BASE/PLUS/WIFI/ULTRA+/PRO)和 PC 机上的驱动软件(从有迹可循的 2006 年 V3.00 到如今的 V7.96,更新相当频繁)。除了硬件稳定备受好评之外,其驱动软件提供的功能非常丰富更是俘获了大批开发者芳心。痞子衡今天介绍的主题就是手动在 JLink 驱动里添加新 MCU 型号的方法:

一、回顾旧方法

  当我们本地安装好了一个 JLink 驱动版本后,如果想要支持新的 MCU 型号(不在该版本支持列表里),通常有两种方法:一、安装一个支持该 MCU 型号的更新版本 JLink 驱动;二、从 MCU 厂商官网找到该 MCU 的 JLink Patch 包,然后导入到当前版本 JLink 驱动路径下。如果再进一步,我们是希望更新驱动里已有 MCU 型号的下载算法支持,那就必须借助方法二。

  痞子衡这里指的旧方法即是方法二,在当前 JLink 驱动里打 Patch 的方式,关于这个方式,痞子衡写过的如下三篇文章均有涉及。简单来说就是将 Patch 包里的文件以确定的目录结构导入到本地已安装好的某个确定版本的驱动路径 \SEGGER\JLink_Vxxx\ 下。

《轻松设计更新Segger J-Link Flash下载算法文件》《串行NOR Flash下载算法(J-Link工具篇)》《超级下载算法RT-UFL v1.0发布,附J-Link下安装教程》

  如果你一直是使用旧方法来新增 MCU 型号支持 / 更改已有 MCU 的下载算法,你会发现其实这种打 Patch 的方式有一些痛点的:比如电脑上安装了多个版本的 JLink 驱动,那就需要为每个驱动都打一遍 Patch。当我们的 Patch 累计得越来越多时,每次安装一个新 JLink 驱动,打 Patch 工作量会越来越大。

二、迎接新方法

  为了解决旧方法的痛点,从 JLink V7.62 开始,其切换到了一种新的打 Patch 方式,我们可以在 V7.62 的 Release Note 里关于 DLL 的第 34 条更新里找到说明:

痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法_搜索

  顺着那条说明,我们找到 https://wiki.segger.com/J-Link_Device_Support_Kit 里详细说明,新方法将 Patch 包里的文件换到了一个与具体版本 JLink 驱动安装目录无关的统一路径,以后只要在这个统一路径下打上 Patch,那么当前安装的所有 JLink 驱动均可以直接使用这个 Patch,省去了重复劳动。

痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法_搜索_02

  这里关于最重要的 .xml 文件,名字可以不用再像旧方法那样必须是 JLinkDevices.xml,可以是自定义名字的 *.xml 文件,而且这个文件位置也不用固定,最深支持 4 级目录,JLink DLL 会递归搜索找到最合适的 xml 文件来认定 Patch。

三、实践新方法

  知道了新方法,我们现在来实践一下,选一个 V7.62 以上的 JLink 版本,痞子衡本地安装了 V7.88e,就以这个版本为例。主要做如下三个实验:

3.1 V7.62以上是否兼容打Patch旧方法

  首先是看 V7.62 版本以上是否还能继续支持之前的打 Patch 方式,我们找到 V7.88e 安装目录,发现该目录下已经没有 Devices 文件夹以及 JLinkDevices.xml 文件,我们尝试将 《超级下载算法RT-UFL》 Patch 打进去试试看。

痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法_嵌入式_03

  痞子衡在 RT1170 开发板上亲测 JFlash 下载板载 flash 有效,说明 JLink DLL 还是能够从这个旧路径找到 Patch 的。

3.2 新方法是否Patch文件可自由放

  现在将 《超级下载算法RT-UFL》 Patch 打到统一路径下 <USER>\AppData\Roaming\SEGGER\JLinkDevices\,Patch 文件结构保持不变,JFlash 实测还是有效。

痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法_搜索_04

  现在改变 《超级下载算法RT-UFL》 Patch 文件结构,按第 2 小节推荐的方式,将 Patch 包里的 Devices\NXP\ 文件夹放到 <USER>\AppData\Roaming\SEGGER\JLinkDevices\NXP\ 下,并且将 JLinkDevices.xml 文件重命名为 iMXRT_UFL.xml 后直接放到 <USER>\AppData\Roaming\SEGGER\JLinkDevices\NXP\iMXRT_UFL\ 下,这里需要注意相应更改 xml 文件里的 JLinkScriptFile、Loader 路径(对应文件相对 xml 文件的路径),这样仍然有效。

痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法_xml_05

3.3 新旧方法Patch同时存在时,哪一个生效

  如果我们把 Patch 以新旧两种方式全部打入同一个 JLink 驱动,JLink DLL 到底会选用哪一个 Patch 呢?痞子衡实测结果如下:

旧方式 Patch

新方式 Patch

JLink DLL 实际使用的 Patch

存在且完好

存在且完好

新方式 Patch

存在但有缺陷

存在且完好

新方式 Patch

存在且完好

存在但有缺陷

比如 xml 里的文件路径不对

尝试新方式无效后转用旧方式 Patch

存在但有缺陷

比如下载算法不适配

存在但有缺陷

比如 xml 里的文件路径不对

按序尝试新、旧方式 Patch 无效后报错

  至此,JLink 7.62优化了手动增加新MCU型号支持方法痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法_xml_06

  最后欢迎关注痞子衡个人微信公众号【痞子衡嵌入式】,一个专注嵌入式技术的公众号,跟着痞子衡一起玩转嵌入式。