4. 核心烧录命令解析:烧录命令结构
烧录命令,说白了就是告诉烧录器「你要干什么、用什么干、干谁、拿什么干」。我见过不少新手,上来就复制粘贴命令,结果烧录失败,连错在哪都找不到。其实只要把命令结构拆开看,就清晰了。
4.1 烧录命令的四大要素
一条完整的烧录命令,通常包含四个核心部分。我习惯把它们记成「器、口、芯、件」——烧录器类型、接口、目标芯片、固件文件。
| 要素 | 说明 | 常见取值 |
|---|---|---|
| 烧录器类型 | 指定使用哪个烧录工具或驱动 | J-Link, ST-Link, esptool, OpenOCD |
| 接口 | 烧录器与目标芯片之间的物理连接方式 | SWD, JTAG, UART, SPI |
| 目标芯片 | 要烧录的芯片型号或内核 | STM32F407, ESP32, nRF52840 |
| 固件文件 | 要写入的二进制/十六进制文件 | .hex, .bin, .elf |
我的经验: 有一次我调试一块板子,烧录总是报错「找不到设备」。折腾了半天,才发现是接口参数写错了——SWD写成了JTAG。你想想看,接口不对,烧录器连芯片都认不出来,怎么可能成功?
4.2 常见烧录命令示例
下面我挑三个最常用的工具,带你过一遍实际命令。每个工具我都踩过坑,我会把关键点指出来。
4.2.1 J-Flash 命令行
J-Flash 是 Segger 家的工具,配合 J-Link 烧录器用。我个人习惯在自动化测试脚本里用它,稳定、速度快。
JFlash.exe -openprj myproject.jflash -open firmware.hex -auto -exit
拆开看:
-openprj:加载项目配置(芯片型号、接口速度等)-open:指定固件文件-auto:自动烧录(擦除+编程+校验)-exit:烧完自动退出
小技巧: 如果你只是临时烧个固件,可以用 -openprj 加载一个现成的 .jflash 项目文件,省得每次敲一堆参数。我一般会准备几个常用芯片的项目模板,放在脚本目录下。
4.2.2 STM32_Programmer_CLI
ST 官方的命令行工具,支持 ST-Link 和 UART。我最早用这个工具时,被它的参数顺序坑过——-c 必须放在最前面,否则报错。
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -w firmware.hex 0x08000000 -v -rst
参数说明:
-c:连接配置,port 指定接口,freq 指定 SWD 时钟频率-w:写入固件,后面跟文件路径和起始地址-v:烧录后校验-rst:烧完复位芯片
注意: 频率别设太高。我曾经图快,把 SWD 频率设到 8000 kHz,结果烧录到一半就断连了。后来老老实实降到 4000 kHz,稳得很。具体能跑多高,看你的线长和板子布线质量。
4.2.3 esptool.py write_flash
玩 ESP32/ESP8266 的朋友应该不陌生。esptool.py 是乐鑫官方的烧录工具,基于 Python,跨平台支持很好。
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 firmware.bin
关键点:
--chip:指定芯片型号--port:串口号(Windows 上是 COM3 这种)--baud:波特率,越高越快,但别超过芯片支持上限write_flash:后面跟「地址 文件」对,可以一次写多个分区
避坑指南: 我曾经用 esptool.py 烧 ESP32,波特率设到 921600,结果烧到一半卡住了。后来发现是 USB 转串口线质量不行,换成短一点的线就好了。嗯,硬件问题有时候比软件坑还多。
4.3 烧录命令结构对比
我把三个工具的命令结构整理成一张表,方便你对比记忆。
| 工具 | 烧录器类型 | 接口 | 目标芯片 | 固件文件 |
|---|---|---|---|---|
| J-Flash | J-Link | SWD/JTAG(项目文件配置) | 项目文件指定 | -open firmware.hex |
| STM32_Programmer_CLI | ST-Link | port=SWD 或 port=UART |
-c 中自动识别 |
-w firmware.hex 地址 |
| esptool.py | USB-UART 桥接 | --port /dev/ttyUSB0 |
--chip esp32 |
write_flash 地址 文件 |
4.4 核心烧录流程
不管用哪个工具,烧录的底层逻辑都差不多。我画了张图,把流程串起来。
你看,从解析参数到报告结果,一共八个步骤。其中「擦除 Flash」和「写入固件」是最耗时的两步。我一般会在脚本里加个超时判断,防止卡死。
我的习惯: 写自动化脚本时,我会在每条烧录命令后面加个 --log 或 --verbose 参数,把输出重定向到日志文件。这样出了问题,翻日志就能定位,不用盯着屏幕看。
好了,这一章的核心就是记住「器、口、芯、件」四个字。下次看到一条烧录命令,先拆成这四块,你就知道它在干什么了。命令结构清楚了,调优和排错才有基础。