JTAG原理详解
JTAG原理详解
JTAG(Joint Test Action Group)是一种用于测试和调试嵌入式系统的标准接口。它主要用于边界扫描测试、程序下载、调试和配置等任务。JTAG接口通过一个带控制通路的串行通信协议实现这些功能。
JTAG的用途
- 边界扫描测试:通过检查芯片引脚之间的连接,检测硬件故障。
- 程序下载、调试和配置:通过访问内部寄存器,实现对设备的编程和调试。
- 串行通信协议:JTAG可以被视为一个带控制通路的串行通信协议,用于设备的测试和调试。
JTAG的结构
总体结构
JTAG接口由以下信号组成:
- TCK(测试时钟):时钟信号,控制数据的传输速度。
- TMS(测试模式选择):控制状态机的状态转换。
- TDI(测试数据输入):数据输入端口。
- TDO(测试数据输出):数据输出端口。
各个模块的TDO和TDI依次首尾相接,形成一个串行链路。最后的TDO连接回上位机的TDO,上位机的TDI连接到第一个模块的TDI。
内部结构
对于某个芯片,其内部结构如下图所示。芯片内部需要检查连通性或提供可观测性的寄存器通过相同的TDI->{TDO->TDI}->TDO方式串接起来。时钟信号和控制信号(TCK和TMS)被接入到TAP逻辑块中。
TAP控制器
TAP控制器维护了一个状态机,这个状态机的状态变化仅受TMS控制。状态改变后,对TDI、TDO的解释和行为定义会发生变化,从而实现监测、下载程序、调试等不同功能。
当TAP处于Shift-IR模式时,可以通过TDI每次写入一位到IR寄存器,IR寄存器会自动移动一位。同样地,当TAP处于Shift-DR模式时,可以向DR寄存器写入任何想要的值。
指令寄存器(IR)
IR寄存器中的值被解释为调试指令,芯片内部根据这些指令完成响应的动作。例如,当IR=0b1001时,可以将芯片内部某个寄存器的值输出;当IR=0b1011时,可以将芯片挂起。
协议特别规定,如果IR寄存器的每个位都是1,则表示BYPASS指令,此时TDI经过一个时钟周期到TDO。需要注意的是,不同芯片内部的IR寄存器位数可能不同。
数据寄存器(DR)
DR寄存器可以理解为IR指令操作的数据。需要注意的是,DR寄存器有很多,每个IR指令可以对应不同的DR。一个特殊的DR动作是,当TAP进入Test-Logic-Reset状态时,DR寄存器自动装入该器件对应的ID,这是一个32位的值。这一状态的控制权比IR寄存器大。