4. 常见烧录工具:J-Flash、STM32CubeProgrammer、OpenOCD、串口烧录工具、厂内自动化烧录架

烧录工具,说白了就是咱们把固件塞进芯片的那把「钥匙」。不同项目、不同阶段,用的钥匙完全不一样。我见过不少工程师,手里就一把 J-Flash 走天下,结果碰到量产场景直接抓瞎。

今天我把市面上最常见的五类工具掰开揉碎讲一遍。你想想看,搞懂它们的脾气,日志分析才能有的放矢。

4.1 J-Flash:调试器里的「瑞士军刀」

J-Flash 是 Segger 家的王牌工具,配合 J-Link 调试器使用。我个人习惯把它当作开发阶段的「主力烧录器」。为什么?因为它快、稳、日志清晰。

核心特点:

  • 支持芯片极多:ARM Cortex-M/R/A 全系列、RISC-V 部分型号
  • 烧录速度:最高可达 15 MB/s(SWO 模式下)
  • 日志输出:详细到每一步的寄存器操作
  • 脚本支持:J-Flash 命令行 + .jflash 项目文件

我在项目中遇到过一件事:某次量产前测试,J-Flash 突然报 Failed to connect。日志里只写了 No device found on SWD。我当时第一反应是硬件虚焊,结果查了半天发现是 J-Link 固件版本太老,不兼容新芯片的 SWD 时序。嗯,这里要注意——J-Link 固件要定期更新。

我的习惯:每次拿到新芯片,先用 J-Flash 的 Target Device Settings 确认 RAM 地址和 Flash 扇区大小。这一步能避免 80% 的烧录地址错误。

4.2 STM32CubeProgrammer:ST 家的「全能选手」

如果你主要做 STM32 系列,这个工具你绕不开。它支持 SWD、UART、USB、DFU 四种烧录通道。说白了,一根线都不用焊,只要芯片有 bootloader 就能烧。

烧录方式 连接引脚 速度 适用场景
SWD SWDIO, SWCLK, GND 快(~4 MB/s) 开发调试
UART TX, RX, GND 慢(115200 bps) 无调试器时救急
USB DFU USB D+, D- 中等 量产升级
OTA 无线 取决于协议 远程升级

我曾经用 UART 烧录救过一批板子——SWD 接口被误接短路了,只能靠串口 bootloader 救回来。日志里反复出现 Timeout waiting for ACK,最后发现是波特率不匹配。STM32CubeProgrammer 默认 115200,但板子上晶振偏差大,降到 9600 就稳了。

避坑指南:用 USB DFU 烧录时,如果日志出现 Device not in DFU mode,八成是 boot0 引脚没拉高。我曾经在这上面浪费了整整一个下午。

4.3 OpenOCD:开源界的「万能胶」

OpenOCD(Open On-Chip Debugger)是开源烧录工具里的扛把子。它本身不挑调试器——FTDI、CMSIS-DAP、J-Link(部分功能)都能用。但它的日志……嗯,说实话,不太友好。

你看一段典型的 OpenOCD 日志:

Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Error: target not halted
Error: flash write failed at address 0x08000000
Warn : Trying to use configured reset vector 0x08000004

这里 target not halted 是最常见的坑。为什么?因为芯片还在跑代码,调试器抢不到控制权。我建议在 OpenOCD 脚本里加上 reset halt 命令,强制芯片先停下来。

OpenOCD 日志关键字段速查:

  • DPIDR:调试端口 ID,确认芯片是否被正确识别
  • target not halted:芯片未停止,检查复位时序
  • flash write failed:写入失败,检查 Flash 保护位
  • timeout:通信超时,检查接线或时钟频率

4.4 串口烧录工具:最朴素的「保底方案」

串口烧录,说白了就是靠 UART 把固件一点一点「喂」给芯片。它慢,但可靠。我手边常备一个 USB-TTL 模块,遇到调试器不认的板子,直接上串口。

常用的串口烧录工具有:

  • SecureCRT / Putty:配合 XMODEM/YMODEM 协议
  • STM32 Flash Loader Demonstrator:ST 官方串口工具
  • ESP32 的 esptool.py:乐鑫家的串口烧录神器
  • 自定义 Python 脚本:用 pyserial 自己写,灵活度最高

串口烧录的日志通常长这样:

Connecting ...
Chip ID: 0x0413
Flash size: 512KB
Erasing sector 0x08000000 ...
Writing at 0x08001000 ... 100%
Verifying ... OK

注意看 Chip ID 和 Flash size。如果这两个值不对,说明芯片没进烧录模式,或者 bootloader 版本不匹配。我遇到过最离谱的一次——Chip ID 读出来全是 0xFF,结果是 TX/RX 接反了。

我的经验:串口烧录时,日志里出现 Timeout 不要慌。先检查三件事:波特率、接线、芯片供电。80% 的问题出在这三个地方。

4.5 厂内自动化烧录架:量产场景的「效率之王」

前面说的都是开发阶段用的工具。到了量产环节,你还拿 J-Flash 一块一块烧?那效率太低了。厂内自动化烧录架,才是量产场景的正解。

常见的自动化烧录方案:

  • 一拖四/一拖八烧录器:同时烧录多片芯片
  • 在线烧录(ICT/FCT):板子贴片后直接通过测试点烧录
  • 离线烧录器:先烧好芯片,再贴片
  • 自动化机械臂 + 烧录座:全自动上下料

自动化烧录的日志,通常由上位机软件统一收集。我见过最典型的报错是 Socket contact failure——烧录座探针接触不良。这种问题在日志里表现为:同一批板子,有的烧录成功,有的失败,失败位置随机。

量产避坑:自动化烧录架日志里如果出现大量 Verification failed,别急着怀疑固件。先检查烧录座的探针磨损情况。我曾经因为探针用了 10 万次没换,导致一整批板子烧录不良,返工成本高得吓人。

4.6 工具选择决策框架

说了这么多,到底该用哪个?我画了一张图,帮你快速决策:

烧录工具选择决策框架 开始选择烧录工具 开发阶段 vs 量产阶段? 开发 量产 J-Flash / OpenOCD 自动化烧录架 芯片品牌? ST 其他 开源 STM32CubeProg J-Flash OpenOCD 烧录方式? 在线 离线 自动化 ICT/FCT 烧录 离线烧录器 机械臂+烧录座 💡 提示:串口烧录作为保底方案,任何阶段都建议备一套 开发阶段用 J-Flash/OpenOCD,量产阶段用自动化烧录架

这张图的核心逻辑很简单:开发阶段追求灵活和调试能力,量产阶段追求效率和稳定性。串口烧录作为保底方案,任何时候都建议备一套。

4.7 本章小结

五类工具,各有各的脾气。J-Flash 快而稳,STM32CubeProgrammer 专而全,OpenOCD 开源灵活但日志晦涩,串口烧录朴素可靠,自动化烧录架是量产利器。