3、调试器固件升级:J-Link固件升级、ST-Link固件升级、升级失败后的恢复方法
调试器这东西,用久了固件版本总会落后。新出的芯片、新的调试协议,老固件可能就不认了。我见过不少工程师,板子调得好好的,换个新片子就连不上,折腾半天发现是调试器固件太老。
今天咱们就把 J-Link 和 ST-Link 的升级流程捋一遍。顺便聊聊升级失败怎么救——嗯,这部分才是重点,谁还没变过砖呢?
核心观点:调试器固件升级不是小事。升级前确认版本兼容性,升级中保证供电稳定、线缆可靠,升级后验证功能。一旦失败,别慌,大部分情况都能救回来。
3.1 J-Link 固件升级
J-Link 的升级工具,说白了就是它自己那套软件包。我习惯用 J-Flash 或者命令行下的 J-Link Commander。操作不复杂,但有几个坑得注意。
3.1.1 升级前的准备
- 确认版本:打开 J-Link Commander,输入
v查看当前固件版本。记下来,万一升级后出问题,至少知道之前哪个版本能用。 - 下载工具:去 Segger 官网下载最新版 J-Link Software Pack。别用第三方修改版,我吃过亏。
- 连接方式:USB 直连电脑,不要经过 USB Hub。供电要稳,有些笔记本 USB 口供电不足,升级到一半掉电就麻烦了。
3.1.2 使用 J-Flash 升级
- 打开 J-Flash,点击 Target → Connect。
- 连接成功后,点击 Target → Update Firmware。
- 工具会自动检测最新固件版本,弹出确认对话框。
- 点击 Yes,等待进度条走完。期间不要拔 USB 线。
- 升级完成后,J-Link 会自动重启。重新连接一次,输入
v确认版本号已更新。
小技巧:如果 J-Flash 提示“No newer firmware available”,但你知道有新版本,可以手动下载固件文件(.bin 或 .hex),然后用 J-Link Commander 的 exec firmware <文件名> 命令强制烧录。
3.1.3 使用 J-Link Commander 命令行升级
我个人更喜欢命令行方式,尤其是批量处理或者远程操作时。步骤很简单:
# 打开 J-Link Commander
JLinkExe
# 连接目标(这里选 SWD,速度 4000 kHz)
connect
SWD
4000
# 执行固件升级
exec firmware J-Link_V9_2024_01_15.bin
# 升级完成后退出
exit
警告:J-Link 的克隆版(盗版)升级风险极高。Segger 在固件中加入了校验机制,克隆版一旦升级,轻则变砖,重则永久损坏。我建议:如果是克隆版,老老实实用原厂固件版本,别手痒去点升级。
3.2 ST-Link 固件升级
ST-Link 的升级比 J-Link 稍微麻烦一点。尤其是 ST-Link/V2 和 V3 的升级方式不太一样。我最早用 ST-Link 时,就因为没搞清楚版本差异,折腾了一下午。
3.2.1 升级工具选择
| ST-Link 版本 | 推荐升级工具 | 备注 |
|---|---|---|
| ST-Link/V2 | STM32CubeProgrammer | 支持 DFU 模式强制升级 |
| ST-Link/V2-ISOL | STM32CubeProgrammer | 隔离版本,升级时注意供电 |
| ST-Link/V3 | STM32CubeProgrammer 或 ST-Link Upgrade | V3 支持更高速的 SWD/JTAG |
3.2.2 使用 STM32CubeProgrammer 升级
- 打开 STM32CubeProgrammer,选择 ST-Link 作为连接方式。
- 点击 Connect,软件会自动识别 ST-Link 的当前固件版本。
- 在菜单栏选择 ST-Link → Firmware Update。
- 软件会检查最新版本。如果有更新,点击 Upgrade。
- 升级过程中,ST-Link 的 LED 会闪烁。等它恢复常亮,就说明升级完成了。
小技巧:如果 ST-Link 无法正常连接(比如驱动坏了或者固件损坏),可以按住 ST-Link 上的 复位按钮,然后插入 USB。这时 ST-Link 会进入 DFU 模式,STM32CubeProgrammer 就能识别并强制升级了。
3.2.3 ST-Link/V2 与 V3 的差异
嗯,这里要重点说一下。V2 和 V3 的升级固件不通用。V3 的固件文件不能刷进 V2,反过来也不行。我见过有人拿 V3 的固件去刷 V2,结果 ST-Link 直接不认了。
- ST-Link/V2:最大 SWD 速度 4 MHz,固件升级通过 USB 或 DFU 模式。
- ST-Link/V3:最大 SWD 速度 24 MHz,支持更复杂的调试功能,固件升级必须用专用工具。
3.3 升级失败后的恢复方法
升级失败,说白了就是固件写坏了。调试器变砖,连不上电脑。别急,大部分情况都能救。我总结了几种常见场景和对应的恢复方法。
3.3.1 J-Link 变砖恢复
J-Link 内部有一个独立的 Bootloader,专门用来恢复固件。只要 Bootloader 没坏,就能救。
- 强制进入 Bootloader:短接 J-Link 板子上的 ERASE 和 GND 引脚(具体位置看型号),然后上电。保持短接 5 秒以上。
- 重新烧录固件:断开短接,用 J-Link Commander 连接。这时工具会识别到 Bootloader 模式,直接执行
exec firmware <固件文件>。 - 验证:烧录完成后,重启 J-Link,输入
v确认版本。
注意:如果短接 ERASE 引脚后仍然无法识别,可能是 Bootloader 也损坏了。这种情况需要用 JTAG/SWD 编程器直接烧录 Bootloader 镜像。嗯,说实话,这种情况我遇到过两次,都是因为升级过程中 USB 线被碰掉了。
3.3.2 ST-Link 变砖恢复
ST-Link 的恢复方法更直接。它有一个硬件复位机制,配合 DFU 模式基本能搞定。
- 进入 DFU 模式:按住 ST-Link 上的 复位按钮,插入 USB。保持按住 3 秒后松开。
- 使用 STM32CubeProgrammer:选择 DFU 连接方式,软件会识别到 ST-Link 在 DFU 模式。
- 强制升级:在 ST-Link → Firmware Update 中,选择正确的固件版本,点击 Upgrade。
- 等待完成:升级完成后,拔掉 USB,重新插入。ST-Link 应该恢复正常。
小技巧:如果 ST-Link 连 DFU 模式都进不去,可以尝试短接板子上的 BOOT0 和 VCC(3.3V),然后上电。这样 ST-Link 会从系统存储器启动,再用 STM32CubeProgrammer 重新烧录固件。
3.3.3 通用恢复原则
| 场景 | 恢复方法 | 成功率 |
|---|---|---|
| 固件升级中断(USB 断开) | 强制进入 Bootloader / DFU 模式,重新升级 | 高(90% 以上) |
| 固件版本不匹配 | 降级到之前可用的固件版本 | 中(70% 左右) |
| Bootloader 损坏 | 使用外部编程器烧录 Bootloader 镜像 | 低(需要硬件工具) |
| 硬件损坏(如电源芯片烧毁) | 更换硬件,无法通过软件恢复 | 0% |
我的经验:升级失败后,第一件事不是拆板子,而是检查 USB 连接和供电。很多时候只是驱动掉了,重新插拔或者换个 USB 口就好了。我曾经因为一根劣质 USB 线,折腾了三个小时,最后换线就解决了。嗯,从那以后,我包里常备两根好线。
3.4 升级后的验证
升级完别急着收工。花两分钟验证一下,省得下次调试时出幺蛾子。
- 版本确认:用工具查看固件版本,确认已更新到目标版本。
- 连接测试:连接一块已知正常的开发板,尝试下载和调试。
- 速度测试:用最高 SWD/JTAG 速度连接,看是否稳定。如果出现通信错误,适当降速。
调试器固件升级这事儿,说难不难,说简单也有坑。记住一点:升级前备份,升级中稳电,升级后验证。万一变砖了,别慌,按上面的方法一步步来,大部分都能救回来。