SWD(Serial Wire Debug,串行线调试)
核心定义
SWD(Serial Wire Debug,串行线调试) 是一种用于嵌入式系统调试的两线式 通信协议。它是由 ARM 公司设计并推广的,作为传统 JTAG 协议的现代化、高效率替代方案,广泛应用于基于 ARM Cortex 处理器的微控制器(MCU)中。

1. SWD 出现的原因:为什么要取代 JTAG?
在 SWD 之前,JTAG 是芯片调试和编程的主流标准。但 JTAG 有一些缺点:
- 引脚多:至少需要 4 个引脚(TMS, TCK, TDI, TDO),有时还需要额外的 nTRST 引脚。
- 占用PCB空间:对于引脚数量少、体积小的现代电子产品(如物联网设备、可穿戴设备),每个引脚都非常宝贵。
- 协议相对复杂:状态机转换较多。
SWD 就是为了解决这些问题而生的。

2. SWD 的核心特点
-
仅需两根线:
- SWDIO:串行数据输入/输出线。这是一条双向数据线,用于传输命令、数据和应答。
- SWCLK:串行时钟线。由调试器(如 J-Link, ST-Link)提供,用于同步数据通信。
-
引脚复用 :SWD 的一个巨大优势是它的引脚通常与 JTAG 的某些引脚复用。例如:
- SWDIO 通常与 JTAG TMS 引脚复用。
- SWCLK 通常与 JTAG TCK 引脚复用。
这意味着,芯片设计者可以在同一个物理连接器上同时支持 JTAG 和 SWD 模式,由调试器在上电时通过特定序列来选择使用哪种模式。这极大地增加了硬件设计的灵活性。
-
高性能:虽然只有一根数据线,但 SWD 的协议效率很高。它减少了协议开销,在实际应用中,其调试速度通常可以与 JTAG 相媲美,甚至在某些情况下更快。
-
低功耗调试:SWD 协议在设计时考虑了对低功耗模式的支持,调试器可以在芯片处于低功耗状态时与其进行通信,这对于调试电源管理相关的应用至关重要。
-
可靠性高:协议包含完善的错误检测和应答机制。
3. SWD 接口的典型引脚
一个标准的 SWD 连接器通常包含以下引脚(除了核心的两根线):
| 引脚名称 | 全称 | 方向 | 描述 |
|---|---|---|---|
| SWDIO | Serial Wire Data Input/Output | 双向 | 核心数据线 |
| SWCLK | Serial Wire Clock | 输入 | 核心时钟线,由调试器提供 |
| GND | Ground | - | 公共地线,非常重要,通常需要多个 |
| VCC | Power | - | 目标板电压 。调试器用它来检测电平,并进行电平匹配。(注意:不是给目标板供电) |
| SWO | Serial Wire Output | 输出 | 可选引脚 。用于输出诸如 ITM(Instrumentation Trace Macrocell) 数据,实现 printf 打印、事件跟踪等高级调试功能。 |
| nRST | Reset | 输出 | 可选引脚。调试器可以主动复位目标芯片。 |
注意 :一个最基本的 SWD 连接只需要 SWDIO, SWCLK 和 GND 三根线。VCC 是为了电平匹配,SWO 和 nRST 是为了增强功能。
4. SWD 能做什么?(应用场景)
SWD 提供了与 JTAG 类似的核心调试功能:
- 下载程序:将编译好的固件(bin/hex 文件)烧录到微控制器的 Flash 存储器中。
- 在线调试 :
- 设置断点(Breakpoint)
- 单步执行(Single Step)
- 查看和修改内存、寄存器的值
- 查看调用栈(Call Stack)
- 内核控制:停止(Halt)和运行(Run)CPU 内核。
- 访问外设:直接读写芯片内部外设的寄存器。
5. SWD 与 JTAG 的对比总结
| 特性 | SWD(串行线调试,Serial Wire Debug) | JTAG(联合测试行动组,Joint Test Action Group) |
|---|---|---|
| 引脚数量 | 2根核心线(SWDIO, SWCLK) | 至少4根线(TMS, TCK, TDI, TDO) |
| 引脚占用 | 极少,适合小封装芯片 | 较多 |
| 速度 | 高效,在实际应用中与 JTAG 相当 | 成熟稳定 |
| 复杂性 | 协议相对简单 | 协议复杂,有状态机 |
| 引脚复用 | 是,通常与 JTAG 引脚复用 | 否 |
| 主要应用 | ARM Cortex-M/A/R 系列微控制器 | 广泛用于各类处理器、FPGA的测试和调试 |
总结
SWD 是一种专为现代、高密度、低功耗的 ARM 微控制器优化的高性能调试接口。 它以最少的引脚数量,提供了不逊于 JTAG 的强大调试功能,已经成为当前 ARM Cortex-M 系列 MCU(如 STM32, GD32, NXP LPC, Nordic nRF 等)事实上的标准调试接口。当你拿起一个 ST-Link 或 J-Link 调试器去连接一个 STM32 开发板时,你几乎总是在使用 SWD 模式。