SWD(Serial Wire Debug,串行线调试)

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 的核心特点

  1. 仅需两根线

    • SWDIO:串行数据输入/输出线。这是一条双向数据线,用于传输命令、数据和应答。
    • SWCLK:串行时钟线。由调试器(如 J-Link, ST-Link)提供,用于同步数据通信。
  2. 引脚复用 :SWD 的一个巨大优势是它的引脚通常与 JTAG 的某些引脚复用。例如:

    • SWDIO 通常与 JTAG TMS 引脚复用。
    • SWCLK 通常与 JTAG TCK 引脚复用。
      这意味着,芯片设计者可以在同一个物理连接器上同时支持 JTAG 和 SWD 模式,由调试器在上电时通过特定序列来选择使用哪种模式。这极大地增加了硬件设计的灵活性。
  3. 高性能:虽然只有一根数据线,但 SWD 的协议效率很高。它减少了协议开销,在实际应用中,其调试速度通常可以与 JTAG 相媲美,甚至在某些情况下更快。

  4. 低功耗调试:SWD 协议在设计时考虑了对低功耗模式的支持,调试器可以在芯片处于低功耗状态时与其进行通信,这对于调试电源管理相关的应用至关重要。

  5. 可靠性高:协议包含完善的错误检测和应答机制。

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 类似的核心调试功能:

  1. 下载程序:将编译好的固件(bin/hex 文件)烧录到微控制器的 Flash 存储器中。
  2. 在线调试
    • 设置断点(Breakpoint)
    • 单步执行(Single Step)
    • 查看和修改内存、寄存器的值
    • 查看调用栈(Call Stack)
  3. 内核控制:停止(Halt)和运行(Run)CPU 内核。
  4. 访问外设:直接读写芯片内部外设的寄存器。

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 模式。

相关推荐
charlie1145141911 天前
现代嵌入式C++教程:对象池(Object Pool)模式
开发语言·c++·学习·算法·嵌入式·现代c++·工程实践
我是海飞2 天前
杰理 AC792N 使用 WebSocket 连接百度语音大模型,实现 AI 对话
c语言·单片机·嵌入式·ai对话·杰理·websockey
不凉帅2 天前
NO.2计算机基础
网络·嵌入式·硬件·软件·计算机基础
PinoLio4 天前
鲁班猫烧录镜像win10平台
嵌入式·鲁班猫
不脱发的程序猿4 天前
使用Python高效对比多个相似的CAN DBC数据
python·单片机·嵌入式硬件·嵌入式
皮蛋sol周4 天前
嵌入式学习数据结构(二)双向链表 内核链表
linux·数据结构·学习·嵌入式·arm·双向链表
cui__OaO5 天前
Linux驱动--基于驱动设备分离的按键中断驱动
linux·运维·服务器·嵌入式
Hello_Embed5 天前
RS485 双串口通信 + LCD 实时显示(DMA+IDLE 空闲中断版)
笔记·单片机·学习·操作系统·嵌入式·freertos
Hello_Embed5 天前
RS485 双串口通信 + LCD 实时显示(中断版)
c语言·笔记·单片机·学习·操作系统·嵌入式
要做朋鱼燕6 天前
【AES加密专题】3.工具函数的编写(1)
笔记·密码学·嵌入式·aes