尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Jlink烧录与仿真全攻略:从驱动安装到量产排查的实战指南

Jlink烧录与仿真全攻略:从驱动安装到量产排查的实战指南 Jlink 在嵌入式开发圈子里算得上是“老熟人”了但凡你碰过 ARM Cortex-M 系列的单片机大概率绕不开它。但说实话很多人对它的认知就停留在“Keil 里点一下 Download 按钮能跑就行”这个层面一旦遇到连不上、烧录失败、驱动装不上就彻底抓瞎。我这些年从 STM32 到 ESP32从 NXP 到国产 RISC-V 芯片Jlink 用废过好几根也踩过不少坑。这篇内容就把 Jlink 烧录和仿真这件事从头到尾讲透包括驱动安装、接口定义、常见工具链的配合、各种烧录失败场景的排查思路以及一些官方文档里不会写的实操经验。不管你是刚入门的新手还是已经用了一段时间但遇到问题不知道怎么下手的开发者应该都能从中找到有用的东西。1. Jlink 到底是什么为什么它成了嵌入式的标配1.1 从“仿真器”这个词说起很多新手第一次听到“仿真器”会以为是用来模拟芯片行为的软件工具其实在嵌入式语境下仿真器指的是硬件调试探针英文叫 Debug Probe 或者 Emulator。它的核心作用是充当 PC 和 target MCU 之间的桥梁把 PC 端的调试指令翻译成芯片能听懂的 JTAG 或 SWD 时序信号同时把芯片内部的运行状态回读给 PC。Jlink 就是 SEGGER 公司出品的这样一款硬件调试探针。它支持 JTAG 和 SWD 两种主流调试接口覆盖 ARM7/9/11、Cortex-A/R/M 全系列内核还通过固件扩展支持了 RISC-V 和部分其他架构。你可以在 Keil、IAR、Eclipse、VS Code、Ozone 等几乎所有主流 IDE 里调用它也可以用 JFlash、JLink Commander 这些独立工具直接操作。为什么它成了标配我个人的理解是三个原因生态覆盖广、固件更新勤、工具链成熟。SEGGER 从 2000 年代初就开始做这件事积累下来的器件支持列表长得吓人几乎你叫得上名字的 ARM 芯片它都认识。而且它的固件可以通过 JLink Configurator 在线升级新芯片出来没多久就能支持。再加上 JFlash 这个独立烧录工具确实好用量产和研发阶段都能覆盖。1.2 Jlink 家族的产品线怎么选SEGGER 的 Jlink 产品线其实挺多的常见的有这几个档次型号调试接口最大速度目标供电典型场景JLink EDUJTAG/SWD15 MHz有教学、个人学习JLink BASEJTAG/SWD15 MHz有一般研发JLink PLUSJTAG/SWD50 MHz有复杂项目、多核调试JLink ULTRAJTAG/SWD/cJTAG50 MHz有高端研发、高速追踪JLink PROJTAG/SWD/cJTAG50 MHz有企业级、以太网调试JLink WiFiJTAG/SWD15 MHz有远程调试对于绝大多数个人开发者和中小团队来说JLink BASE 或者 EDU 版本完全够用。EDU 版本价格便宜很多但有个限制只能用于非商业用途而且不支持某些高级功能比如无限断点。如果你只是学习或者做个人项目EDU 性价比很高。但如果是公司项目建议老老实实买 BASE 或以上免得踩到授权问题的坑。还有一个经常被忽略的点Jlink 的固件版本和硬件版本是两回事。硬件版本比如 V9、V10、V11 指的是电路板设计固件版本比如 9.5、9.7 指的是内部运行的程序。固件可以升级但硬件版本决定了性能上限。市面上有些便宜的“Jlink V9”其实是山寨的固件升级到一定版本后会被检测出来然后变砖这个后面会详细说。1.3 为什么不用 ST-Link 或者 DAPLink这个问题我被问过很多次。ST-Link 便宜甚至免费很多 ST 开发板自带DAPLink 开源方案也多为什么还要花钱买 Jlink答案取决于你的使用场景。如果你只玩 STM32ST-Link 确实够用而且和 STM32CubeIDE 配合得很好。但一旦你涉及多品牌芯片、需要更快的烧录速度、需要 RTT 实时日志输出、需要 J-Scope 波形可视化Jlink 的优势就体现出来了。我举个实际例子之前做一个项目主控是 NXP 的 i.MX RT 系列同时还要调试一颗国产的 RISC-V 协处理器。ST-Link 根本不支持 RISC-V而 Jlink 通过固件更新就能同时搞定两颗芯片。再比如 RTT 功能你只需要在代码里加几行 SEGGER_RTT 的 API就能通过 Jlink 的 SWO 或者 RTT 通道输出日志速度比串口快得多还不占用 UART 资源。这个功能一旦用习惯了就回不去了。2. 驱动安装这件事远比你想的容易翻车2.1 官方驱动的正确安装姿势Jlink 驱动安装本身不复杂但细节没注意就会出各种幺蛾子。正确的流程是这样的去 SEGGER 官网下载最新的 JLink 软件包Windows 版通常是 JLink_Windows_Vxxx.exe安装时务必勾选“Install USB Driver”这一步是很多问题的根源安装路径不要包含中文和空格默认路径 C:\Program Files\SEGGER\JLink 就很好安装完成后插上 Jlink打开设备管理器确认能看到“JLink driver”设备如果你之前装过旧版本建议先卸载再装新版本。我遇到过旧版本驱动残留导致新版本识别异常的情况卸载时记得把 SEGGER 目录也清理干净。注意安装过程中如果 Windows 弹出驱动签名警告选择“仍然安装”。SEGGER 的驱动是签过名的但某些系统策略可能会拦截。2.2 Win11 下的驱动安装特殊处理Win11 对驱动签名的要求更严格有些老版本的 Jlink 驱动在 Win11 上会装不上或者装上后设备管理器显示黄色感叹号。解决办法有两个方案一用最新版本的 JLink 软件包SEGGER 从 V7.50 之后对 Win11 的支持就很完善了。方案二如果必须用老版本可以临时禁用驱动签名强制。具体操作是按住 Shift 点重启进入高级启动选项选择“禁用驱动程序强制签名”。但这个方法每次重启都会失效比较麻烦不推荐长期使用。还有一个 Win11 特有的坑USB 选择性暂停。Win11 默认会为了省电暂停空闲的 USB 设备这会导致 Jlink 在长时间不操作后掉线。解决办法是进入设备管理器找到 Jlink 对应的 USB Root Hub在电源管理选项卡里取消勾选“允许计算机关闭此设备以节约电源”。2.3 驱动装好了但 Keil 里找不到设备这是非常常见的问题。驱动装好了设备管理器里也能看到 Jlink但 Keil 的 Debug 设置里就是找不到。排查思路如下检查 Keil 的 Debug 选项卡里是否选择了JLink/J-TRACE Cortex而不是 ST-Link 或其他点击 Settings 按钮看 Port 是否选对了JTAG 还是 SWD如果 Port 选错比如芯片只支持 SWD 但你选了 JTAG就会连不上检查 Jlink 的固件版本是否过旧用 JLink Configurator 升级一下检查 Keil 安装目录下的 JLink 驱动 DLL 版本是否和系统安装的 Jlink 软件版本匹配最后一条特别容易被忽略。Keil 自带了一个 JLink 的 DLL 文件如果你后来单独升级了 Jlink 软件但没更新 Keil 里的 DLL就可能出现版本不匹配的问题。解决办法是把 SEGGER 安装目录下的 JLinkARM.dll 复制到 Keil 的安装目录覆盖旧文件。3. 接口定义与硬件连接别在第一步就接错线3.1 标准 20 针接口的引脚定义Jlink 最常见的接口是 20 针的 JTAG 排针虽然现在很多开发板用的是简化的 10 针或者 4 针 SWD 接口但了解 20 针的定义仍然有必要因为很多转接板都是从这里引出的。引脚信号名方向说明1VTref输入目标板参考电压必须接2SWDIO/TMS双向SWD 数据线 / JTAG 模式选择3GND-地4SWCLK/TCK输出SWD 时钟 / JTAG 时钟5GND-地6SWO/TDO输入单线输出 / JTAG 数据输出7KEY-防呆引脚通常不接8TDI输出JTAG 数据输入9GND-地10nRESET输出复位信号11GND-地12TRACESWO输入追踪输出13GND-地14NC-未连接15GND-地16NC-未连接17GND-地18NC-未连接19GND-地20GND-地实际使用中SWD 模式只需要接四根线VTref、SWDIO、SWCLK、GND。如果目标板有复位引脚建议把 nRESET 也接上这样 Jlink 可以在烧录前主动复位芯片提高成功率。3.2 VTref 引脚为什么必须接VTref 是 Jlink 用来检测目标板电压的引脚。Jlink 通过它来判断目标板是否上电、电压是否在合理范围内并据此调整 IO 电平。如果 VTref 不接Jlink 会认为目标板没上电直接拒绝连接。有些开发板把 VTref 直接连到了 3.3V 电源上这样 Jlink 一插上就能检测到电压。但有些板子需要你从外部供电这时候就必须确保 VTref 接到了正确的电压节点上。我遇到过一种情况目标板是 1.8V 供电的低功耗芯片但 Jlink 默认按 3.3V 输出电平结果就是能识别到芯片但烧录总是失败。解决办法是在 JLink Commander 里手动设置目标电压或者用 JLink 的 Target Power 功能给目标板供电前提是目标板功耗不超过 Jlink 的供电能力。3.3 SWD 和 JTAG 怎么选SWD 和 JTAG 是两种不同的调试协议。JTAG 是老牌标准需要 4 根信号线TCK、TMS、TDI、TDO支持多器件菊花链。SWD 是 ARM 后来推出的简化协议只需要 2 根信号线SWCLK、SWDIO引脚占用少速度也不差。对于绝大多数 Cortex-M 芯片优先选 SWD。原因很简单引脚少、接线简单、不容易接错。而且 SWD 在高速下比 JTAG 更稳定因为信号线少串扰和时序问题更少。只有在以下情况才需要考虑 JTAG芯片只支持 JTAG 不支持 SWD一些老芯片或者特定架构需要菊花链连接多个芯片需要用到 JTAG 特有的边界扫描功能在 Keil 里切换 SWD/JTAG 的位置在 Debug - Settings - Port 下拉框。如果你选了 SWD 但实际接的是 JTAG 线序就连不上反之亦然。4. 烧录工具链全景JFlash、Keil、OpenOCD 各自适合什么场景4.1 JFlash独立烧录的首选JFlash 是 SEGGER 官方提供的独立烧录工具不依赖任何 IDE直接通过 Jlink 操作目标芯片。它的优势在于支持芯片型号最全SEGGER 的器件数据库更新很及时可以生成烧录脚本适合量产环境支持命令行模式可以集成到自动化流程里烧录速度快尤其是大容量 Flash 的芯片使用 JFlash 的基本流程是新建工程 - 选择芯片型号 - 设置接口类型和速度 - 连接目标 - 打开烧录文件 - 执行烧录。烧录文件常见的有三种格式Hex、Bin、S19。Hex 和 S19 都带地址信息Bin 是纯二进制不带地址需要手动指定起始地址。Motorola S-recordS19格式在一些汽车电子和工业控制领域很常见JFlash 原生支持。提示用 JFlash 烧录 Bin 文件时起始地址一定要填对。填错了轻则烧录失败重则把 Bootloader 区域覆盖掉芯片直接变砖。4.2 Keil 内嵌烧录日常开发最顺手大部分人在日常开发中都是用 Keil 的 Download 按钮直接烧录。这种方式最方便但也有一些隐藏的坑。Keil 的烧录流程是编译生成 axf 文件 - 调用 Jlink 驱动 - 通过 Jlink 把程序写入芯片 Flash。这里面涉及几个关键配置Flash Download 算法Keil 需要知道目标芯片的 Flash 编程算法这个通常在安装器件支持包DFP时自动配置好Reset and Run勾选这个选项后烧录完成会自动复位并运行程序Verify Code Download建议勾选烧录后会校验数据确保写入正确常见的 Keil 烧录失败原因包括Flash 算法选错、芯片型号选错、Jlink 速度设置过高、目标板供电不足。排查时可以先降低 Jlink 速度试试比如从 10MHz 降到 1MHz如果降速后能烧录成功说明是信号完整性问题。4.3 OpenOCD开源方案的代表OpenOCD 是一个开源的片上调试工具支持 Jlink、ST-Link、CMSIS-DAP 等多种调试探针。它的优势是完全免费、可定制性强适合喜欢折腾或者有特殊需求的开发者。用 OpenOCD 配合 Jlink 烧录 STM32 的典型命令是这样的openocd -f interface/jlink.cfg -f target/stm32f1x.cfg -c program firmware.bin 0x08000000 verify reset exit这条命令的意思是使用 Jlink 接口配置和 STM32F1 目标配置烧录 firmware.bin 到 0x08000000 地址校验后复位退出。OpenOCD 的配置文件体系比较灵活interface 目录下是调试探针的配置target 目录下是芯片的配置。如果你用的芯片不在默认列表里可以自己写一个配置文件。不过 OpenOCD 的学习曲线比 JFlash 和 Keil 陡一些配置文件写错了报错信息也不够友好。如果你只是想做简单的烧录JFlash 或 Keil 更省事。但如果你需要集成到 CI/CD 流程里或者用 VS Code Cortex-Debug 插件调试OpenOCD 就是绕不开的。4.4 各工具适用场景对比工具上手难度灵活性适用场景JFlash低中独立烧录、量产、快速验证Keil 内嵌低低日常开发调试OpenOCD中高高开源项目、CI/CD、VS CodeJLink Commander中高底层调试、脚本化操作Ozone中中图形化调试、实时变量监控5. 烧录失败排查实录从连不上到烧不进去的完整链路5.1 Jlink 连接不上芯片的排查顺序“Jlink 连接不上”是最常见的问题没有之一。排查应该按照从物理层到协议层的顺序来第一步检查供电。目标板是否上电VTref 是否接到正确的电压节点用万用表量一下目标板 3.3V 是否正常。我遇到过好几次是目标板电源芯片烧了导致 Jlink 检测不到电压。第二步检查接线。SWDIO、SWCLK、GND 是否接对有没有虚焊排线有没有断特别是用杜邦线连接的时候接触不良是家常便饭。建议用万用表通断档逐根量一下。第三步检查接口模式。Keil 或 JFlash 里选的是 SWD 还是 JTAG和目标板实际接线是否一致第四步降低速度。Jlink 默认速度可能偏高尤其是接线较长或者目标板有干扰时。在 JLink Commander 里输入speed 1000把速度降到 1MHz 试试。第五步检查复位引脚。有些芯片需要 nRESET 拉低才能进入调试模式如果 nRESET 没接或者被其他电路拉高就连不上。可以尝试在 JLink Commander 里用connect命令手动连接观察报错信息。第六步检查芯片是否被锁。有些芯片开启了读保护或者调试保护Jlink 无法连接。这时候需要用芯片厂商提供的专用工具解锁比如 STM32 的 ST-Link Utility 里的“解除读保护”功能。5.2 Keil 下载程序报 “JLink v5.10h device selection” 错误这个错误通常出现在 Keil 的 Debug 设置里提示设备选择有问题。根本原因一般是Keil 里选的芯片型号和 Jlink 器件数据库里的型号不匹配。解决办法打开 Keil 的 Options for Target - Debug - Settings在 Device 下拉框里手动选择正确的芯片型号。如果列表里找不到你的芯片说明 Jlink 的器件数据库版本太旧需要升级 Jlink 软件。还有一种可能是 Keil 的 DFPDevice Family Pack没有安装或者版本不对。在 Pack Installer 里检查一下对应芯片的 DFP 是否已安装没有的话装一下。5.3 SWD 不识别芯片的几种典型情况“Jlink SW 不识别”这个现象背后可能有好几种原因我按遇到频率从高到低排列原因一芯片处于低功耗模式。有些芯片在睡眠或停机模式下会关闭调试接口Jlink 无法唤醒。解决办法是在 JLink Commander 里用connect命令时选择“Connect under reset”让 Jlink 在复位状态下连接。原因二SWD 引脚被复用。有些芯片的 SWDIO 和 SWCLK 引脚默认是 GPIO 功能需要在代码里或者通过选项字节配置成调试功能。如果芯片里已经烧了一个把 SWD 引脚配置成 GPIO 的程序Jlink 就连不上。这时候需要用“Connect under reset”模式在芯片复位后、程序运行前抢先连接。原因三时钟配置问题。如果芯片的系统时钟配置有问题比如外部晶振没起振导致芯片跑在内部低速时钟上SWD 通信可能会失败。这种情况比较少见但确实遇到过。原因四硬件设计问题。SWDIO 和 SWCLK 走线太长、没有上拉电阻、旁边有强干扰源都会导致通信不稳定。SWD 协议虽然只需要两根线但对信号质量还是有要求的。建议 SWDIO 和 SWCLK 各加一个 10K 上拉电阻到 3.3V。5.4 擦除后烧录失败的诡异案例有一次我遇到一个很诡异的问题用 Jlink 擦除 S32K148 的 0x400 区域后再烧录就总是失败。后来查了半天才发现0x400 区域存的是芯片的配置信息擦掉之后芯片的时钟配置恢复默认导致 Flash 控制器工作不正常。这个案例的教训是不要随意擦除芯片的非易失性配置区域。很多芯片都有类似的配置区比如 STM32 的选项字节、NXP 的 FCFFlash Configuration Field、ESP32 的 eFuse。这些区域存的是芯片启动配置、时钟设置、安全设置等关键信息擦错了芯片可能直接不工作。如果确实需要修改这些区域一定要先备份原始数据用芯片厂商提供的专用工具操作不要直接用 Jlink 的擦除功能。6. 不同芯片平台的 Jlink 烧录实战要点6.1 STM32 系列最成熟的生态STM32 是 Jlink 支持最好的平台之一。用 Keil Jlink 烧录 STM32 基本是开箱即用但有几个细节值得注意BOOT0 引脚STM32 的启动模式由 BOOT0 和 BOOT1 决定。如果 BOOT0 拉高芯片会从系统存储器启动这时候 Jlink 可能连不上。确保 BOOT0 在正常运行时是拉低的。读保护如果芯片开启了读保护RDP Level 1Jlink 无法读取 Flash 内容但可以擦除。如果 RDP Level 2 被激活芯片就彻底锁死了只能换芯片。选项字节STM32 的选项字节控制着看门狗、复位行为、读保护等设置。用 JLink Commander 的unlock命令可以解除读保护但会同时擦除整个 Flash。6.2 ESP32 系列烧录方式完全不同ESP32 虽然也支持 JTAG 调试但它的烧录方式和 STM32 完全不同。ESP32 默认通过 UART 串口烧录用 esptool 或者 Flash Download Tools。Jlink 在 ESP32 上的主要用途是调试而不是烧录。如果你非要用 Jlink 烧录 ESP32需要把 Jlink 的 JTAG 接口接到 ESP32 的 JTAG 引脚GPIO12-15用 OpenOCD 配合 ESP32 的配置文件通过 OpenOCD 的program命令烧录但说实话ESP32 用串口烧录更简单可靠。esptool 的命令行用起来也很方便esptool.py --chip esp32 --port COM3 --baud 921600 write_flash 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 app.binESP32-C3 和 ESP32-S3 的烧录方式类似但引脚定义和地址映射有所不同。ESP32-C3 的 JTAG 引脚是 GPIO4-7ESP32-S3 是 GPIO39-42。设计硬件时如果预留了这些引脚做调试接口会方便很多。6.3 树莓派和 Jetson系统级烧录树莓派和 Jetson 这类单板计算机的“烧录”概念和单片机不同它们通常是把系统镜像写入 SD 卡或者 eMMC。Jlink 在这类平台上基本用不上因为它们的调试接口不是标准的 SWD/JTAG。树莓派的系统烧录用 Raspberry Pi Imager 或者 balenaEtcher 把 img 文件写入 SD 卡就行。Jetson Orin Nano Super 的系统烧录需要用 NVIDIA SDK Manager通过 USB 连接进入恢复模式后烧录。这些流程和 Jlink 没有直接关系但如果你同时在做单片机和 Linux 开发了解这些区别有助于避免混淆。6.4 国产芯片和 RISC-VJlink 的兼容性Jlink 对国产芯片的支持这几年进步很大。像 GD32、CH32、APM32 这些兼容 STM32 的芯片基本可以直接用 STM32 的配置烧录。但有些细节需要调整比如 Flash 算法可能不同烧录地址可能有偏移。RISC-V 芯片方面Jlink 从 V6.80 固件开始支持 RISC-V 调试。但支持程度参差不齐有些芯片需要专门的配置文件。如果你用的是国产 RISC-V 芯片建议先查一下 SEGGER 官网的支持列表或者去芯片厂商的论坛看看有没有现成的 Jlink 配置。7. 那些官方文档不会告诉你的实操经验7.1 山寨 Jlink 的识别与风险市面上有很多便宜的“Jlink V9”其实是山寨货价格可能只有正品的十分之一。这些山寨 Jlink 在基本功能上可能能用但有几个风险固件升级会变砖SEGGER 的固件升级程序会检测硬件真伪山寨货升级后可能直接无法使用高速下不稳定山寨货的电路设计和元器件质量参差不齐高速烧录时容易出错没有技术支持出了问题只能自己扛识别山寨 Jlink 的方法正品 Jlink 的 USB 接口处有 SEGGER 的激光刻字PCB 做工精细固件版本可以在 JLink Configurator 里正常升级。山寨货通常刻字模糊PCB 粗糙固件升级会报错。如果你只是学习用山寨 Jlink 也不是不能用但建议不要升级固件用出厂版本就行。如果是公司项目还是买正品省心。7.2 Jlink 固件升级的正确姿势Jlink 固件升级本身很简单打开 JLink Configurator插上 Jlink它会自动检测并提示升级。但有几个注意事项升级过程中不要拔掉 Jlink否则可能变砖升级前关闭所有占用 Jlink 的软件包括 Keil、IAR、JFlash 等如果升级失败可以尝试用 JLink 的恢复模式短接特定引脚后上电再用 JLink Configurator 修复固件版本不是越新越好。新固件可能修复了一些 bug但也可能引入新的问题。如果你当前版本用着稳定没有遇到必须升级才能解决的问题可以不用急着升。7.3 RTT 和 SWO被低估的调试利器Jlink 的 RTTReal Time Transfer功能是我最喜欢的功能之一。它通过 Jlink 的调试接口在目标芯片和 PC 之间建立一个高速数据通道可以用来输出日志、传输数据速度比串口快得多。使用 RTT 只需要在代码里加入 SEGGER_RTT 的源文件然后调用SEGGER_RTT_printf函数就行。PC 端用 JLink RTT Viewer 或者 Ozone 就能看到输出。SWOSerial Wire Output是另一种输出方式通过 SWD 接口的 SWO 引脚输出追踪数据。相比 RTTSWO 需要额外的引脚但它是硬件级别的输出对 CPU 的干扰更小。这两个功能在调试复杂系统时非常有用尤其是当你没有多余的 UART 引脚可用时。我建议每个用 Jlink 的开发者都花点时间了解一下 RTT一旦用上就离不开了。7.4 多芯片调试和菊花链配置有些项目需要同时调试多颗芯片比如一颗主控加一颗协处理器。Jlink 支持通过 JTAG 菊花链或者多设备配置来同时连接多颗芯片。JTAG 菊花链的配置需要在 JLink Commander 里设置 IR 长度和设备数量。SWD 模式下不支持菊花链但可以通过多路复用器切换。更简单的做法是用多个 Jlink每个接一颗芯片。Keil 和 IAR 都支持配置多个调试目标可以在不同的调试会话之间切换。虽然麻烦一点但稳定性更好。8. 从烧录到量产Jlink 在产线上的角色8.1 JFlash 命令行模式与自动化JFlash 支持命令行模式可以集成到自动化烧录流程里。基本用法是JFlash.exe -openprj project.jflash -open firmware.hex -auto -exit这条命令会打开指定的工程文件加载固件自动执行烧录然后退出。配合批处理脚本或者 CI 工具可以实现无人值守的批量烧录。在产线上通常会用一个 USB Hub 连接多个 Jlink每个 Jlink 接一个待烧录的板子。然后用脚本控制多个 JFlash 实例并行烧录。这种方式效率很高但要注意 USB 带宽和电源供应是否足够。8.2 烧录文件的格式选择量产时烧录文件的格式选择也有讲究Hex 格式带地址信息通用性好但文件体积大Bin 格式体积小烧录快但需要手动指定地址S19 格式Motorola S-record汽车电子和工业控制领域常用带地址和校验信息对于量产我通常推荐用 Bin 格式因为体积小、烧录快。但前提是地址信息要准确建议在研发阶段就用 Bin 格式验证过再上产线。8.3 烧录计数和防呆机制产线上最怕的是漏烧或者重复烧录。JFlash 支持烧录计数功能可以设置每个芯片的烧录次数限制。但更可靠的做法是在固件里加入序列号或者烧录标记烧录后通过读取特定地址的数据来确认是否已烧录。还有一种防呆机制是用 Jlink 的 Target Power 功能给目标板供电如果目标板没有正常上电Jlink 会报错避免空烧。9. 常见问题速查与个人体会9.1 高频问题速查表问题现象可能原因快速排查方法Jlink 连接不上供电、接线、接口模式量电压、查线序、换 SWD 试试烧录失败Flash 算法、速度、芯片锁降速、换算法、解锁芯片Keil 找不到设备驱动、DLL 版本、端口选择重装驱动、更新 DLL、检查 PortSWD 不识别引脚复用、低功耗模式Connect under reset、检查选项字节烧录后不运行复位配置、BOOT 引脚检查 Reset and Run、BOOT0 电平固件升级变砖山寨硬件、升级中断恢复模式修复、换正品9.2 我个人的几条经验用了这么多年 Jlink有几条经验我觉得值得分享第一买正品。山寨 Jlink 省下的钱可能还不够你排查问题花的时间。正品 Jlink 的稳定性和技术支持是值得的。第二保持固件更新但不要追新。新固件可能修复了你正遇到的问题也可能引入新问题。如果不是必须不用急着升级。第三SWD 接线越短越好。我见过太多因为杜邦线太长导致通信不稳定的案例。如果条件允许用排线或者 PCB 上的调试座比杜邦线可靠得多。第四养成备份配置的习惯。JFlash 的工程文件、OpenOCD 的配置文件、Keil 的调试设置这些配置一旦调好就备份一份。换电脑或者重装系统后直接恢复配置省去重新调试的时间。第五RTT 和 SWO 值得花时间学。这两个功能在调试复杂问题时能帮你省下大量时间尤其是当你没有多余的串口可用时。9.3 后续可以扩展的方向如果你已经掌握了 Jlink 的基本烧录和调试可以进一步了解这几个方向Ozone 图形化调试器的使用、J-Scope 实时波形可视化、Jlink 的脚本化操作JLink Script、以及基于 Jlink SDK 的自定义工具开发。这些进阶功能在复杂项目里能发挥很大作用。另外如果你在做多平台开发可以研究一下如何用一套 Jlink 配置同时支持 Keil、IAR、VS Code 和命令行工具。核心思路是把 Jlink 的配置和 IDE 解耦用 JLink Commander 或者 OpenOCD 作为统一的底层接口上层 IDE 只负责调用。这样换 IDE 的时候不需要重新配置调试环境省事很多。
返回列表