jtag协议处理流程
JTAG(Joint Test Action Group)协议的数据流遵循严格的串行移位机制,通过测试访问端口(TAP,Test Access Port)状态机控制数据在指令寄存器(IR)和数据寄存器(DR)之间的传输。以下是JTAG协议数据流的核心原理和流程解析:
一、JTAG协议的核心组件与数据载体
-
测试访问端口(TAP)
JTAG的核心控制单元,包含:- 状态机:16个状态组成,通过TMS(测试模式选择)信号的高低低电平切换状态(如移位、捕获、更新)。
- 指令寄存器(IR):存储JTAG指令(如读取IDCODE、访问数据寄存器),长度由芯片设计决定(通常4~32位)。
- 数据寄存器(DR):根据IR中的指令选择对应的功能寄存器(如IDCODE寄存器、边界扫描寄存器、调试寄存器),长度可变。
-
关键信号
数据流通过以下信号传输(均为串行信号):- TCK(测试时钟):同步所有数据传输,上升沿采样输入(TDI),下降沿输出(TDO)。
- TDI(测试数据输入):主机(如仿真器)向目标设备发送数据(IR指令或DR数据)。
- TDO(测试数据输出):目标设备向主机返回数据(DR读取结果)。
- TMS(测试模式选择):控制TAP状态机切换,决定当前是操作IR还是DR。
二、JTAG数据流的基本流程
JTAG的数据传输分为指令寄存器操作(IR扫描) 和数据寄存器操作(DR扫描) 两大阶段,所有数据均以串行移位方式传输(LSB或MSB先行,由芯片定义)。
1. 指令寄存器操作(IR扫描):选择DR功能
IR扫描的目的是向目标设备发送指令(如“读取IDCODE”“访问调试寄存器”),决定后续DR操作的对象。流程如下:
状态机路径:Test-Logic-Reset → Run-Test/Idle → Select-IR-Scan → Capture-IR → Shift-IR → Exit1-IR → Update-IR → Run-Test/Idle
- Capture-IR:捕获IR的默认值(通常为厂商定义的固定值)到移位寄存器。
- Shift-IR:串行移位阶段——主机通过TDI发送指令(如
0x01
表示IDCODE读取),同时TDO输出原IR值(移位输出,可忽略),持续n
个TCK周期(n
=IR长度)。 - Update-IR:将Shift-IR阶段移入的指令锁存到IR寄存器,指令生效(此时DR被切换为该指令对应的功能寄存器)。
示例:发送8位指令0x01
(IDCODE读取)
- TDI在8个TCK周期依次发送:
1→0→0→0→0→0→0→0
(LSB先行)。 - 指令锁存后,DR自动切换为IDCODE寄存器。
2. 数据寄存器操作(DR扫描):传输实际数据
DR扫描根据IR中已加载的指令,对对应的功能寄存器进行读写操作(如读取IDCODE、写入调试命令)。流程如下:
状态机路径:Run-Test/Idle → Select-DR-Scan → Capture-DR → Shift-DR → Exit1-DR → Update-DR → Run-Test/Idle
- Capture-DR:捕获当前DR(如IDCODE寄存器、边界扫描寄存器)的内容到移位寄存器。
- Shift-DR:串行移位阶段——
- 写操作:主机通过TDI发送数据(如调试命令、地址),持续
m
个TCK周期(m
=DR长度)。 - 读操作:主机通过TDI发送无关数据(通常全0),同时通过TDO接收DR中的数据(移位输出)。
- 写操作:主机通过TDI发送数据(如调试命令、地址),持续
- Update-DR:将Shift-DR阶段移入的数据锁存到DR寄存器,完成实际读写操作。
示例:读取32位IDCODE(IR已加载0x01
指令)
- 32个TCK周期内,TDI发送全0,TDO依次输出IDCODE的32位数据(LSB先行)。
- 主机收集TDO数据,拼接为完整的32位IDCODE(如
0x2BA01477
表示ARM Cortex-M3)。
三、典型数据流交互示例(读取芯片IDCODE)
- 初始化:目标设备上电后进入
Test-Logic-Reset
状态(默认状态),TMS高电平+5个TCK脉冲确保复位完成。 - IR扫描(发送IDCODE指令):
- TMS信号切换,使状态机进入
Shift-IR
。 - 发送8位指令
0x01
(IDCODE读取):TDI在8个TCK周期依次传输0b00000001
(LSB先行)。 - 状态机进入
Update-IR
,指令生效,DR切换为IDCODE寄存器。
- TMS信号切换,使状态机进入
- DR扫描(读取IDCODE数据):
- TMS信号切换,使状态机进入
Shift-DR
。 - 32个TCK周期内,TDI发送全0,TDO输出32位IDCODE(如
0x12345678
)。 - 状态机进入
Update-DR
,完成读取。
- TMS信号切换,使状态机进入
- 结束:返回
Run-Test/Idle
状态,等待下一次操作。
四、多设备JTAG链的数据流(菊花链)
当多个设备共享同一JTAG接口(菊花链连接)时,数据流通过串联移位传输:
- 所有设备的TDI/TDO依次连接(设备1的TDO→设备2的TDI,以此类推)。
- IR扫描时,指令需包含“设备选择”字段,只有匹配的设备会响应后续DR操作。
- DR扫描时,数据会依次经过所有设备的移位寄存器,主机需按设备顺序解析数据。
示例:2个设备的菊花链
- 发送指令时,需先发送“设备1选择码+指令”,再发送“设备2选择码+指令”。
- 读取数据时,TDO输出设备1的数据→设备2的数据,主机按顺序拆分。
五、数据流的关键特性
- 串行同步:所有数据通过TDI/TDO串行传输,由TCK时钟同步,时序严格(需满足建立/保持时间)。
- 方向可控:通过指令区分读写方向(如
IR_READ
指令对应DR读,IR_WRITE
对应DR写)。 - 长度可变:IR和DR的长度由设备定义(如IR=4位,DR=32位),主机需预先知晓(通过芯片手册或IDCODE解析)。
- 状态机驱动:数据流的每个阶段(捕获、移位、更新)均由TMS信号控制的TAP状态机驱动,确保操作有序。
总结
JTAG协议的数据流本质是“基于状态机的串行移位传输”:先通过IR扫描选择操作类型(指令),再通过DR扫描传输实际数据(地址、命令、结果)。这种机制使JTAG能通过少量信号线(4~5根)实现对芯片内部多个模块的控制,广泛用于调试、测试和配置场景。理解数据流的核心是掌握TAP状态机的切换逻辑和IR/DR的串行移位规则。