2. 烧录基础概念
做量产烧录这么多年,我接触过各种各样的芯片。说实话,没有一种协议能通吃所有场景。每种协议都有自己的脾气,选对了事半功倍,选错了……嗯,产线停在那里等你改脚本,那滋味可不好受。
这一章,咱们就把烧录中最常用的四种协议——SPI、I2C、UART、SWD/JTAG——掰开揉碎讲清楚。重点不是背协议规范,而是搞清楚:量产烧录时,我该选哪个?为什么?
一、SPI:速度之王,烧录主力
SPI(Serial Peripheral Interface)是我个人在量产项目中最常用的协议。为什么?因为它简单、快、稳定。
SPI 是主从架构,至少需要 4 根线:
- SCLK — 时钟线,由主机控制
- MOSI — 主机输出,从机输入
- MISO — 主机输入,从机输出
- CS — 片选线,低电平有效
烧录时,上位机(或烧录器)作为主机,目标芯片的 Flash 控制器作为从机。主机发时钟,同时通过 MOSI 送地址和指令,从机通过 MISO 回传数据。全双工,一拍搞定。
量产优势:SPI 的时钟频率可以跑到几十 MHz,甚至上百 MHz。烧录 16MB 的 Flash,用 SPI 可能只要几秒钟。产线节拍就是这么抢出来的。
我记得有一次,客户要求把烧录时间从 15 秒压到 5 秒以内。我一看,他们用的是 I2C 烧录……二话不说,改成 SPI,时钟拉到 40MHz,最终 3.8 秒搞定。客户当场竖大拇指。
SPI 烧录的常见变种
- 标准 SPI — 1 位数据线,兼容性最好
- Dual SPI — MOSI 和 MISO 都变成双向数据线,速度翻倍
- Quad SPI — 再加两根线,4 位并行,常见于 NOR Flash
- QSPI — 带 DDR 模式的 Quad SPI,时钟上下沿都采样,速度再翻倍
我的建议:量产烧录优先选 Quad SPI 或 QSPI。虽然线多了点,但速度优势明显。产线上多几根探针的成本,远低于多等几秒的工时成本。
二、I2C:两线制,省引脚但慢
I2C(Inter-Integrated Circuit)只有两根线:SCL(时钟)和 SDA(数据)。它靠地址寻址,支持多主机多从机。听起来很美好,对吧?
但烧录场景下,I2C 有个硬伤——慢。
标准模式 100kHz,快速模式 400kHz,高速模式也就 3.4MHz。跟 SPI 动辄几十 MHz 比,差了一个数量级。而且 I2C 是半双工,每次传输还要加上设备地址、寄存器地址、ACK/NACK 这些开销。实际有效数据吞吐量,可能只有理论值的 60%~70%。
注意:I2C 的 open-drain 架构决定了它的上拉电阻和总线电容会限制速度。产线上线缆一长,波形就容易变形。我曾经在一条 30cm 的排线上跑 I2C 烧录,400kHz 死活调不通,最后降到 100kHz 才稳定。嗯,那天的产线节拍……不提了。
什么时候不得不用 I2C?
- 芯片引脚极少(比如 6 脚、8 脚的 MCU 或传感器)
- 目标芯片只支持 I2C 烧录接口
- 板子上 I2C 总线已经存在,不想额外加线
说白了,I2C 烧录是「省引脚」的妥协方案。如果芯片有 SPI 接口,我绝对不会选 I2C。
三、UART:最通用的备胎
UART(Universal Asynchronous Receiver/Transmitter)是异步串口,只需要 TX 和 RX 两根线,没有时钟线。双方约定好波特率就能通信。
烧录场景下,UART 通常用于:
- Bootloader 烧录 — 芯片出厂时预置了 UART Bootloader,通过串口接收固件
- 调试烧录 — 开发阶段临时烧录,不需要专用工具
- 产线备选方案 — 当 SPI/JTAG 接口被占用或损坏时,UART 作为兜底
UART 烧录的速度受限于波特率。常见的是 115200bps 到 921600bps。就算跑到 1Mbps,换算成字节也就 125KB/s。烧个 1MB 的固件,要 8 秒以上。跟 SPI 比,差距明显。
避坑指南:UART 烧录最怕波特率不准。晶振偏差、分频误差、线缆干扰,都可能导致乱码。我建议量产时用 115200 或 256000,别盲目追求高速。稳定比快更重要——产线上一片烧坏,返工成本够你跑几百次慢速烧录了。
四、SWD/JTAG:调试与烧录一体
SWD(Serial Wire Debug)和 JTAG(Joint Test Action Group)是调试接口,但烧录功能只是它们的「副业」。
JTAG
JTAG 是 IEEE 1149.1 标准,至少需要 5 根线:TCK、TMS、TDI、TDO、TRST(可选)。它通过 TAP(Test Access Port)状态机来控制芯片内部逻辑。烧录时,通过 JTAG 把数据写入 Flash 控制器,再触发擦除/编程操作。
JTAG 的优势是标准化——几乎所有 ARM、RISC-V、FPGA 芯片都支持。缺点是线多,而且 TAP 状态机操作有固定时序开销,实际烧录速度不一定比 SPI 快。
SWD
SWD 是 ARM 公司搞的简化版调试接口,只需要 2 根线:SWDIO(数据)和 SWCLK(时钟)。它用一条双向数据线代替了 JTAG 的 TDI 和 TDO,状态机也简化了。
SWD 在量产烧录中越来越流行,原因很简单:线少、速度快、兼容性好。大部分 ARM Cortex-M 系列芯片都支持 SWD,而且烧录速度可以跑到 10MHz 以上。
| 协议 | 最少线数 | 典型速度 | 全双工 | 量产推荐度 |
|---|---|---|---|---|
| SPI (QSPI) | 4~6 | 10~80 MHz | 是 | ★★★★★ |
| I2C | 2 | 100~400 kHz | 否 | ★★☆☆☆ |
| UART | 2 | 115.2k~921.6k bps | 是 | ★★★☆☆ |
| SWD | 2 | 1~10 MHz | 否 | ★★★★☆ |
| JTAG | 4~5 | 1~20 MHz | 是 | ★★★★☆ |
五、协议选型决策框架
你可能会问:这么多协议,量产时到底怎么选?我个人的经验是,按优先级往下排:
- 看芯片支持什么 — 先查 datasheet,看烧录接口有哪些。有些芯片只支持 UART Bootloader,那就没得选。
- 看烧录数据量 — 固件超过 1MB,优先考虑 SPI 或 SWD。I2C 和 UART 太慢,产线等不起。
- 看板子设计 — 如果板子上已经有 SPI Flash 总线,直接复用,省一根线都是钱。
- 看烧录器成本 — SWD/JTAG 需要专用调试器(如 J-Link、ST-Link),单价高。SPI 可以用普通 IO 模拟,成本低。
- 看产线环境 — 线缆长、干扰大的环境,优先选差分信号或低速协议。SPI 在 1 米以上的线缆上容易出问题,SWD 相对抗干扰一些。
我的习惯:量产项目,只要芯片支持,我首选 Quad SPI 烧录。如果芯片是 ARM Cortex-M 系列,SWD 也是好选择——既能烧录又能调试,产线发现问题可以直接连上去看寄存器,省得拆板子。
六、协议对比框架图
下面这张图总结了四种协议在烧录场景下的核心差异,方便你快速决策:
七、实际烧录中的协议选择案例
最后分享一个我实际做过的项目,帮你把上面的知识串起来。
那是一个智能家居网关,主控是 STM32F407(ARM Cortex-M4),外挂 16MB SPI NOR Flash 存固件和配置。客户要求产线烧录时间不超过 10 秒。
我当时的方案是这样的:
- 主固件烧录 — 通过 SWD 接口,用 J-Link 配合脚本烧录。SWD 速度设到 10MHz,2MB 固件大约 4 秒烧完。
- SPI Flash 预烧 — 在贴片前,用烧录座通过 Quad SPI 把文件系统镜像烧进 Flash。16MB 数据,40MHz 时钟,大约 3 秒。
- 产线校验 — 贴片后,通过 SWD 读取芯片内部 Flash 的 CRC,再通过 SPI 读取外部 Flash 的 CRC,全部校验通过才放行。
整个流程下来,单板烧录+校验大约 8 秒,满足客户要求。如果当时用 I2C 或者 UART……嗯,估计客户要骂人了。
最后提醒一句:协议选型没有银弹。SPI 快,但线多;I2C 省线,但慢;UART 通用,但速度上限低;SWD/JTAG 功能强,但需要专用工具。量产烧录的核心不是「哪个协议最好」,而是「哪个协议最适合你的产线节拍和成本预算」。