2. 烧录协议与接口:SWD、JTAG、UART 烧录原理对比
烧录接口选不对,后面全是坑。我见过太多项目,芯片选型时没仔细看烧录接口,结果量产时发现速度跟不上,或者产线治具得重新做。今天咱们就把 SWD、JTAG、UART 这三个最常见的烧录接口掰开揉碎讲清楚。
核心观点:没有最好的接口,只有最合适的场景。量产选型时,速度、引脚数、可靠性三者必须一起权衡。
2.1 三种接口的工作原理
先说说它们各自是怎么干活的。
2.1.1 JTAG(Joint Test Action Group)
JTAG 是老祖宗级别的接口了。它基于 IEEE 1149.1 标准,最早是用来做板级测试的,后来被拿来烧录芯片。
JTAG 用了 5 根线:
- TCK:时钟线,所有操作跟着它走
- TMS:模式选择,控制状态机跳转
- TDI:数据输入
- TDO:数据输出
- TRST(可选):复位
它的核心是一个有限状态机。你通过 TMS 在时钟沿上切换状态,然后通过 TDI/TDO 往芯片内部的指令寄存器或数据寄存器里塞数据。说白了,就是一条串行移位链路,把芯片内部的边界扫描链打通。
我个人习惯:调试复杂 FPGA 或者多核 ARM 芯片时,JTAG 还是首选。因为它能链式连接多个器件,一根线上串好几个芯片,产线上一把全烧了。
2.1.2 SWD(Serial Wire Debug)
SWD 是 ARM 公司搞出来的精简版调试接口。它只用了 2 根线:
- SWDIO:双向数据线
- SWCLK:时钟线
SWD 本质上是在 JTAG 基础上做了个协议封装。它把 JTAG 的 TMS 和 TDI 合并成了 SWDIO,通过包格式来区分是读还是写,是访问 DP(Debug Port)还是 AP(Access Port)。
你想想看,省了 3 根线,对于小封装芯片来说太香了。很多 QFN 封装的 MCU,引脚本来就紧张,SWD 简直就是救星。
小技巧:SWD 其实可以复用为 GPIO。烧录完成后,把 SWDIO 和 SWCLK 配置成普通 IO 口,能省下两个宝贵的引脚。不过要注意,如果后续还要调试,得留个唤醒机制。
2.1.3 UART 烧录
UART 烧录,说白了就是通过串口把固件数据发进去。芯片内部通常有一段 BootROM,上电后检测特定引脚电平,然后进入烧录模式,通过 RX/TX 接收数据。
UART 烧录需要:
- TX:发送
- RX:接收
- GND:共地
有些芯片还需要一个 BOOT 引脚来触发烧录模式。
UART 烧录没有标准的协议层,各家芯片厂商自己定义。比如 STM32 的 System Bootloader 用的是 YMODEM 协议,ESP32 用的是自定义的串口下载协议。
注意:UART 烧录没有时钟同步机制,全靠波特率对齐。如果晶振偏差大,或者产线线缆太长导致信号畸变,很容易烧到一半就挂了。我曾经遇到过一批芯片,内部 RC 振荡器偏差到了 5%,UART 烧录死活过不去,最后只能换 SWD。
2.2 三种接口的适用场景对比
直接上表格,一目了然。
| 对比维度 | JTAG | SWD | UART |
|---|---|---|---|
| 引脚数 | 4-5 根 | 2 根 | 2-3 根 |
| 最大速度 | 50-100 MHz(取决于 TCK) | 50-100 MHz(取决于 SWCLK) | 通常 115200-921600 bps |
| 协议复杂度 | 高(状态机) | 中(包协议) | 低(字节流) |
| 调试能力 | 全功能(断点、单步、内存读写) | 全功能(与 JTAG 等价) | 无(仅烧录) |
| 多器件支持 | 支持链式连接 | 不支持(点对点) | 不支持(点对点) |
| 抗干扰能力 | 强(差分/屏蔽线) | 中(单线双向) | 弱(依赖波特率) |
| 典型场景 | FPGA、多核 SoC、板级测试 | ARM Cortex-M 系列 MCU | 低成本 MCU、OTA 升级 |
2.3 速度与可靠性的权衡
量产烧录,速度就是钱。一条产线一天烧几千片,每片快 1 秒,一天就能多烧几百片。但速度上去了,可靠性可能就下来了。
2.3.1 速度瓶颈在哪?
JTAG 和 SWD 的速度瓶颈主要在时钟频率和线缆长度。理论上 SWCLK 能跑到 100 MHz,但实际产线上,线缆一长,信号反射、串扰全来了。我建议:
- 产线线缆控制在 15 cm 以内,可以跑 10-20 MHz
- 超过 30 cm,老老实实降到 5 MHz 以下
- 使用屏蔽双绞线,地线要粗
UART 的速度瓶颈更明显。波特率上去后,位时间变短,对晶振精度和信号质量要求更高。量产时我一般只用到 460800 bps,再高就容易出问题。
2.3.2 可靠性怎么保证?
可靠性说白了就是:烧进去的数据对不对,烧完能不能跑。
JTAG/SWD 的可靠性优势:
- 有时钟同步,信号畸变容忍度高
- 支持读写校验,烧完可以回读比对
- 协议层有 CRC 或奇偶校验
UART 的可靠性短板:
- 没有时钟同步,波特率偏差直接导致数据错位
- 协议层校验弱(很多芯片只做简单的累加和)
- 线缆长时容易丢包
我的经验:量产烧录,SWD 是首选。引脚少、速度快、可靠性高。JTAG 留给需要链式烧录的场景。UART 只适合小批量或者 OTA 升级,量产线上我尽量不用。
2.4 知识体系总览
下面这张图把三种接口的核心差异和选型逻辑串起来了,建议保存下来做参考。
2.5 实战选型建议
说了这么多,到底怎么选?我直接给结论:
- 新项目首选 SWD:引脚少、速度快、调试功能全。ARM Cortex-M 系列基本都支持,J-Link、DAP-Link 这些调试器也都能用。
- 多芯片链式烧录用 JTAG:比如一个板子上有 FPGA + MCU + DSP,JTAG 可以串起来一次搞定。
- UART 只做备选:如果芯片只支持 UART 烧录(比如某些低端 MCU),那就用。但量产时一定要做烧录校验,最好每片烧两遍比对。
- 产线环境决定速度:线缆长、干扰大的环境,降速保可靠。别为了省那 0.5 秒,搞出一堆烧录失败的板子。
避坑指南:我曾经在一个项目里,产线用 20 cm 的 SWD 线缆跑 20 MHz,烧录 1000 片挂了 3 片。后来降到 10 MHz,连续烧了 10 万片零故障。速度不是越高越好,稳定才是王道。