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

相关推荐
小䌨狗狗4 小时前
学习记录:RT-Thread 初始化机制
嵌入式·rtt-hread
大聪明-PLUS4 小时前
在 Linux 上使用实时调度策略运行应用程序
linux·嵌入式·arm·smarc
FreakStudio11 小时前
串口协议解析实战:以 R60ABD1 雷达为例,详解 MicroPython 驱动中数据与业务逻辑的分离设计
python·单片机·pycharm·嵌入式·面向对象·硬件·电子diy
大聪明-PLUS1 天前
Linux 系统中的 CPU。文章 2:平均负载
linux·嵌入式·arm·smarc
余生皆假期-2 天前
SPWM 与 SVPWM 电压利用率简谈
单片机·嵌入式
赋能大师兄2 天前
单片机/嵌入式修行之路
单片机·嵌入式
大聪明-PLUS3 天前
Linux 中的 CPU。文章 1. 利用率
linux·嵌入式·arm·smarc
飞凌嵌入式3 天前
【玩转多核异构】T153核心板RISC-V核的实时性应用解析
linux·嵌入式硬件·嵌入式·risc-v
DIY机器人工房3 天前
嵌入式面试题:物联网协议怎么选?Zigbee/蓝牙/LoRa/4G/WiFi优缺点一文读懂
stm32·嵌入式硬件·嵌入式·diy机器人工房·嵌入式面试题