3. 烧录工具链介绍
做量产烧录,第一关就是选对工具。你想想看,芯片焊在板子上,程序下不进去,那前面所有工作都白费了。这一章我就把常用的烧录器、命令行工具和厂商SDK烧录库给你捋一遍。
3.1 常用烧录器
烧录器说白了就是PC和芯片之间的翻译官。它把电脑上的固件数据,转成芯片能理解的调试协议信号。市面上烧录器很多,但量产场景下,真正用得多的就那几款。
3.1.1 J-Link
J-Link是SEGGER公司的产品。我个人习惯把它叫做「烧录界的瑞士军刀」。为什么?因为它支持的芯片种类太多了——ARM Cortex-M全系列、RISC-V、甚至一些老牌的ARM7/ARM9都能用。
J-Link在量产中的优势:
- 速度极快:SWD接口最高可达50 MHz,烧录1MB固件只需几秒
- 稳定可靠:我在产线上连续跑过72小时,没掉过一次链子
- 命令行工具完善:JLinkExe + JFlash,脚本化非常方便
- 支持批量烧录:配合J-Flash Lite,可以一次烧多片
我的经验:J-Link有个隐藏功能——通过USB虚拟串口输出日志。产测时不用额外接串口线,省事不少。
3.1.2 ST-Link
ST-Link是ST官方为STM32配套的调试器。说实话,它性能不如J-Link,但胜在便宜。一块ST-Link/V2淘宝上才十几块钱。如果你做的是STM32系列的量产,用ST-Link完全够用。
不过要注意——ST-Link的固件版本会影响烧录速度。我曾经遇到过一批ST-Link/V2,固件太老,烧录速度只有J-Link的1/3。后来升级到最新固件,速度才提上来。
| 特性 | J-Link | ST-Link |
|---|---|---|
| 最大SWD速度 | 50 MHz | 4 MHz |
| 芯片支持范围 | ARM + RISC-V + 其他 | 仅STM32/STM8 |
| 命令行工具 | JLinkExe | STM32_Programmer_CLI |
| 批量烧录能力 | 强(J-Flash批量模式) | 中等(需脚本配合) |
| 价格 | 几百到几千 | 几十到几百 |
3.1.3 OpenOCD
OpenOCD是个开源项目。它不是硬件,而是一套软件框架。它通过FTDI、CMSIS-DAP等调试器,间接控制芯片。说白了,OpenOCD是个万能驱动——只要你的调试器能被它识别,就能烧录。
我为什么在量产中推荐OpenOCD?因为它是免费的。如果你公司不想花钱买J-Link授权,OpenOCD + 一个几十块的CMSIS-DAP调试器,就能搭出一套量产烧录方案。
注意:OpenOCD的配置比较繁琐。每个芯片都要写.cfg配置文件。我第一次用的时候,光调STM32F4的配置就花了半天。但一旦配好,后面就一劳永逸了。
3.2 命令行烧录工具
量产烧录脚本的核心,就是命令行工具。你不可能让产线工人去点IDE的烧录按钮。必须用脚本,一键搞定。
3.2.1 JLinkExe
JLinkExe是J-Link的命令行版本。用法很简单:写一个.jlink脚本文件,里面放烧录指令,然后命令行执行。
// flash.jlink
device STM32F407VG
si SWD
speed 4000
connect
loadfile firmware.hex
r
g
exit
执行命令:
JLinkExe -CommanderScript flash.jlink
我个人习惯把烧录参数写在脚本里,这样换芯片型号时,只改脚本就行,不用动主程序。
3.2.2 STM32_Programmer_CLI
ST官方提供的命令行烧录工具。支持STM32全系列,包括读保护、写保护、选项字节配置等高级功能。
STM32_Programmer_CLI -c port=SWD -w firmware.hex 0x08000000 -v -rst
参数说明:
-c port=SWD:连接SWD接口-w firmware.hex 0x08000000:烧录到起始地址-v:烧录后校验-rst:烧录完复位芯片
避坑指南:我曾经遇到过STM32_Programmer_CLI在Windows 10上无法识别ST-Link的问题。后来发现是驱动版本不匹配。解决办法:先装ST-Link驱动,再装STM32CubeProgrammer,顺序不能反。
3.2.3 OpenOCD命令行
OpenOCD的命令行烧录方式稍微复杂一点,但灵活性很高。
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "program firmware.hex 0x08000000 verify reset exit"
拆解一下:
-f interface/stlink.cfg:指定调试器配置(ST-Link)-f target/stm32f4x.cfg:指定芯片配置(STM32F4系列)-c "...":执行烧录命令
3.3 厂商SDK烧录库
有些场景下,命令行工具不够用。比如你要在产测软件里集成烧录功能,或者需要自定义烧录流程(先擦除、再烧录、再校验、再配置选项字节)。这时候就要用厂商提供的SDK烧录库。
3.3.1 SEGGER Flash Loader
SEGGER提供了J-Link SDK,可以让你在C/C++代码里直接调用烧录函数。核心API就几个:
// 初始化J-Link
JLINKARM_Open();
// 连接芯片
JLINKARM_Connect();
// 下载固件
JLINKARM_WriteMem(addr, data, size);
// 关闭连接
JLINKARM_Close();
我曾在产测软件里用这套API,实现了「烧录 + 校验 + 读芯片ID + 写MAC地址」的一体化流程。效率比命令行方式高了30%。
3.3.2 STM32CubeProgrammer SDK
ST也提供了类似的SDK,叫STM32CubeProgrammer API。支持Python和C两种语言。Python版本特别适合快速开发。
from stm32programmer import Stm32Programmer
prog = Stm32Programmer()
prog.connect('SWD')
prog.download('firmware.hex')
prog.verify()
prog.disconnect()
我的建议:如果你只是做简单的量产烧录,用命令行工具就够了。但如果你需要集成到产测系统里,或者要做二次开发,那SDK烧录库是更好的选择。
3.4 知识体系总览
下面这张图,把本章的核心内容串起来了。你可以把它当作选型参考。
3.5 选型决策指南
说了这么多,到底怎么选?我总结了一个简单的决策流程:
- 先看芯片:如果是STM32,优先考虑ST-Link + STM32_Programmer_CLI;如果是其他ARM芯片,J-Link更通用
- 再看预算:有钱上J-Link Pro,没钱用OpenOCD + CMSIS-DAP
- 最后看场景:纯烧录用命令行,集成产测用SDK
重要提醒:量产烧录最怕的就是「烧一半断了」。无论你选哪种工具,一定要在脚本里加烧录校验和重试机制。我见过太多产线因为没加校验,烧了1000片才发现有20片是坏的。