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 知识体系总览

下面这张图,把本章的核心内容串起来了。你可以把它当作选型参考。

烧录工具链知识体系 烧录器硬件 命令行工具 厂商SDK烧录库 J-Link / ST-Link / OpenOCD JLinkExe / STM32_Programmer_CLI SEGGER SDK / STM32CubeProg SDK 硬件连接 + 驱动配置 脚本化烧录 + 批量执行 产测集成 + 二次开发 选型建议 纯烧录 → 命令行工具 | 产测集成 → SDK烧录库 | 多芯片支持 → OpenOCD

3.5 选型决策指南

说了这么多,到底怎么选?我总结了一个简单的决策流程:

  1. 先看芯片:如果是STM32,优先考虑ST-Link + STM32_Programmer_CLI;如果是其他ARM芯片,J-Link更通用
  2. 再看预算:有钱上J-Link Pro,没钱用OpenOCD + CMSIS-DAP
  3. 最后看场景:纯烧录用命令行,集成产测用SDK

重要提醒:量产烧录最怕的就是「烧一半断了」。无论你选哪种工具,一定要在脚本里加烧录校验和重试机制。我见过太多产线因为没加校验,烧了1000片才发现有20片是坏的。