3. 烧录协议详解:SWD/JTAG、UART、SPI/I2C 从机协议

烧录协议,说白了就是芯片和烧录器之间的“沟通语言”。选对了,事半功倍;选错了,量产线上哭都来不及。我这些年折腾过的协议不下十种,今天就把最常用的四种——SWD、JTAG、UART、SPI/I2C 从机——掰开揉碎讲清楚。

核心观点:没有万能的协议,只有最适合你产线的方案。速度、可靠性、引脚数、工具链支持,必须综合权衡。

烧录协议对比总览图 烧录协议对比总览 SWD JTAG UART SPI/I2C从机 SWD 属性 2线 (SWDIO+SWCLK) 速度 4-50 MHz ARM Cortex 标配 JTAG 属性 5线 (TDI/TDO/TCK/TMS/nTRST) 速度 10-100 MHz 边界扫描能力强 UART 属性 2线 (TX/RX) 速度 115200-3M bps 需要 Bootloader SPI/I2C 属性 3线/2线 速度 1-50 MHz 需要从机模式 选型口诀 ARM 芯片用 SWD,复杂调试上 JTAG; 引脚不够 UART 顶,从机烧录 SPI 稳。

3.1 SWD 协议:ARM 生态的标配

SWD(Serial Wire Debug)是 ARM 公司推出的两线调试协议。我个人习惯,只要芯片支持 SWD,量产烧录首选就是它。为什么?

  • 引脚少:只需要 SWDIO(数据线)和 SWCLK(时钟线),加上 GND 就三根线。产线夹具好做,探针磨损也少。
  • 速度快:典型时钟 4 MHz,实际能跑到 10-50 MHz。烧录 1MB 固件,几秒钟搞定。
  • 原生支持:所有 Cortex-M0/M3/M4/M7/A 系列都内置 SWD 接口,不需要额外 Bootloader。

我的经验:SWD 的坑主要在连接线长。产线上夹具到烧录器线长超过 30cm,SWCLK 就容易失真。我建议 SWCLK 频率不要超过 10 MHz,线长控制在 20cm 以内。如果必须长线,加个 33Ω 串联电阻在时钟线上,能有效抑制过冲。

3.2 JTAG 协议:老牌劲旅,边界扫描利器

JTAG(Joint Test Action Group)是 IEEE 1149.1 标准,比 SWD 早了十几年。它需要 5 根线:TDI、TDO、TCK、TMS,外加可选的 nTRST。

JTAG 最大的优势是边界扫描。我在做 FPGA 和复杂 SoC 量产时,JTAG 是唯一选择。它能测试 PCB 焊接质量,甚至能读取芯片 ID 确认物料正确。

特性 SWD JTAG
引脚数 2 线 5 线
最大速度 50 MHz 100 MHz
边界扫描 不支持 原生支持
ARM 兼容性 全系列 部分旧型号
产线可靠性 高(线少干扰少) 中(线多易接触不良)

避坑指南:我曾经在一个项目里用 JTAG 烧录 50 块板子,有 3 块烧到一半失败。排查发现是 TDO 线在夹具里接触不良。JTAG 是双向协议,任何一根线断了都会导致通信失败。产线上建议用 SWD 替代 JTAG,除非你确实需要边界扫描功能。

3.3 UART 串口烧录协议:低成本方案的救星

UART 烧录,说白了就是通过芯片的串口把固件传进去。芯片上电后先运行 Bootloader,Bootloader 通过 UART 接收数据并写入 Flash。

为什么还要用 UART?

  • 引脚最少:只需要 TX、RX 两根线,很多单片机甚至复用 GPIO。
  • 工具链成熟:随便一个 USB 转串口模块就能当烧录器,成本极低。
  • 适合远程升级:产品出厂后,通过 RS485 或无线模块也能远程烧录。

但 UART 的缺点也很明显:速度慢。标准 115200 bps 烧录 1MB 固件需要 90 秒,量产线根本等不起。我建议至少用 1M bps 甚至 3M bps,前提是芯片的 Bootloader 支持高波特率。

关键参数:UART 烧录速度 = 波特率 / 10(1 位起始 + 8 位数据 + 1 位停止)。实际有效数据吞吐量只有波特率的 80% 左右。3M bps 下,理论速度约 300 KB/s,烧录 1MB 需要 3.5 秒——勉强能接受。

3.4 SPI/I2C 从机烧录协议:特殊场景的利器

有些芯片没有 SWD/JTAG 接口,也没有 UART Bootloader,怎么办?这时候就要用 SPI 或 I2C 从机模式烧录。

原理很简单:芯片内部固件里实现一个 SPI 或 I2C 从机,烧录器作为主机,通过标准协议把固件写入 Flash。

协议 引脚数 速度范围 典型应用
SPI 从机 3 线 (SCK/MOSI/MISO) 1-50 MHz 蓝牙 SoC、传感器 MCU
I2C 从机 2 线 (SCL/SDA) 100 kHz-1 MHz 小容量 EEPROM、低功耗芯片

我个人更推荐 SPI 从机烧录。为什么?SPI 是全双工,速度可以跑到几十 MHz,烧录大固件也不慢。I2C 只有 1 MHz 上限,而且协议复杂,容易出问题。

我的经验:SPI 从机烧录有个坑——片选信号(CS)必须稳定。产线上夹具抖动导致 CS 毛刺,会让从机误判通信开始。我一般会在 CS 线上加 10kΩ 上拉电阻,并在固件里做 CS 去抖处理。

3.5 速度与可靠性对比:选型决策表

下面这张表是我多年量产经验的总结。你直接拿去用,基本不会踩坑。

协议 典型速度 1MB 烧录时间 可靠性评分 推荐场景
SWD 10 MHz ~1.5 秒 ★★★★★ ARM 芯片量产首选
JTAG 20 MHz ~0.8 秒 ★★★★☆ FPGA/复杂 SoC/边界扫描
UART 1M bps ~10 秒 ★★★☆☆ 低成本/远程升级
SPI 从机 10 MHz ~1.2 秒 ★★★★☆ 无调试接口的 MCU
I2C 从机 400 kHz ~25 秒 ★★☆☆☆ 小容量芯片/引脚极度受限

重要提醒:速度不是唯一指标。UART 虽然慢,但抗干扰能力强,适合长距离烧录。SWD 虽然快,但线长超过 30cm 就容易出错。选型时一定要考虑产线实际环境。

3.6 协议选型决策流程

我一般按这个流程来选:

  1. 芯片支持什么?先看 datasheet,有 SWD 就用 SWD,没有再看别的。
  2. 产线速度要求?单板烧录时间超过 10 秒,产线效率就崩了。必须选高速协议。
  3. 引脚数限制?夹具探针数量有限,能少用就少用。SWD 和 UART 是首选。
  4. 是否需要边界扫描?只有 JTAG 能做。别犹豫,直接上 JTAG。
  5. 成本敏感?UART 最便宜,一个 USB 转串口模块几块钱。