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 工具选择决策框架
说了这么多,到底该用哪个?我画了一张图,帮你快速决策:
这张图的核心逻辑很简单:开发阶段追求灵活和调试能力,量产阶段追求效率和稳定性。串口烧录作为保底方案,任何时候都建议备一套。
4.7 本章小结
五类工具,各有各的脾气。J-Flash 快而稳,STM32CubeProgrammer 专而全,OpenOCD 开源灵活但日志晦涩,串口烧录朴素可靠,自动化烧录架是量产利器。