大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家讲的是嵌入式调试里的接口标准JTAG。

除了上述BSR之外,JTAG系统还需要以下3个寄存器:
- 指令寄存器:存储当前的指令,指令内容被TAP控制器用来决定如何处理接收到的信号。
- 旁路寄存器(BYPASS):把信息从TDI传到TDO的单位寄存器。
- 识别码寄存器(IDCODES):含有器件的识别码和版本序号,该信息可以使器件和它的边界扫描描述语言(BSDL)文件相关联。
JTAG系统最核心的是TAP控制器,TAP控制器被设计用来与JTAG系统内部寄存器相互动,TAP控制器是一个被TMS信号控制转换的同步状态机,控制着JTAG系统的行为。
如上图所示,TAP控制器的内部状态机一共16个状态,关于各个状态具体含义可查阅IEEE1149.1手册。TAP控制器的基本功能是产生BSR和指令寄存器正常工作所需要的时钟和控制信号,其主要功能有以下几点:
- 提供信号将指令装入指令寄存器。
- 提供信号将输入数据从TDI管脚移入内部寄存器、把输出数据从内部寄存器移出到TDO管脚。
- 执行相应功能,如捕获、移位和更新数据等。
指令寄存器是用来存储需要解释执行的指令的,IEEE 1149.1标准规定了JTAG兼容器件必须要具备的指令:
- BYPASS:用单一单元旁路寄存器传送数据,缩短JTAG链上不必要的扫描链路。
- EXTEST:将已知值(存在BSR)驱动到芯片针脚上。
- SAMPLE/PRELOAD:将捕获到的芯片针脚值装入BSR。
除了必备的指令外,IEEE 1149.1标准还规定了如下可选的指令:
- IDCODE:将IDCODES寄存器中的数据移出。
- INTEST:将已知值(存在BSR)驱动到芯片核心逻辑上。
- RUNBIST:当TAP进入测试运行空闲状态时,芯片进行自检。
1.4 JTAG调试工具pinout
通常支持JTAG接口的调试编程工具其实只是利用了JTAG技术的四线TAP通信协议,而除了标准TAP信号线外,有时还加入其他辅助信号线构成完整pinout,对于ARM JTAG调试工具来说,有两种比较通用的pinout标准,即ARM20 JTAG header和ARM14 JTAG header:
![]() | ![]() |
上述两种ARM JTAG header中除了标准TAP信号线外,其他辅助信号线含义如下:
信号名 | ARM20-pin | ARM14-pin | 信号含义 |
---|---|---|---|
Vref | P1 | P1,P13 | JTAG接口电平参考电压。用于检查目标系统是否供电,该引脚通常与目标系统Vdd相连,中间不允许串接电阻。 |
Vsupply | P2 | N/A | 电源输入 |
nSRST | P15 | P12 | System Reset信号,与目标系统复位信号相连。可以直接对目标系统复位,同时可以检测目标系统的复位情况。为了防止误触发,应在目标端加上适当的上拉电阻。 |
RTCK | P11 | N/A | Return Test Clock。由目标系统反馈给JTAG的时钟信号,用来动态控制TCK速率。不使用时可以直接接地。 |
GND | P4,P6,P8,P10,P12,P14,P16,P18,P20 | P2,P4,P6,P8,P10,P14 | 接地 |
DBGRQ | P17 | N/A | 连接到目标系统的调试请求信号 |
DBGACK | P19 | N/A | 由目标系统反馈回来的调试应答信号 |
Note:更多JTAG pinout详见JTAG test网站的整理
从上图可以看出TMS、TCK是一主多从并联的结构(设备过多时TMS,TCK电路需加缓冲器(如74LVC245)增加驱动能力);TDI、TDO是一主一从串联的结构,这种菊花链方式使得PCB上只需要一个JTAG接口便可以访问所有JTAG设备。
至此,嵌入式调试里的接口标准JTAG痞子衡便介绍完毕了,掌声在哪里~~~