JTAG文档格式.docx
- 文档编号:18121527
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:11
- 大小:193.15KB
JTAG文档格式.docx
《JTAG文档格式.docx》由会员分享,可在线阅读,更多相关《JTAG文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
这样,边界扫描寄存器提供了一种便捷的方式用于观测和控制所需调试的芯片。
另外,芯片输入/输出引脚上的边界扫描(移位)寄存器单元可以相互连接起来,任芯片的周围形成一个边界扫描链(Boundary-ScanChain)。
边界扫描链可以串行地输入和输出,通过相应的时钟信号和控制信号,就可以方便地观察和控制处在调试状态下的芯片。
1.2测试访问口TAP
TAP(TestAccessPort)是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。
对整个TAP的控制是通过TAP控制器(TAPController)来完成的。
下面先分别介绍一下TAP的几个接口信号及其作用。
其中,前4个信号在IEEE1149.1标准里是强制要求的。
◇TCK:
时钟信号,为TAP的操作提供了一个独立的、基本的时钟信号。
◇TMS:
模式选择信号,用于控制TAP状态机的转换。
◇TDI:
数据输入信号。
◇TDO:
数据输出信号。
◇TRST:
复位信号,可以用来对TAPController进行复位(初始化)。
这个信号接口在IEEE1149.1标准里并不是强制要求的,因为通过TMS也可以对TAPController进行复位。
◇STCK:
时钟返回信号,在IEEE1149.1标准里非强制要求。
◇DBGRQ:
目标板上工作状态的控制信号。
在IEEE1149.1标准里没有要求,只是在个别目标板(例如STR710)中会有。
简单地说,PC机对目标板的调试就是通过TAP接口完成对相关数据寄存器(DR)和指令寄存器(IR)的访问。
系统上电后,TAPController首先进入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引脚。
经过简单的信号转换后,可以将它们通用。
下面通过对JD44B0X实验开发板的简易JTAG的基本原理进行分析,以及对JD44B0X和STR710试验开发板主板的JTAG原理进行对比,进一步阐述JTAG的工作原理。
JD44B0X实验开发板的简易JTAG的原理图如图1所示。
图1中,74LS244为三态输出的8组缓冲器和总线驱动器,其功能如表1所列。
由表1可知,在JD44B0X实验板的调试过程中,这款简易JTAG的主要作用就是将PC机发出的电信号与实验板的电信号进行匹配,以实现驱动目标板的功能。
STR710和JD44B0X主板的JTAG原理图如图2和图3所示。
通过图2和图3的对比可以发现,虽然所用的仿真器有很大的差别,但是,实际上忽略一些上下拉电阻以及保护电容(这些电阻、电容对于电路功能没有意义),它们的基本原理图是十分相似的,唯一的差别就在于对RTCK信号(用于测试时钟返回)和DBGRQ信号(用于设置目标板工作状态)的处理。
实际上,在IEEE1149.1标准中这两个信号都不是强制要求的。
因此,在分析仿真器(JTAG)的工作原理时完全可以忽略这两个信号的情况,而仅对IEEE1149.1标准中强制要求的4个信号进行分析。
2仿真器与简易JTAG的性能对比
2.1仿真器硬件连接
PC机配置:
1.66GHz,256MB内仔。
调试软件:
ADS1.2。
目标板:
JD44B0X。
完成任务:
文件的下载。
硬件连接如图4所示。
通过主机的并口与仿真器相连接,再将仿真器与目标板的JTAG调试接口连接。
2.2性能对比
如表2所列,虽然通过不同的调试代理所需的下载时间有所不同,但是两种仿真器所存在的性能差异仍然很明显。
在选刚简易JTAG下载文件的过程中,效率最高的调试代理所需的时间仍将近是仿真器的6倍,这就是仿真器的优势所在。
性能的提高必然要付出更多的代价,对开发者来说这个代价就是成本。
经过市场的考察,仿真器的价格一般在千元左右,而简易JTAG的价格一般在百元左右,也就是存在将近10倍的差别。
另外,还需要考虑的就是其兼容性。
兼容性包括与目标板的兼容和与调试代理的兼容。
在与目标板的兼容方面,后面的内容中会有详细说明;
在与调试代理的兼容方面也有所反映。
简易JTAG能够与多个调试代理兼容,而仿真器只能使用其自带的调试代理,具有一定的局限性。
2.3原因分析
既然所有JTAG的基奉原理都是一样的,为什么这两种仿真器的速度会存在如此大的差异,而且并不是所有的仿真器都是通用的呢?
首先介绍一下ARM7扫描链架构,如图5所示。
与简易JTAG比较,在扫描过程中,STR710的仿真器为ARM7TDMI添加了一个专门的指针通道以及相应的存储空间store-multiple(STM)。
因此在调试状态下,仿真器不再利用系统除了边界扫描寄存器外的任何其他资源,而是通过JTAG-style接口直接获取系统的状态信息,对系统状态进行观测以及调试,进而大大提高调试速度。
在STR710目标板中,ARM7TDMI可以通过外部信号和内部电路模块(ICE)进入调试状态。
当目标板一旦进入调试状态后,内核就将其与存储器分离开来,这样内核就可以保证在不影响系统正常运作的状态下对系统的状况进行监测和调试。
同时,ARM7TDMI内部状态的检测是通过JTAG-style接口进行的,这个接口允许指令不通过数据线直接进入到内核的扫描通道。
这样在调试状态下,STM就可以直接嵌入到指令通道并存储ARM7TDMI寄存器的内容,在不影响系统工作的情况下将这些内容移位出来,使仿真器获得目标板的状态信息。
与仿真器比较,简易JTAG完成的工作就要少得多。
它只是完成了对主机信号的电平转换,也就是相当于一个驱动器。
上面提到的所有工作都要交给CPU去做,因此在使用简易JTAG下载文件时目标板自然会相应地降低速度。
尤其是当程序相对较大时,其速度就会大大降低,对于一些开发人员来讲,这是相当致命的缺点。
关于仿真器与日标板的兼容问题,现在市场上的部分仿真器出现不同程度的不兼容问题,其产生的主要原因是对RTCK信号(DBGRQ信号极不常见,这里不作介绍)的处理情况存在一些差异(不包括周立功系列的实验开发板,它们的仿真器使用的是单片机,与大多数的仿真器都不能兼容)。
例如,在STR710中是将STCK信号与TCK信号直接相连了,而在nano2410A实验开发板中是将STCK信号直接接地,因此造成了ARMJTAGEmulator在nano2410A实验开发板中的不兼容。
在对nano2410A主板的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也是一种国际标准测试协议(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(测试重置)是可选项。
在PCB上可串行互连多个可兼容扫描功能的IC,形成一个或多个扫描链,每一个链都由其自己的TAP。
每一个扫描链提供电气访问,从串行TAP接口到作为链的一部分的每一个IC上的每一个引线。
在正常的操作过程中,IC执行其预定功能,就好像边界扫描电路不存在。
但是,当为了进行测试或在系统编程而激活设备的扫描逻辑时,数据可以传送到IC中,并且使用串行接口从IC中读取出来。
这样数据可以用来激活设备核心,将信号从设备引线发送到PCB上,读出PCB的输入引线并读出设备输出。
简单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,速度似乎要快一些。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JTAG