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 的对比
特性 | SWD | JTAG |
---|---|---|
信号线数 | 2(SWDIO, SWCLK) | 4~5(TMS, TCK, TDI, TDO, nTRST) |
调试功能 | 支持(断点、单步、寄存器访问) | 支持 |
节省 IO | ✅ | ❌ |
边界扫描功能 | ❌(不支持) | ✅(支持) |
ARM Cortex-M 适配 | ✅(专属) | ✅(也支持) |
FPGA 适配 | ❌ | ✅ |