1、烧录基础概念

各位好,我是老周。做嵌入式这些年,我见过太多新手在烧录这第一步就栽跟头。今天咱们就把烧录这事儿彻底聊透。

什么是烧录

烧录,说白了就是把编译好的程序文件写到芯片的存储器里。你写好的代码,经过编译链接,变成一堆二进制数据,然后通过某种方式塞进芯片的 Flash 或 ROM 中。芯片上电后,从这些存储器里读取指令执行。

我刚开始做项目时,总觉得烧录就是点一下 IDE 里的下载按钮。直到有一次,客户现场设备死活跑不起来,排查了半天才发现是烧录时校验没通过,程序根本没写进去。嗯,从那以后我再也不敢轻视这一步了。

核心要点:烧录的本质是「数据写入 + 校验确认」。不仅仅是把文件传过去,还要确保写入的内容和源文件完全一致。

烧录与编程的区别

这两个概念经常被混用,但其实是两码事。我画个表格帮你理清楚:

对比项 烧录 编程
操作对象 芯片/存储器 源代码文件
工具 烧录器、调试器 IDE、编辑器
输出 二进制固件 可执行文件
目的 让芯片运行程序 生成程序逻辑
常见错误 连接失败、校验错误 语法错误、逻辑错误

你想想看,编程是写菜谱,烧录是把菜谱放进厨房的电子屏里。菜谱写得再好,放不进去或者放错了,厨师照样没法做菜。

个人经验:我习惯把「编程」和「烧录」分开说。跟团队沟通时,说「代码写好了,准备烧录」比说「代码写好了,准备编程」要清晰得多,不容易产生歧义。

常见烧录协议概述

市面上主流的烧录协议就那么几种。我按使用频率和场景给你捋一遍。

SWD(Serial Wire Debug)

这是 ARM 芯片的标配。只用两根线:SWDIO(数据线)和 SWCLK(时钟线)。比起 JTAG 的 5 根线,它省了 3 根。我现在做 STM32 项目,基本都用 SWD。

为什么它这么流行?说白了就是「够用」。调试、烧录、断点、单步,全都能搞定。而且引脚少,对 PCB 布局友好。

避坑指南:我曾经遇到过 SWD 引脚被复用成 GPIO 的情况。烧录一次后,程序把 SWDIO 脚配置成普通输出,结果第二次就烧不进去了。解决办法是在程序启动时加一段延时,让烧录器有足够时间接管控制权。

JTAG(Joint Test Action Group)

老牌协议,5 根线:TMS、TCK、TDI、TDO、TRST(可选)。支持链式连接,可以同时调试多个芯片。FPGA、高端 MCU、SoC 上很常见。

我个人的看法是:如果你做的是多芯片系统,或者需要边界扫描测试,JTAG 是首选。但单芯片调试,SWD 更香。

特性 SWD JTAG
引脚数 2(最少) 4-5
速度 最高 50MHz+ 最高 50MHz+
多芯片支持 有限 链式支持
边界扫描 不支持 支持
适用场景 ARM MCU FPGA、SoC、多芯片

UART(Universal Asynchronous Receiver/Transmitter)

串口烧录,很多芯片出厂时内置的 Bootloader 就支持。只需要 TX、RX 两根线,外加 GND。成本低,工具简单,一根 USB 转串口线就能干活。

我记得有一次出差,手头只有笔记本电脑和一根 USB 转串口线,客户给的板子没有调试接口。还好芯片支持 UART 烧录,我直接用串口把固件灌进去了。关键时刻,串口真的能救命。

使用建议:UART 烧录速度慢,适合小固件(几百 KB 以内)。大项目建议用 SWD 或 JTAG。另外,串口参数(波特率、数据位、停止位)必须和芯片 Bootloader 匹配,否则烧录失败。

SPI(Serial Peripheral Interface)

SPI 烧录常见于外部 Flash 芯片。比如你用的 MCU 没有内部 Flash,或者 Flash 容量不够,外挂一个 SPI Flash,就需要通过 SPI 协议把程序写进去。

SPI 是同步全双工,4 根线:SCK、MOSI、MISO、CS。速度比 UART 快得多,但接线也多了两根。

我做过一个项目,MCU 内部 Flash 只有 256KB,但固件有 1MB。没办法,只能外挂 SPI Flash。烧录时先用 SWD 把 Bootloader 烧进 MCU,然后 Bootloader 通过 SPI 把主程序写到外部 Flash 里。这种两级烧录的方式,在资源受限的芯片上很常见。

协议对比总览

下面这张图帮你快速建立整体认知:

常见烧录协议对比 SWD 2线 · 高速 · ARM标配 JTAG 5线 · 链式 · 边界扫描 UART 2线 · 低速 · Bootloader SPI 4线 · 高速 · 外挂Flash 选择依据 • 芯片类型:ARM 选 SWD,FPGA/多芯片选 JTAG • 固件大小:小固件用 UART,大固件用 SWD/SPI • 开发阶段:调试频繁用 SWD/JTAG,量产用 UART/SPI 没有最好的协议,只有最合适的协议 根据项目需求、芯片型号、开发阶段灵活选择

如何选择烧录协议

我个人的选择逻辑是这样的:

  1. 先看芯片:ARM Cortex-M 系列,无脑 SWD。FPGA 或高端 SoC,JTAG。
  2. 再看场景:开发调试阶段,SWD/JTAG 最方便。量产阶段,UART 或 SPI 更经济。
  3. 最后看工具:手头有什么烧录器?J-Link、ST-Link、CMSIS-DAP 都支持 SWD。USB 转串口线支持 UART。专用编程器支持 SPI。

一句话总结:SWD 是日常主力,JTAG 是专业选手,UART 是救急神器,SPI 是外挂必备。把这四种协议吃透,你就能应对 90% 以上的烧录场景。