JTAG是arm芯⽚的调试协议,诸如Keil/ADS/IAR等IDE集成了JTAG解析功能。
JLink,JTrace都是调试器/仿真器,即在线调试⼯具,他们⽀持从JTAG协议/接⼝转换到USB协议/接⼝。
⼀、⼯作原理
调试ARM,总要遵循ARM的调试接⼝协议吧,jtag就是其中的⼀种吧。当仿真时,IAR,KEIL,ADS等等都有⼀个公共的调试接⼝,RDI(RDI接⼝是ARM公司提出的调试接⼝标准,主要⽤于ARM芯⽚的JTAG仿真。) 那么我们如何完成RDI-->arm调试协议(JTAG)的转换呢? 如是乎就有两种做法:
(1) 在电脑上写⼀个服务程序,把KEIL,ADS,IAR中的RDI命令解析成相关的JTAG协议,然后通后⼀个物理转换接⼝(注意,这个转换只是电⽓物理层 上的转换,就像RS232那样的作⽤)发送你的的⽬标板。 H-JTAG就是这样的。 H-JTAG的硬件就仅是⼀个物理电平的转换接⼝,所以很简单。⽽电脑中装的H-JTAG软件就是前⾯说到的服务程序,负责协议转换的。 (2)另⼀种做法,就是做⼀个板,⽤此板直接接收来⾃KEIL,ADS,IAR等软件的调试命令,由此板做RDI->JTAG协议的转换。然后与⽬标板通信,这就是jlink的⼯作原理。(这也就实现了USB转JTAG协议)。
1.JTAG⼯作原理
JTAG(Joint Test AcTIon Group,联合测试⾏动组)是⼀种国际标准测试协议(IEEE 1149.1兼容)。标准的JTAG接⼝是4线——TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输⼊和数据输出线。
JTAG是最基本的通讯协议之⼀,⼤家可以理解为与RX TX或者USB的道理是⼀样的,只是⼀种通讯⼿段,但与RX TX以及USB有很重⼤的不同,那就是这个JTAG协议是最底层的,说的通俗⼀点,⼀般来说,⼿机⾥边,CPU是⽼⼤,对吧?但在JTAG⾯前,他就不是⽼⼤了,JTAG协议就是⽤来控制CPU的,在JTAG⾯前CPU变成喽啰了。⼀般的协议是求着CPU读写字库的程序,但JTAG可以读写CPU的程序,命令让CPU啥活都⼲,擒贼先擒王,JTAG就是屠龙⼑。
JTAG也是⼀种国际标准测试协议(IEEE 1149.1兼容),主要⽤于芯⽚内部测试。现在多数的⾼级器件都⽀持JTAG协议,如DSP、FPGA器件等。 标准的JTAG接⼝是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输⼊和数据输出线。 相关JTAG引脚的定义为: TCK为测试时钟输⼊;
TDI为测试数据输⼊,数据通过TDI引脚输⼊JTAG接⼝; TDO为测试数据输出,数据通过TDO引脚从JTAG接⼝输出;
TMS为测试模式选择,TMS⽤来设置JTAG接⼝处于某种特定的测试模式; TRST为测试复位,输⼊引脚,低电平有效。
JTAG的主要功能有两种,或者说JTAG主要有两⼤类:⼀类⽤于测试芯⽚的电⽓特性,检测芯⽚是否有问题;另⼀类⽤于Debug,对各类芯⽚以及 其外围设备进⾏调试。⼀个含有JTAG Debug接⼝模块的CPU,只要时钟正常,就可以通过JTAG接⼝访问CPU的内部寄存器、挂在CPU总线上的设备以及内置模块的寄存器。
注释:JTAG可以访问⼀些内部寄存器,主要是CPU内的寄存器,例如⼀些通⽤寄存器等;也可以访问⼀些挂在总线上的设备,⽐如⽚内的内存L1,L2,L3等;还可以访问内置模块的寄存器,⽐如MMU模块,通过JTAG都可以访问这些寄存器。
1 JTAG原理分析
简单地说,JTAG的⼯作原理可以归结为:在器件内部定义⼀个TAP(Test Access Port,测试访问⼝),通过专⽤的JTAG测试⼯具对内部节点进⾏测试和调试。⾸先介绍⼀下边界扫描和TAP的基本概念和内容。1.1 边界扫描
边界扫描(Boundary-Scan)技术的基本思想是在靠近芯⽚的输⼊/输出引脚上增加⼀个移位寄存器单元,也就是边界扫描寄存器(Boundary-Scan Register)。
当芯⽚处于调试状态时,边界扫描寄存器可以将芯⽚和外围的输⼊/输出隔离开来。通过边界扫描寄存器单元,可以实现对芯⽚输⼊/输出信号的观察和控 制。对于芯⽚的输⼊引脚,可以通过与之相连的边界扫描寄存器单元把信号(数据)加载到该引脚中去;对于芯⽚的输出引脚,也可以通过与之相连的边界扫描寄存 器“捕获”该引脚上的输出信号。在正常的运⾏状态下,边界扫描寄存器对芯⽚来说是透明的,所以正常的运⾏不会受到任何影响。这样,边界扫描寄存器提供了⼀ 种便捷的⽅式⽤于观测和控制所需调试的芯⽚。另外,芯⽚输⼊/输出引脚上的边界扫描(移位)寄存器单元可以相互连接起来,任芯⽚的周围形成⼀个边界扫描链 (Boundary-Scan Chain)。边界扫描链可以串⾏地输⼊和输出,通过相应的时钟信号和控制信号,就可以⽅便地观察和控制处在调试状态下的芯⽚。1.2 测试访问⼝TAP
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,就可以将新的数据加载到数据寄存器中。经过⼀个周期后,就可以捕获数据寄存器中的数据,完 成对与数据寄存器的每个寄存器单元相连的芯⽚引脚的数据更新,也完成了对数据寄存器的访问。
因篇幅问题不能全部显示,请点此查看更多更全内容