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 是 ★★★★☆

五、协议选型决策框架

你可能会问:这么多协议,量产时到底怎么选?我个人的经验是,按优先级往下排:

  1. 看芯片支持什么 — 先查 datasheet,看烧录接口有哪些。有些芯片只支持 UART Bootloader,那就没得选。
  2. 看烧录数据量 — 固件超过 1MB,优先考虑 SPI 或 SWD。I2C 和 UART 太慢,产线等不起。
  3. 看板子设计 — 如果板子上已经有 SPI Flash 总线,直接复用,省一根线都是钱。
  4. 看烧录器成本 — SWD/JTAG 需要专用调试器(如 J-Link、ST-Link),单价高。SPI 可以用普通 IO 模拟,成本低。
  5. 看产线环境 — 线缆长、干扰大的环境,优先选差分信号或低速协议。SPI 在 1 米以上的线缆上容易出问题,SWD 相对抗干扰一些。

我的习惯:量产项目,只要芯片支持,我首选 Quad SPI 烧录。如果芯片是 ARM Cortex-M 系列,SWD 也是好选择——既能烧录又能调试,产线发现问题可以直接连上去看寄存器,省得拆板子。

六、协议对比框架图

下面这张图总结了四种协议在烧录场景下的核心差异,方便你快速决策:

烧录协议对比框架图 烧录协议选型框架 目标芯片烧录接口 SPI / QSPI I2C UART SWD / JTAG SPI 特性 • 全双工,速度快 • 4~6 根线 • 适合大容量 Flash • 产线首选 I2C 特性 • 半双工,速度慢 • 2 根线,省引脚 • 适合小数据量 • 线缆敏感 UART 特性 • 异步,无时钟线 • 2 根线 • Bootloader 常用 • 波特率受限 SWD/JTAG 特性 • 调试+烧录一体 • SWD: 2 根线 • JTAG: 4~5 根线 • ARM 芯片标配 决策建议:大容量 → SPI/QSPI | 小容量省引脚 → I2C | Bootloader → UART | 调试+烧录 → SWD 量产选型要点 1. 优先看芯片 datasheet 支持的烧录接口 2. 产线节拍要求决定速度下限,再反推协议

七、实际烧录中的协议选择案例

最后分享一个我实际做过的项目,帮你把上面的知识串起来。

那是一个智能家居网关,主控是 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 功能强,但需要专用工具。量产烧录的核心不是「哪个协议最好」,而是「哪个协议最适合你的产线节拍和成本预算」。