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 知识体系总览

下面这张图把三种接口的核心差异和选型逻辑串起来了,建议保存下来做参考。

烧录接口对比与选型逻辑 烧录接口对比与选型逻辑 JTAG 5线 · 全功能 · 链式连接 SWD 2线 · 全功能 · 引脚少 UART 2线 · 仅烧录 · 低成本 选型决策:引脚数 → 速度要求 → 调试需求 → 产线环境 场景A:多器件链式烧录 选 JTAG FPGA/多核SoC/板级测试 场景B:量产MCU烧录 选 SWD ARM Cortex-M/小封装 场景C:OTA/小批量 选 UART 低成本/远程升级 核心权衡 速度 vs 可靠性:SWD 综合最优,JTAG 适合复杂场景,UART 仅限低成本

2.5 实战选型建议

说了这么多,到底怎么选?我直接给结论:

  1. 新项目首选 SWD:引脚少、速度快、调试功能全。ARM Cortex-M 系列基本都支持,J-Link、DAP-Link 这些调试器也都能用。
  2. 多芯片链式烧录用 JTAG:比如一个板子上有 FPGA + MCU + DSP,JTAG 可以串起来一次搞定。
  3. UART 只做备选:如果芯片只支持 UART 烧录(比如某些低端 MCU),那就用。但量产时一定要做烧录校验,最好每片烧两遍比对。
  4. 产线环境决定速度:线缆长、干扰大的环境,降速保可靠。别为了省那 0.5 秒,搞出一堆烧录失败的板子。

避坑指南:我曾经在一个项目里,产线用 20 cm 的 SWD 线缆跑 20 MHz,烧录 1000 片挂了 3 片。后来降到 10 MHz,连续烧了 10 万片零故障。速度不是越高越好,稳定才是王道。