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 如何选择?我的实战建议
选协议不是拍脑袋,得看项目实际情况。我一般按这个思路来:
- 看芯片类型:ARM Cortex-M 系列,无脑选 SWD。RISC-V 或 FPGA,选 JTAG。
- 看烧录量:日产量 1000 片以上,别用 UART,速度太慢。SWD 或 SPI 是正解。
- 看引脚资源:引脚紧张的项目,SWD 是首选。引脚富裕,可以考虑 JTAG 或 SPI。
- 看是否需要调试:研发阶段需要调试,选 SWD 或 JTAG。纯量产烧录,SPI 更高效。
一句话总结:量产烧录,我 80% 的项目用 SWD,15% 用 SPI,剩下 5% 用 JTAG 或 UART。SWD 是平衡性最好的选择。
2.7 知识体系:烧录协议选型决策图
下面这张图是我自己总结的选型逻辑,帮你快速定位该用哪种协议。
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 或更低,稳一点。