JTAG和SWD的简单了解

JTAG

  JTAG 是一种串行通信协议和硬件接口,用于:

  • 对芯片内部进行调试、控制和测试

  • 实现 SoC/FPGA/CPU 的调试功能(如断点、单步执行、寄存器访问)

  • 在系统不运行时也能访问芯片内部状态

1、JTAG接口引脚

  标准 JTAG 接口至少有以下 4~5 根引脚:

引脚接口 含义 方向
TDI Test Data In:输入数据 调试器 → 目标
TDO Test Data Out:输出数据 目标 → 调试器
TCK Test Clock:时钟信号 调试器 → 目标
TMS Test Mode Select:模式控制 调试器 → 目标
nTRST(可选) 测试逻辑复位 调试器 → 目标

 常见 JTAG 连接头为 10-pin 或 20-pin IDC 接头(2.54mm 排针)。

2、JTAG 内部结构原理(简化)

  每个支持 JTAG 的芯片内部有一个 JTAG 状态机(TAP Controller),用于解析 TMS/TCK 控制信号,并访问:

  • 边界扫描寄存器(用于测试 PCB 焊接情况)

  • 指令寄存器(IR)

  • 数据寄存器(DR)

  • 内部调试接口(如 ARM DAP、FPGA 配置引擎)

3、JTAG 的主要用途

  ①边界扫描(Boundary Scan)

  • 测试 PCB 上芯片与芯片之间的互连信号是否焊接良好

  • 无需上电运行系统,只需测试管脚状态

  • 适用于复杂 PCB 验证和产线测试

  ②程序下载 / 烧录

  • 通过 JTAG 下载程序到 MCU / SoC 的 Flash

  • 下载 FPGA 的配置数据(bitstream)

  ③调试处理器(Debug)

  • 控制 CPU 暂停、单步、设置断点

  • 读写寄存器和内存

  • 在系统奔溃或死机时仍可分析状态(不像串口调试那样依赖运行系统)

4、实际应用举例

  ①STM32 或 Cortex-M 微控制器:

  • 使用 JTAG 或 SWD 接口连接 ST-Link/J-Link

  • 在 IDE(如 Keil、IAR、STM32CubeIDE)中进行在线调试

  ②FPGA:

  • 使用 JTAG 将配置文件下载到 SRAM 或 Flash

  • 用来调试 RTL 逻辑(如 Xilinx ILA、SignalTap)

  ③PCBA 测试:

  • 利用边界扫描模式自动测试焊接质量(如飞针测试、自动测试仪)

5、常见JTAG调试器

调试器 支持平台 接口类型
ST-Link STM32 SWD / JTAG
J-Link 通用 ARM  SWD / JTAG
Xilinx Platform Cable FPGA JTAG
OpenOCD  多平台开源 SWD / JTAG
DAPLink ARM SWD / JTAG



 

SWD

SWD = Serial Wire Debug

  SWD 是一种基于 串行通信的调试协议,用于与 ARM Cortex-M 系列(如 STM32、nRF、GD32、LPC)等微控制器进行调试和编程。它是 ARM Debug Access Port(DAP) 架构的一部分。

SWD 的特点

特性 描述
引脚少 只需要 2 根信号线(+ GND),适合引脚紧张的芯片或板子
低成本、高性能 替代 JTAG,硬件资源消耗更少
功能强大 支持单步调试、断点、内存/寄存器访问、Flash 编程
与JTAG兼容 多数芯片可在 SWD 和 JTAG 之间切换

 

1、SWD接口引脚定义

引脚名 功能说明
SWDIO 串行数据线(双向)
SWCLK 串行时钟(调试器驱动)
GND 接地(共地)
nRESET(可选) 外部复位引脚
VCC / VTref(可选) 提供目标电压参考给调试器,用于电平匹配

注意:SWDIO 是双向数据线,一般需要接一个 上拉电阻(通常为 10kΩ 到 47kΩ)。

 2、SWD接口原理(简图)

调试器端                        目标 MCU
┌────────┐                   ┌────────────┐
│ SWDIO ├───────────────►───┤ SWDIO(PA13)│
│ SWCLK ├───────────────►───┤ SWCLK(PA14)│
│ GND   ├────────────────────┤ GND        │
│ nRESET├───────►(可选)──────┤ NRST       │
└────────┘                   └────────────┘

3、使用 SWD 的常见工具

调试器 支持平台 接口
ST-Link STM32、GD32 等 SWD
J-Link 通用 ARM SWD/JTAG
DAPLink 通用 ARM SWD
CMSIS-DAP 标准开放协议 SWD
OpenOCD 开源调试软件 SWD/JTAG

4、SWD的实际用途

  • 向 MCU 下载程序(Flash 编程)

  • 设置硬件断点、单步调试

  • 实时变量查看(watch/monitor)

  • 与 IDE(如 Keil、STM32CubeIDE)联动调试

  • 在 MCU 死机时通过 SWD 仍可访问寄存器与内存

许多开发板的 SWD 接口用来烧录程序到 Flash,如 STM32 的 .hex.bin 文件。使用 ST-Link Utility 或 STM32CubeProgrammer,即可通过 SWD 烧写目标 MCU。

SWD 的使用注意事项

  • 上电后第一时间初始化 SWDIO/SWCLK,避免被程序占用成 GPIO

  • 出现无法连接时,可尝试使用 nRESET 强制复位进入 Bootloader

  • 若程序配置了 SWD 引脚为普通 IO,可能需要进入系统 Boot 模式重新解锁

SWD 和 JTAG 的对比

特性SWDJTAG
信号线数 2(SWDIO, SWCLK) 4~5(TMS, TCK, TDI, TDO, nTRST)
调试功能 支持(断点、单步、寄存器访问) 支持
节省 IO
边界扫描功能 ❌(不支持) ✅(支持)
ARM Cortex-M 适配 ✅(专属) ✅(也支持)
FPGA 适配
posted @ 2025-07-27 20:52  叉叉星  阅读(1647)  评论(0)    收藏  举报