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 写入固件 校验数据 复位运行 报告结果 虚线箭头表示:如果擦除失败,有些工具会跳过写入直接报错 实际流程中,校验失败也会触发重试或终止

你看,从解析参数到报告结果,一共八个步骤。其中「擦除 Flash」和「写入固件」是最耗时的两步。我一般会在脚本里加个超时判断,防止卡死。

我的习惯: 写自动化脚本时,我会在每条烧录命令后面加个 --log 或 --verbose 参数,把输出重定向到日志文件。这样出了问题,翻日志就能定位,不用盯着屏幕看。

好了,这一章的核心就是记住「器、口、芯、件」四个字。下次看到一条烧录命令,先拆成这四块,你就知道它在干什么了。命令结构清楚了,调优和排错才有基础。