2. 烧录协议基础:SWD、JTAG、UART、SPI 的原理与对比

做量产烧录这些年,我接触过不下十几种协议。但真正在产线上天天打交道的,其实就四个:SWD、JTAG、UART、SPI。说白了,它们就是芯片和烧录器之间的“对话规则”。规则选对了,烧录效率翻倍;选错了,一天能多出几百片不良品。

这一章,咱们就把这四种协议掰开揉碎讲清楚。我会结合自己踩过的坑,告诉你什么时候该用哪个。

2.1 SWD(串行线调试)—— 我的主力协议

SWD 是 ARM 公司搞出来的调试接口。它只用了两根线:SWDIO(数据线)和 SWCLK(时钟线)。

为什么我偏爱 SWD?

  • 引脚少:两根线搞定,省 PCB 空间。我做过一个 TSSOP-20 封装的 MCU 项目,引脚紧张到不行,SWD 简直是救命稻草。
  • 速度快:最高能跑到几十 MHz。量产烧录时,时间就是成本。
  • 支持热插拔:产线上经常有操作员带电插拔,SWD 的抗干扰能力比 JTAG 强不少。

核心要点:SWD 是 ARM Cortex-M 系列芯片的标配。如果你的芯片是 Cortex-M0/M3/M4/M7,优先选 SWD。

不过 SWD 也有短板。它只能接一个目标设备,不像 JTAG 可以菊花链。但量产烧录通常是一对一,所以问题不大。

2.2 JTAG(联合测试行动组)—— 老牌劲旅

JTAG 是 1985 年制定的标准,比我的工龄还长。它用了 5 根线:TCK、TMS、TDI、TDO、TRST(可选)。

JTAG 的优势在哪?

  • 通用性强:ARM、RISC-V、FPGA、DSP……几乎所有芯片都支持。
  • 支持菊花链:一条 JTAG 链可以串多个芯片。我见过一条链挂 8 个 FPGA 的产线,烧录效率极高。
  • 边界扫描:可以测试 PCB 焊接质量。这个功能在板级测试里很实用。

注意:JTAG 的引脚多,布线时容易串扰。我曾经在一个 4 层板上吃过亏,JTAG 时钟线没包地,结果烧录时频繁超时。后来加了地线隔离才解决。

JTAG 的缺点也很明显:占引脚多、速度上限不如 SWD(通常 10-20 MHz)、不支持热插拔。产线上用 JTAG,操作员得小心点。

2.3 UART(通用异步收发器)—— 低成本方案

UART 烧录,说白了就是串口下载。它只需要 TX、RX 两根线,外加 GND。

UART 烧录的典型场景:

  • Bootloader 模式:很多芯片出厂时内置了串口 Bootloader,比如 STM32 的 System Memory 模式。
  • 无线模块:ESP8266、ESP32 这些 WiFi 模块,默认就是用 UART 烧录。
  • 成本敏感项目:不需要调试器,一根 USB 转串口线就能干活。

但 UART 有个硬伤——速度慢。115200 bps 是常见速率,烧个 1MB 的固件要 90 秒。你想想看,产线上一天烧几千片,这时间耗不起。

我的经验:UART 烧录适合小批量或研发阶段。量产时,我建议用 SWD 或 SPI,速度能快 10 倍以上。

2.4 SPI(串行外设接口)—— 高速烧录利器

SPI 是同步串行接口,用了 4 根线:SCLK、MOSI、MISO、CS。它本来是为外设通信设计的,但很多芯片支持 SPI 烧录模式。

SPI 烧录的特点:

  • 速度快:轻松跑到 50 MHz 以上。我做过一个项目,用 SPI 烧录 8MB 的 NOR Flash,只要 3 秒。
  • 全双工:可以同时收发数据,效率高。
  • 适合 Flash 编程:很多 Flash 芯片的烧录协议就是 SPI 变种(比如 Quad SPI)。

但 SPI 也有局限:它需要芯片支持 SPI 烧录模式,而且引脚数比 SWD 多。另外,SPI 没有标准化的调试功能,只能烧录,不能调试。

2.5 四种协议对比表

特性 SWD JTAG UART SPI
引脚数 2(SWDIO, SWCLK) 4-5(TCK, TMS, TDI, TDO, TRST) 2(TX, RX) 4(SCLK, MOSI, MISO, CS)
速度上限 几十 MHz 10-20 MHz 通常 115200 bps 50+ MHz
调试功能 支持 支持 不支持 不支持
菊花链 不支持 支持 不支持 不支持
热插拔 较好 较差 一般 一般
典型应用 ARM MCU 量产 FPGA/多芯片链 Bootloader/小批量 Flash 高速烧录

2.6 如何选择?我的实战建议

选协议不是拍脑袋,得看项目实际情况。我一般按这个思路来:

  1. 看芯片类型:ARM Cortex-M 系列,无脑选 SWD。RISC-V 或 FPGA,选 JTAG。
  2. 看烧录量:日产量 1000 片以上,别用 UART,速度太慢。SWD 或 SPI 是正解。
  3. 看引脚资源:引脚紧张的项目,SWD 是首选。引脚富裕,可以考虑 JTAG 或 SPI。
  4. 看是否需要调试:研发阶段需要调试,选 SWD 或 JTAG。纯量产烧录,SPI 更高效。

一句话总结:量产烧录,我 80% 的项目用 SWD,15% 用 SPI,剩下 5% 用 JTAG 或 UART。SWD 是平衡性最好的选择。

2.7 知识体系:烧录协议选型决策图

下面这张图是我自己总结的选型逻辑,帮你快速定位该用哪种协议。

烧录协议选型决策图 烧录协议选型决策图 开始选型 芯片类型? ARM Cortex-M SWD FPGA/RISC-V/其他 JTAG 纯Flash烧录 SPI 量产规模? 小批量/研发 UART 大批量量产 SWD/SPI 💡 选型建议 • 引脚紧张 → SWD • 多芯片链 → JTAG • 高速Flash → SPI

2.8 避坑指南

最后分享几个我踩过的坑,希望能帮你少走弯路。

坑1:SWD 线长超过 20cm

我曾经为了产线布局方便,把 SWD 线拉到了 30cm。结果烧录成功率直接掉到 70%。后来加了屏蔽线,缩短到 15cm,才恢复正常。SWD 对线长敏感,量产时尽量控制在 10cm 以内。

坑2:JTAG 信号没加终端电阻

有一次做 FPGA 批量烧录,JTAG 链上挂了 4 片。信号反射严重,经常烧到一半就断了。后来在 TCK 和 TMS 上加了 22Ω 串联电阻,问题解决。

坑3:UART 烧录时波特率不匹配

这个坑很常见。芯片内部 RC 振荡器精度只有 ±5%,如果烧录器用 115200,芯片实际跑 110592,就会丢数据。我习惯用 57600 或更低,稳一点。