JTAG 调试接口协议详解

JTag

JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO及一个可选配的引脚TRST,分别为模式选择、时钟、数据输入和数据输出线以及重置。

jtag

  • TCK:JTAG测试时钟,为TAP控制器和寄存器提供测试参考。在TCK的同步作用下通过TDI和TDO引脚串行移入或移出数据及指令。同时,TCK为TAP控制器状态机提供时钟。
  • TMS:TAP控制器的三项式输入信号。TCK的上升沿时刻TMS的状态确定TAP控制器即将进入的工作状态。通常TMS引脚具有内部上拉电阻,以保证该引脚在没有驱动时处于逻辑1状态。
  • TDI:JTAG指令和数据寄存器的串行数据输入端。TAP控制器的当前状态以及保持在指令寄存器中的具体指令决定对于一个特定的操作由TDI装入哪个寄存器。在TCK的上升沿时刻,TDI引脚状态被除数采样,结果送到JTAG寄存器组。
  • TDO:JTAG指令和数据寄存器的串行输出端。TAP控制器的当前状态以及保持在指令寄存器中的具体指令决定对于一个特定的操作哪个寄存器的内容送到TDO输出。对于任何已知的操作,在TDI和TDO之间只能有一个寄存器(指令或数据)处于有效连接状态。TDO在TCK的下降沿改变状态,并且只在数据通过器件移动过程中有效。该引脚在其它的时间处于高阻状态。

通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片工作是否有问题:一类用于Debug,一般支持JTAG的CPU内都包含了这两个模块。

一个含有JTAG Debug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂载在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,像UART,Timers,GPIO等等的寄存器。

上面说的只是JTAG接口所具备的能力,要使用这些功能,还需要软与程序的配合,具体实现的功能由相对应的软件决定。

对于日常的嵌入式开发来说,我们一般会把JTAG作为下载代码和调试软件的接口。有时候为了减少PCB面积或方便升级,往往使用SWI、ISP、IAP等接口或下载方式代替JTAG。

实际上,JTAG产生的最初目的是用于芯片测试,即Boundary-scan技术,常见规范有IEEE1149.1、IEEE1149.6和IEEE1532等,通过与规范兼容的设备,即可访问芯片的内部节点或I/O。在一个硬件设备完成PCB制作和器件焊接后,如果一旦成功下载了程序,马上就开始软件调试,而调试不通时往往无法确定是硬件问题还是软件问题。

原理

简单地说,JTAG的工作原理可以归结为:在器件内部定义一个TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试和调试。首先介绍一下边界扫描和TAP的基本概念和内容。

边界扫描(Boundary-Scan)技术的基本思想是在靠近芯片的输入/输出引脚上增加一个移位寄存器单元,也就是边界扫描寄存器(Boundary-Scan Register)。
当芯片处于调试状态时,边界扫描寄存器可以将芯片和外围的输入/输出隔离开来。通过边界扫描寄存器单元,可以实现对芯片输入/输出信号的观察和控 制。对于芯片的输入引脚,可以通过与之相连的边界扫描寄存器单元把信号(数据)加载到该引脚中去;对于芯片的输出引脚,也可以通过与之相连的边界扫描寄存 器“捕获”该引脚上的输出信号。在正常的运行状态下,边界扫描寄存器对芯片来说是透明的,所以正常的运行不会受到任何影响。这样,边界扫描寄存器提供了一 种便捷的方式用于观测和控制所需调试的芯片。另外,芯片输入/输出引脚上的边界扫描(移位)寄存器单元可以相互连接起来,任芯片的周围形成一个边界扫描链 (Boundary-Scan Chain)。边界扫描链可以串行地输入和输出,通过相应的时钟信号和控制信号,就可以方便地观察和控制处在调试状态下的芯片。

TAP(Test Access Port)是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。对整个TAP的控制是通过TAP控制器(TAP Controller)来完成的。下面先分别介绍一下TAP的几个接口信号及其作用。其中,前4个信号在IEEE1149.1标准里是强制要求的。

  • TCK:时钟信号,为TAP的操作提供了一个独立的、基本的时钟信号。
  • TMS:模式选择信号,用于控制TAP状态机的转换。
  • TDI:数据输入信号。
  • TDO:数据输出信号。
  • TRST:复位信号,可以用来对TAP Controller进行复位(初始化)。这个信号接口在IEEE 1149.1标准里并不是强制要求的,因为通过TMS也可以对TAP Controller进行复位。
  • STCK:时钟返回信号,在IEEE 1149.1标准里非强制要求。
  • DBGRQ:目标板上工作状态的控制信号。在IEEE 1149.1标准里没有要求,只是在个别目标板(例如STR710)中会有。

简单地说,PC机对目标板的调试就是通过TAP接口完成对相关数据寄存器(DR)和指令寄存器(IR)的访问。

系统上电后,TAP Controller首先进入Test-LogicReset状态,然后依次进入Run-Test/Idle、Select-DR- Scan、Select-IR-Scan、Capture-IR、Shift-IR、Exitl-IR、Update-IR状态,最后回到Run- Test/Idle状态。在此过程中,状态的转移都是通过TCK信号进行驱动(上升沿),通过TMS信号对TAP的状态进行选择转换的。其中,在 Capture-IR状态下,一个特定的逻辑序列被加载到指令寄存器中;在Shift-IR状态下,可以将一条特定的指令送到指令寄存器中;在 Update-IR状态下,刚才输入到指令寄存器中的指令将用来更新指令寄存器。最后,系统又回到Run-Test/Idle状态,指令生效,完成对指令 寄存器的访问。当系统又返回到Run-Test/Idle状态后,根据前面指令寄存器的内容选定所需要的数据寄存器,开始执行对数据寄存器的工作。其基本 原理与指令其存器的访问完全相同,依次为Select-DR-Scan、Capture-DR、Shift-D、Exit1-DR、Update-DR, 最后回到Run-Test/Idle状态。通过TDI和TDO,就可以将新的数据加载到数据寄存器中。经过一个周期后,就可以捕获数据寄存器中的数据,完成对与数据寄存器的每个寄存器单元相连的芯片引脚的数据更新,也完成了对数据寄存器的访问。

目前,市场上的JTAG接口有14引脚和20引脚两种。其中,以20引脚为主流标准,但也有少数的目标板采用14引脚。经过简单的信号转换后,可以将它们通用。

苏ICP备19018690号-1