JTAG.docx
- 文档编号:18088790
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:41
- 大小:477.11KB
JTAG.docx
《JTAG.docx》由会员分享,可在线阅读,更多相关《JTAG.docx(41页珍藏版)》请在冰点文库上搜索。
JTAG
JTAG
百科名片
JTAG接口功能引脚图
JTAG是英文“JointTestActionGroup(联合测试行为组织)”的词头字母的简写,该组织成立于1985年,是由几家主要的电子制造商发起制订的PCB和IC测试标准。
JTAG建议于1990年被IEEE批准为IEEE1149.1-1990测试访问端口和边界扫描结构标准。
该标准规定了进行边界扫描所需要的硬件和软件。
自从1990年批准后,IEEE分别于1993年和1995年对该标准作了补充,形成了现在使用的IEEE1149.1a-1993和IEEE1149.1b-1994。
JTAG主要应用于:
电路的边界扫描测试和可编程芯片的在线系统编程。
国际标准测试协议
边界扫描技术
简单JTAG电缆
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是一种所谓的边界扫描技术。
边扫描测试是在20世纪80年代中期作为解决PCB物理访问问题的JTAG接口发展起来的,这样的问题是新的封装技术导致电路板装配日益拥挤所产生的。
边界扫描在芯片级层次上嵌入测试电路,以形成全面的电路板级测试协议。
利用边界扫描--自1990年以来的行业标准IEEE1149.1--您甚至能够对最复杂的装配进行测试、调试和在系统设备编程,并且诊断出硬件问题。
边界扫描的优点:
通过提供对扫描链的IO的访问,可以消除或极大地减少对电路板上物理测试点的需要,这就会显著节约成本,因为电路板布局更简单、测试夹具更廉价、电路中的测试系统耗时更少、标准接口的使用增加、上市时间更快。
除了可以进行电路板测试之外,边界扫描允许在PCB贴片之后,在电路板上对几乎所有类型的CPLD和闪存进行编程,无论尺寸或封装类型如何。
在系统编程可通过降低设备处理、简化库存管理和在电路板生产线上集成编程步骤来节约成本并提高产量。
边界扫描原理:
IEEE1149.1标准规定了一个四线串行接口(第五条线是可选的),该接口称作测试访问端口(TAP),用于访问复杂的集成电路(IC),例如微处理器、DSP、ASIC和CPLD。
除了TAP之外,混合IC也包含移位寄存器和状态机,以执行边界扫描功能。
在TDI(测试数据输入)引线上输入到芯片中的数据存储在指令寄存器中或一个数据寄存器中。
串行数据从TDO(测试数据输出)引线上离开芯片。
边界扫描逻辑由TCK(测试时钟)上的信号计时,而且TMS(测试模式选择)信号驱动TAP控制器的状态。
TRST(测试重置)是可选项。
根据相关数据手册中的说明,TRST、TDI、TMS、TCK引脚上需要接一个10KΩ的上拉电阻。
在PCB上可串行互连多个可兼容扫描功能的IC,形成一个或多个扫描链,每一个链都由其自己的TAP。
每一个扫描链提供电气访问,从串行TAP接口到作为链的一部分的每一个IC上的每一个引线。
在正常的操作过程中,IC执行其预定功能,就好像边界扫描电路不存在。
但是,当为了进行测试或在系统编程而激活设备的扫描逻辑时,数据可以传送到IC中,并且使用串行接口从IC中读取出来。
这样数据可以用来激活设备核心,将信号从设备引线发送到PCB上,读出PCB的输入引线并读出设备输出。
在嵌入式系统设计中,一些高档的微处理器都带有JTAG接口,方便多目标系统进行测试,同时还可以实现flash编程。
编辑本段
简单JTAG电缆
关于简单JTAG电缆
目前有各种各样简单JTAG电缆,其实只是一个电平转换电路,同时还起到保护作用。
JTAG的逻辑则由运行在PC上的软件实现,所以在理论上,任何一个简单JTAG电缆,都可以支持各种应用软件,如Debug等。
可以使用同一个JTAG电缆写XilinxCPLD,AXD/ADW调试程序。
关键再于软件的支持,大多数软件都不提供设定功能,因而只能支持某种JTAG电缆。
关于简单JTAG电缆的速度
JTAG是串行接口,使用打印口的简单JTAG电缆,利用的是打印口的输出带锁存的特点,使用软件通过I/O产生JTAG时序。
由JTAG标准决定,通过JTAG写/读一个字节要一系列的操作,根据我的分析,使用简单JTAG电缆,利用打印口,通过JTAG输出一个字节到目标板,平均需要43个打印口I/O,在我机器上(P41.7G),每秒大约可进行660K次I/O操作,所以下载速度大约在660K/43,约等于15KByte/S.对于其他机器,I/O速度大致相同,一般在600K~800K.
关于如何提高JTAG下载速度。
很明显,使用简单JTAG电缆无法提高速度。
要提高速度,大致有两种办法,
1。
使用嵌入式系统提供JTAG接口,嵌入式系统和微机之间通过USB/Ethernet相连,这要求使用MCU。
2。
使用CPLD/FPGA提供JTAG接口,CPLD/FPGA和微机之间使用EPP接口(一般微机打印口都支持EPP模式),EPP接口完成微机和CPLD/FPGA之间的数据传输,CPLD/FPGA完成JTAG时序。
这两种方法本人都实现过。
第一个方法可以达到比较高的速度,实测超过了200KByte/S(注意:
是Byte,不是Bit);但是相对来说,硬件复杂,制造相对复杂。
第二种相对来说,下载速度要慢一些,最快时达到96KByte/S,但电路简单,制造方便,而且速度可以满足需要。
第二种方案还有一个缺点,由于进行I/O操作时,CPU不会被释放,因此在下载程序时,微机CPU显得很繁忙。
总的来说,本人认为,对于个人爱好者来说,第二种方法更可取。
编辑本段
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命令设置。
下面是一个设置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总线上的所有设备,所以应该可以写FLASH,但是FLASH写入方式和RAM大不相同,需要特殊的命令,而且不同的FLASH擦除,编程命令不同,而且块的大小,数量也不同,很难提供这一项功能。
所以一般Debug不提供写Flash功能,或者仅支持少量几种Flash。
目前就我知道的,针对ARM,只有FlashPGM这个软件提供写FLASH功能,但使用也非常麻烦。
AXD,ADW都不提供写FLASH功能。
我写Flash的方法时是,自己写一个简单的程序,专门用于写目标板的FLASH,利用JTAG接口,下载到目标板,再把要烧写的目标码装成BIN格式,也下到目标板(地址和烧FLASH的程序的地址不同),然后运行已经下载的烧FLASH的程序。
使用这种方式,比起FlashPGM的写Flash,速度似乎要快一些。
JTAG接口
JTAG接口
基本信息
JTAG的一些说明
JTAG接口定义
1.14针JTAG接口定义引脚名称描述
2.20针JTAG接口定义引脚名称描述
JTAG接口
基本信息
JTAG的一些说明
JTAG接口定义
1.14针JTAG接口定义引脚名称描述
2.20针JTAG接口定义引脚名称描述
展开
编辑本段
JTAG接口
1JTAG(JointTestActionGroup;联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。
现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
JTAG最初是用来对芯片进行测试的,JTAG的基本原理是在器件内部定义一个TAP(TestAccessPort;测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
现在,JTAG接口还常用于实现ISP(In-SystemProgrammable在线编程),对FLASH等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
JTAG接口可对PSD芯片内部的所有部件进行编程
具有JTAG口的芯片都有如下JTAG引脚定义:
TCK——测试时钟输入;
TDI——测试数据输入,数据通过TDI输入JTAG口;
TDO——测试数据输出,数据通过TDO从JTAG口输出;
TMS——测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式。
可选引脚TRST——测试复位,输入引脚,低电平有效。
含有JTAG口的芯片种类较多,如CPU、DSP、CPLD等。
JTAG内部有一个状态机,称为TAP控制器。
TAP控制器的状态机通过TCK和TMS进行状态的改变,实现数据和指令的输入。
图1为TAP控制器的状态机框图。
2JTAG芯片的边界扫描寄存器
JTAG标准定义了一个串行的移位寄存器。
寄存器的每一个单元分配给IC芯片的相应引脚,每一个独立的单元称为BSC(Boundary-ScanCell)边界扫描单元。
这个串联的BSC在IC内部构成JTAG回路,所有的BSR(Boundary-ScanRegister)边界扫描寄存器通过JTAG测试激活,平时这些引脚保持正常的IC功能。
图2为具有JTAG口的IC内部BSR单元与引脚的关系。
3JTAG在线写Flash的硬件电路设计和与PC的连接方式
以含JTAG接口的StrongARMSA1110为例,Flash为Intel28F128J3216MB容量。
SA1110的JTAG的TCK、TDI、TMS、TDO分别接PC并口的2、3、4、11线上,通过程序将对JTAG口的控制指令和目标代码从PC的并口写入JTAG的BSR中。
在设计PCB时,必须将SA1110的数据线和地址线及控制线与Flash的地线线、数据线和控制线相连。
因SA1110的数据线、地址线及控制线的引脚上都有其相应BSC,只要用JTAG指令将数据、地址及控制信号送到其BSC中,就可通过BSC对应的引脚将信号送给Flash,实现对Flash的操作。
JTAG的系统板设计和连线关系如图3所示。
4通过使用TAP状态机的指令实行对Flash的操作
通过TCK、TMS的设置,可将JTAG设置为接收指令或数据状态。
JTAG常用指令如下:
SAMPLE/PRELOAD——用此指令采样BSC内容或将数据写入BSC单元;
EXTEST——当执行此指令时,BSC的内容通过引脚送到其连接的相应芯片的引脚,我们就是通过这种指令实现在线写Flash的;
BYPASS——此指令将一个一位寄存器轩于BSC的移位回路中,即仅有一个一位寄存器处于TDI和TDO之间。
在PCB电路设计好后,即可用程序先将对JTAG的控制指令,通过TDI送入JTAG控制器的指令寄存器中。
再通过TDI将要写Flash的地址、数据及控制线信号入BSR中,并将数据锁存到BSC中,用EXTEST指令通过BSC将写入Flash。
5软件编程
在线写Flash的程序用TurboC编写。
程序使用PC的并行口,将程序通过含有JTAG的芯片写入Flash芯片。
程序先对PC的并口初始化,对JTAG口复位和测试,并读Flash,判断是否加锁。
如加锁,必须先解锁,方可进行操作。
写Flash之前,必须对其先擦除。
将JTAG芯片设置在EXTEST模式,通过PC的并口,将目标文件通过JTAG写入Flash,并在烧写完成后进行校验。
程序主流程如图4所示。
通过JTAG的读芯片ID子程序如下:
voidid_command(void){
putp(1,0,IP);//Run-Test/Idle;使JTAG复位
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,1,IP);
putp(1,1,IP);//选择指令寄存器
putp(1,0,IP);//捕获指令寄存器
putp(1,0,IP);/移位指令寄存器
putp(0,0,IP);//SA1110JTAG口指令长度5位,IDCODE为01100
putp(1,0,IP);
putp(1,0,IP);
putp(0,0,IP);
putp(0,0,IP);
putp(0,1,IP);//退出指令寄存器
putp(1,1,IP);//更新指令寄存器,执行指令寄存器中的指令
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
putp(1,1,IP);
putp(1,0,IP);
if(check_id(SA1110ID))
error_out("failedtoreaddeviceIDfortheSA-1110");
putp(1,1,IP);//退出数据寄存器
putp(1,1,IP);//更新数据寄存器
putp(1,0,IP);//Run-Test/Idle,使JTAG复位
putp(1,0,IP);//Run-Test/Idle
putp(1,0,IP);//Run-Test/Idle
}
6电路设计和编程中的注意事项
①Flash芯片的WE、CE、OE等控制线必须与SA1110的BSR相连。
只有这样,才能通过BSR控制Flash的相应引脚。
②JTAG口与PC并口的连接线要尽量短,原则上不大于15cm。
③Flash在擦写和编程时所需的工作电流较大,在选用系统的供电芯片时,必须加以考虑。
④为提高对Flash的编程速度,尽量使TCK不低于6MHz,可编写烧写Flash程序时实现。
编辑本段
基本信息
JTAG(JointTestActionGroup)联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。
现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
现在,JTAG接口还常用于实现ISP(In-SystemProgrammable在线编程),对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命令设置。
编辑本段
JTAG接口定义
JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(TestAccessPort,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。
目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为测试模式选择
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JTAG