什么是JTAG.docx
《什么是JTAG.docx》由会员分享,可在线阅读,更多相关《什么是JTAG.docx(13页珍藏版)》请在冰点文库上搜索。
什么是JTAG
JTAG(JointTestActionGroup联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。
现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
JTAG(JointTestActionGroup)是1985年制定的检测PCB和IC芯片的一个标准,1990年被修改后成为IEEE的一个标准,即IEEE1149.1-1990。
通过这个标准,可对具有JTAG接口的芯片的硬件电路进行边界扫描和故障检测。
具有JTAG接口的芯片,相关JTAG引脚的定义为:
TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效
JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
现在,JTAG接口还常用于实现ISP(In-Systemrogrammable在线编程),对FLASH等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
JTAG接口可对PSD芯片内部的所有部件进行编程.
关于JTAG仿真器,是针对某些特殊的单片机或CPU而言的。
这类片子使用符合JTAG接口标准定义的数据线与数据时序来实现在线程序下载(ISP)或程序仿真。
这种程序仿真有两种形式。
一种与传统意义上的仿真器相似,但程序的运行以及CPU资源的模拟在仿真器与目标芯片中同时进行。
另一种仿真形式仅仅对数据进行时序调制,具体的程序运行与调试均在目标芯片中进行。
二者比较而言,后者成本低,仿真器制作简便但效率很低,占用芯片本身的资源多。
而前者恰恰相反。
据我观察,常见的ARM仿真器如EASYARM,TI公司的MSP430单片机的仿真器,还有ALTERA的部分FPGA的JTAG都属于后者。
前者一般而言价格昂贵,很多XLINK的FPGA的JTAG仿真器就采用前者的结构,功能很强大。
JTAG仿真器也称为JTAG调试器,是通过ARM芯片上的JTAG边界扫描口进行调试的设备。
JTAG仿真器比较便宜,连接比较方便。
它可以通过现有的JTAG边界扫描与ARMCPU核进行通信,属于完全非插入式调试。
它无需目标存储器,不占用目标系统的任何端口。
JTAG(JointTestActionGroup)是1985年制定的检测PCB和IC芯片的一个标准,1990年被修改后成为IEEE的一个标准,即IEEE1149.1-1990。
通过这个标准,可对具有JTAG接口的芯片的硬件电路进行边界扫描和故障检测。
具有JTAG接口的芯片,相关JTAG引脚的定义为:
TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效.
JTAG是英文“JointTestActionGroup(联合测试行为组织)”的词头字母的简写,该组织成立于1985年,是由几家主要的电子制造商发起制订的PCB和IC测试标准。
JTAG建议于1990年被IEEE批准为IEEE1149.1-1990测试访问端口和边界扫描结构标准。
该标准规定了进行边界扫描所需要的硬件和软件。
自从1990年批准后,IEEE分别于1993年和1995年对该标准作了补充,形成了现在使用的IEEE1149.1a-1993和IEEE1149.1b-1994。
JTAG主要应用于:
电路的边界扫描测试和可编程芯片的在系统编程。
JTAG也是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。
现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
相关JTAG引脚的定义为:
TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。
GND
TI还定义了一种叫SBW-JTAG的接口,用来在引脚较少的芯片上通过最少的利用引脚实现JTAG接口,它只有两条线,SBWTCK,SBWTDIO。
实际使用时一般通过四条线连接,VCC,SBWTCK,SBTDIO,GND,这样就可以很方便的实现连接,又不会占用大量引脚。
JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
现在,JTAG接口还常用于实现ISP(In-SystemProgrammable;在线编程),对FLASH等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
JTAG接口可对PSD芯片内部的所有部件进行编程。
在硬件结构上,JTAG接口包括两部分:
JTAG端口和控制器。
与JTAG接口兼容的器件可以是微处理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC或其它符合IEEE1149.1规范的芯片。
IEEE1149.1标准中规定对应于数字集成电路芯片的每个引脚都设有一个移位寄存单元,称为边界扫描单元BSC。
它将JTAG电路与内核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。
由集成电路的所有边界扫描单元构成边界扫描寄存器BSR。
边界扫描寄存器电路仅在进行JTAG测试时有效,在集成电路正常工作时无效,不影响集成电路的功能。
JTAG的一些说明
通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug;一般支持JTAG的CPU内都包含了这两个模块。
一个含有JTAGDebug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,象UART,Timers,GPIO等等的寄存器。
上面说的只是JTAG接口所具备的能力,要使用这些功能,还需要软件的配合,具体实现的功能则由具体的软件决定。
例如下载程序到RAM功能。
了解SOC的都知道,要使用外接的RAM,需要参照SOCDataSheet的寄存器说明,设置RAM的基地址,总线宽度,访问速度等等。
有的SOC则还需要Remap,才能正常工作。
运行Firmware时,这些设置由Firmware的初始化程序完成。
但如果使用JTAG接口,相关的寄存器可能还处在上电值,甚至时错误值,RAM不能正常工作,所以下载必然要失败。
要正常使用,先要想办法设置RAM。
在ADW中,可以在Console窗口通过Let命令设置,在AXD中可以在Console窗口通过Set命令设置。
JTAG标准原理介绍
本文介绍支持JTAG标准的IC芯片结构,并以Xilinx公司的两块xc9572_pc84芯片为例,探讨并利用边界扫描技术控制IC芯片处于某种特定功能模式的方法,并且针对IC芯片某种特定的功能模式设计该芯片的JTAG控制器。
1支持JTAG标准的IC芯片结构
边界扫描技术的核心就是在IC芯片的输入输出引脚与内核电路之间设置边界扫描结构。
JTAG标准定义了一个4-wire串行总线[2],通过这四条测试线访问边界扫描单元,可以达到测试芯片内核与外围电路的目的。
图1示出了支持JTAG标准的IC芯片结构。
图中,扫描结构由测试存取通道(TAP)、边界扫描寄存器(BSR)、TAP控制器、指令寄存器(IR)和辅助寄存器等组成。
1.1TAP
TAP是由4-wire串行测试线组成的测试存取通道,JTAG标准定义的所有操作都由这四条测试线来控制。
这四条测试线分别是:
测试时钟输入线(TCK),测试方式选择输入线(TMS),测试数据输入线(TDI),测试数据输出线(TDO)。
1.2TAP控制器
TAP控制器是边界扫描测试的核心控制器,具有一个16状态的有限状态机。
它与TCK信号同步工作,并响应TMS信号。
在TCK信号和TMS信号的控制下,TAP控制器可以选择使用指令寄存器扫描还是数据寄存器扫描,以及选择用于控制边界扫描测试的各个状态。
图2描述了TAP控制器的状态转换全过程[3]。
无论当前状态如何,只要TMS保持5个TCK时钟为高电平,TAP控制器都会回到Test_Logic_Reset状态,使测试电路不影响IC芯片本身的正常逻辑。
需要测试时,TAP控制器跳出该状态,选择数据寄存器扫描(Select_DR_Scan)或选择指令寄存器扫描(Select_IR_Scan)进入图2的各个状态。
一个标准的测试过程如下:
TAP控制器在Capture_IR状态捕获指令信息,经过Shift_IR状态移入新指令,新指令经过Update_IR状态成为当前指令;紧接着,当前指令在Select_DR_Scan状态选择相应的测试数据寄存器,在Capture_DR状态捕获前一测试向量的响应向量,在Shift_DR状态移出该响应向量,同时移入下一测试向量,在Update_DR状态将新的测试量并行加载到相应的串行数据通道,直到移入最后一个测试向量为止。
其中,Pause_DR状态和Pause_IR状态暂停数据移位状态;而四个Exit状态是不稳定状态,它们为状态转换提供灵活性。
1.3BSR
BSR是边界扫描技术的核心,它构成边界扫描链,其中的每一个边界扫描单元(BSC)都是由触发器Q、多路选择开关mux组成。
图3示出了JTAP标准中BC_1类型的BSC的结构[3]。
在图3中,SI为BSC的串行输入端,连接上一个器件(BSC)的串行输出端SO,依次相连便构成边界扫描链。
该扫描链的首端接TDI引脚,末端接TDO引脚。
当MODE为0时,芯片工作在正常模式下。
当芯片工作在测试模式时,测试数据在移位信号(SHIFT=1)的控制下,通过SI端进入到多路选择器1(MUX1)中,通过SO端进入下一个BSC的SI端;当芯片工作在捕获方式时(SHIFT=0),触发器Q1将捕获BSR并行输入端(DI)的数据,送入SO端,在扫描链中传递捕获的数据,并在TDO回收数据,以此来检测故障的存在并且定位故障所在的位置。
当MODE为1时,芯片工作在更新方式下,Q1中的数据在更新信号(UPDATE)的作用下,进入到多路选择器2(MUX2)中,通过BSR的并行输出端(DO)进入芯片的内核中。
1.4IR
IR是向各个数据寄存器发出各种操作码并确定其工作方式的指令寄存器,图4示出了一种IR单元的结构[4]。
由图4可以看出,IR单元是由一个触发器Q1和一个锁存器Q2构成的。
CAPTUREDATE信号控制IR装载指令,SHIRFTIR信号控制指令在IR中的移位;CLKIR信号是从TCK获得的时钟信号,用于为BSR的捕获操作、移位操作提供时钟信号。
UPDATEIR信号用于将当前指令装入锁存器Q2,以决定将要执行的操作模式和将要用到的测试数据寄存器的类别。
1.5辅助寄存器
辅助寄存器包括器件标志寄存器和旁路寄存器,器件标志寄存器用于存储器件制造商、器件序列号和器件版本号等信息,借助它可以辨别板上器件的制造商,还可以通过它检测是否已将正确的器件安装在电路板的正确位置上。
旁路寄存器用于将边界扫描单元直接旁路,把扫描数据直接传递给下一个扫描器件。
2基于边界扫描技术的数字系统测试
基于边界扫描技术的数字系统测试包括两个方面,一是对IC芯片电路功能测试及系统互连测试;二是利用边界扫描技术控制IC芯片处于某种特定的功能模式,以方便电路系统的设计和调试。
本文主要论述后者。
2.1测试系统组成
测试系统由主机(PC机)、测试仪和PCB实验板组成,测试仪通过标准口(RS232)与PC机连接,通过串行标准信号电缆与PCB板上的测试存取通道相连,如图5所示。
PCB板由Xilinx公司的两块xc9572pc84芯片互连组成,芯片符合IEEE1149.1的JTAG接口标准,具有84个外部引脚、4个JTAG引脚、5个VCC引脚、6个VSS引脚、69个双向数据输入/输出引脚,xc9572系列芯片未实现异步复位信号引脚TRST,电缆不需要提供这一信号线。
该器件的边界扫描寄存器由216个边界扫描单元组成,其中9个单元是内部属性的单元,其余207个单元组成69组边界扫描单元组[5]。
2.2设计分析与实现
2.2.1设计内容与分析
在图5所示的测试系统中,要求两片IC芯片分别实现不同功能的数据处理。
为了对存储器实现分时访问,可以设定其中的一片xc9572_pc84芯片(IC2)受到另一片xc9572_pc84芯片(IC1)的控制,使IC2进入高阻模式(高阻模式是JTAG标准中推荐的任选模式之一),用以对存储器的访问屏蔽一段时间,此时受控芯片IC2的所有输出管脚都将处于浮空状态即高阻态。
从图2描述的TAP控制器的状态机可知,通过改变IC芯片自身的输入输出状态,就可以进行边界扫描测试或利用JTAG接口使IC芯片处于某个特定的功能模式。
支持JTAG标准的芯片都附有特定的BSDL(BoundaryScanDescriptionLanguage)描述文件[3]。
BSDL语言是硬件描述语言(VHDL)的一个子集。
它对该芯片的边界扫描特性进行描述,用来沟通厂商、用户与测试工具之间的联系,为自动测试图形生成工具、检测特定的电路板提供相关的信息;在BSDL文件的支持下可生成由JTAG标准定义的测试逻辑。
BSDL文件可与软件工具结合起来,用于测试生成、结果分析和故障诊断。
通过对xc9572pc84芯片的BSDL部分文件[6]的分析可知:
……
attributeINSTRUCTION_CAPTUREofxc9572_pc84:
entityis'000XXX01'&
attributeINSTRUCTION_DISABLEofxc9572_pc84:
entityis'HIGHZ'&
attributeINSTRUCTION_OPCODEofxc9572_pc84:
entityis
'BYPASS(11111111),'&
'EXTEST(00000000),'&
'IDCODE(11111110),'&
'INTEST(00000010),'&
'SAMPLE(00000001),'&
'USERCODE(11111101)';
……
通过该部分代码可得出,控制该芯片进入高阻模式需要写入指令寄存器的控制码为11111100。
此时应选择旁路寄存器将边界扫描寄存单元旁路,以使扫描数据直接传递给下一个扫描器件。
2.2.2设计实现
根据上面的分析可以得出,要使芯片从正常工作模式下受控进入JTAG高阻状态需要经过以下五个步骤:
①复位。
由于Xilinx9572_pc84芯片不具备TRST管脚,而且芯片正常工作时TMS持续为高电平,所以控制器进入复位状态需要使TMS端接收低电平信号,控制TAP控制器完成复位操作。
②进入Shift_IR状态。
由TAP控制器状态机可以看出,当持续5个TCK上升沿使TMS端接收到01100时,则进入Shift_IR状态。
③将指令码写入指令寄存器。
在Shift_IR状态,通过TDI将高阻状态指令码11111100写入指令寄存器,需要5个TCK周期,此时TMS需保持4个周期低电平。
④进入Exit1_IR状态。
在Shift_IR状态的第5个TCK的上升沿,使TMS=1,进入Exit1_IR状态。
⑤进入Update_IR状态。
在进入Exit1_IR状态后,使TMS=1,进入Update_IR状态。
此时芯片进入高阻状态。
按照上述步骤,采用数字系统中状态机的设计思想[5],用VHDL语言编写出相应的功能块,控制xc9572_pc84芯片(IC2)进入JTAG高阻状态(限于篇幅,VHDL源程序未列出),就可以进行边界扫描测试了。
将VHDL源程序经过编译、仿真后可得到如图6所示的JTAG控制时序波形图。
JTAG测试技术是一种新的测试技术,这种技术是建立在具有JTAG标准接口的芯片之上的。
由于这种芯片内置一些预先定义好的功能模式,所以可以通过边界扫描通道使芯片处于某个特定的功能模式,以提高系统控制的灵活性并便于系统设计。
本文通过设计实例,详细介绍了利用边界扫描技术控制IC芯片处于高阻模式的思路和方法,并且通过实验实现,达到了预期目标。
基于边界扫描技术的测试机制在产品全寿命周期的不同阶段都可以共享,因此利用边界扫描技术可以方便地对电路系统进行调试、测试,显著地降低了产品的开发周期和费用。
用了一些FPGA开发板后每种开发板均带有JTAG下载口,但什么是JTAG呢,于是就到网上寻找了一翻,终于找到了,现在来和大家分享一下:
JTAG(JointTestActionGroup)联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。
现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
现在,JTAG接口还常用于实现ISP(In-Systemrogrammable在线编程),对FLASH等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
JTAG接口可对PSD芯片内部的所有部件进行编程
JTAG的一些说明
通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug;一般支持JTAG的CPU内都包含了这两个模块。
一个含有JTAGDebug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,象UART,Timers,GPIO等等的寄存器。
上面说的只是JTAG接口所具备的能力,要使用这些功能,还需要软件的配合,具体实现的功能则由具体的软件决定。
例如下载程序到RAM功能。
了解SOC的都知道,要使用外接的RAM,需要参照SOCDataSheet的寄存器说明,设置RAM的基地址,总线宽度,访问速度等等。
有的SOC则还需要Remap,才能正常工作。
运行Firmware时,这些设置由Firmware的初始化程序完成。
但如果使用JTAG接口,相关的寄存器可能还处在上电值,甚至时错误值,RAM不能正常工作,所以下载必然要失败。
要正常使用,先要想办法设置RAM。
在ADW中,可以在Console窗口通过Let命令设置,在AXD中可以在Console窗口通过Set命令设置。
下面是一个设置AT91M40800的命令序列,关闭中断,设置CS0-CS3,并进行Remap,适用于AXD(ADS带的Debug)
setmem0xfffff124,0xFFFFFFFF,32---关闭所有中断
setmem0xffe00000,0x0100253d,32---设置CS0
setmem0xffe00004,0x02002021,32---设置CS1
setmem0xffe00008,0x0300253d,32---设置CS2
setmem0xffe0000C,0x0400253d,32---设置CS3
setmem0xffe00020,1,32---Remap
如果要在ADW(SDT带的DEBUG)中使用,则要改为:
let0xfffff124=0xFFFFFFFF---关闭所有中断
let0xffe00000=0x0100253d---设置CS0
let0xffe00004=0x02002021---设置CS1
let0xffe00008=0x0300253d---设置CS2
let0xffe0000C=0x0400253d---设置CS3
let0xffe00020=1---Remap
为了方便使用,可以将上述命令保存为一个文件config.ini,在Console窗口输入obconfig.ini即可执行。
使用其他debug,大体类似,只是命令和命令的格式不同。
设置RAM时,设置的寄存器以及寄存器的值必须和要运行程序的设置一致。
一般编译生成的目标文件是ELF格式,或类似的格式,包含有目标码运行地址,运行地址在Link时候确定。
Debug下载程序时根据ELF文件中的地址信息下载程序到指定的地址。
如果在把RAM的基地址设置为0x10000000,而在编译的时候指定Firmware的开始地址在0x02000000,下载的时候,目标码将被下载到0x02000000,显然下载会失败。
通过JTAG下载程序前应关闭所有中断,这一点和Firmware初始化时关闭中断的原因相同。
在使用JTAG接口的时候,各中断的使能未知,尤其是FLASH里有可执行码的情况,可能会有一些中断被使能。
使用JTAG下载完代码,要执行时,有可能因为未完成初始化就产生了中断,导致程序异常。
所以,需要先关闭中断,一般通过设置SOC的中断控制寄存器完成。
使用JTAG写Flash。
在理论上,通过JTAG可以访问CPU总线上的所