什么专业学做网站,网页设计个人简介,网站建设 腾云,巫山做网站哪家强JTAG(Joint Test Action Group#xff0c;联合测试行动组)是一种国际标准测试协议(IEEE 1149#xff0e;1兼容)。标准的JTAG接口是4线——TMS、TCK、TDI、TDO#xff0c;分别为模式选择、时钟、数据输入和数据输出线。 JTAG的主要功能有两种#xff0c;或者说JTAG主要有两大…JTAG(Joint Test Action Group联合测试行动组)是一种国际标准测试协议(IEEE 11491兼容)。标准的JTAG接口是4线——TMS、TCK、TDI、TDO分别为模式选择、时钟、数据输入和数据输出线。 JTAG的主要功能有两种或者说JTAG主要有两大 类一类用于测试芯片的电气特性检测芯片是否有问题另一类用于Debug对各类芯片以及其外围设备进行调试。一个含有JTAG Debug接口模块的CPU只要时钟正常就可以通过JTAG接口访问CPU的内部寄存器、挂在CPU总线上的设备以及内置模块的寄存器。本文主要介绍 的是Debug功能。 1 JTAG原理分析 简单地说JTAG的工作原理可以归结为在器件内部定义一个TAP(Test Access Port测试访问口)通过专用的JTAG测试工具对内部节点进行测试和调试。首先介绍一下边界扫描和TAP的基本概念和内容。 11 边界扫描 边界扫描(Boundary-Scan)技术的基本思想是在靠近芯片的输入输出引脚上增加一个移位寄存器单元也就是边界扫描寄存器(Boundary-Scan Register)。 当芯片处于调试状态时边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过边界扫描寄存器单元可以实现对芯片输入输出信号的观察和控制。对 于芯片的输入引脚可以通过与之相连的边界扫描寄存器单元把信号(数据)加载到该引脚中去对于芯片的输出引脚也可以通过与之相连的边界扫描寄存器“捕 获”该引脚上的输出信号。在正常的运行状态下边界扫描寄存器对芯片来说是透明的所以正常的运行不会受到任何影响。这样边界扫描寄存器提供了一种便捷 的方式用于观测和控制所需调试的芯片。另外芯片输入输出引脚上的边界扫描(移位)寄存器单元可以相互连接起来在芯片的周围形成一个边界扫描链 (Boundary-Scan Chain)。边界扫描链可以串行地输入和输出通过相应的时钟信号和控制信号就可以方便地观察和控制处在调试状态下的芯片。
12 测试访问口TAP TAP(Test Access Port)是一个通用的端口通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。对整个TAP的控制是通过TAP控制器(TAP Controller)来完成的。下面先分别介绍一下TAP的几个接口信号及其作用。其中前4个信号在IEEE11491标准里是强制要求的。 ◇TCK时钟信号为TAP的操作提供了一个独立的、基本的时钟信号。 ◇TMS模式选择信号用于控制TAP状态机的转换。 ◇TDI数据输入信号。 ◇TDO数据输出信号。 ◇TRST复位信号可以用来对TAP Controller进行复位(初始化)。这个信号接口在IEEE 11491标准里并不是强制要求的因为通过TMS也可以对TAP Controller进行复位。 ◇STCK时钟返回信号在IEEE 11491标准里非强制要求。 ◇DBGRQ目标板卜工作状态的控制信号。在IEEE 11491标准里没有要求只是在个别目标板(例如STR710)中会有。 简单地说PC机对目标板的调试就是通过TAP接口完成对相关数据寄存器(DR)和指令寄存器(IR)的访问。 系统上电后TAP Controller首先进入Test-LogicReset状态然后依次进入Run-TestIdle、Selcct-DR-Scan、 Select-IR-Scan、Capture-IR、Shift-IR、Exitl-IR、Update-IR状态最后回到Run- TcstIdle状态。在此过程中状态的转移都是通过TCK信号进行驱动(上升沿)通过TMS信号对TAP的状态进行选择转换的。其中在 Capture-IR状态下一个特定的逻辑序列被加载到指令寄存器中在Shift-IR状态下可以将一条特定的指令送到指令寄存器中在 Update—IR状态下刚才输入到指令寄存器中的指令将用来更新指令寄存器。最后系统又回到Run—TestIdle状态指令生效完成对指令 寄存器的访问。当系统又返回到Run—TestIdle状态后根据前面指令寄存器的内容选定所需要的数据寄存器开始执行对数据寄存器的工作。其基本 原理与指令其存器的访问完全相同依次为seIect—DR—Scan、Capture—DR、Shift—D、Exitl一DR、Update—DR 最后回到Run-TcstIdle状态。通过TDl和TDO就可以将新的数据加载到数据寄存器中。经过一个周期后就可以捕获数据寄存器中的数据完 成对与数据寄存器的每个寄存器单元相连的芯片引脚的数据更新也完成了对数据寄存器的访问。
目前市场上的JTAG接口有14引脚和20引脚两种。其中以20引脚为主流标准但也有少数的目标板采用14引脚。经过简单的信号转换后可以将它们通用。 下面通过对JD44BOX实验开发板的简易JTAG的基本原理进行分析以及对JD44BOX和STR710试验开发板主板的JTAG原理进行对比进一步阐述JTAG的工作原理。JD44BOX实验开发板的简易JTAG的原理图如图1所示。 图1中74LS244为三态输出的8组缓冲器和总线驱动器其功能如表l所列。 由表1可知在JD4480X实验板的调试过程中这款简易JTAG的主要作用就是将PC机发出的电信号与实验板的电信号进行匹配以实现驱动目标板的功能。 STR710和JD44BOX主板的JTAG原理图如图2和图3所示。 通过图2和图3的对比可以发现虽然所用的仿真器有很大的差别但是实际上忽略一些上下拉电阻以及保护电容(这些电阻、电容对于电路功能没有意义) 它们的基本原理图是十分相似的唯一的差别就在于对RTCK信号(用于测试时钟返回)和DBGRQ信号(用于设置目标板工作状态)的处理。实际上在 IEEE11491标准中这两个信号都不是强制要求的。因此在分析仿真器(JTAG)的工作原理时完全可以忽略这两个信号的情况而仅对IFEE 11491标准中强制要求的4个信号进行分析。 2 仿真器与简易JTAG的性能对比 21 仿真器硬件连接 PC机配置166 GHz256 MB内存。 调试软件ADS12。 目标板JD44BOX。 完成任务文件的下载。 硬件连接如图4所示。通过主机的并口与仿真器相连接再将仿真器与目标板的JTAG调试接口连接。 22 性能对比 如表2所列虽然通过不同的调试代理所需的下载时间有所不同但是两种仿真器所存在的性能差异仍然很明显。在选用简易JTAG下载文件的过程中效率最 高的调试代理所需的时间仍将近是仿真器的6倍这就是仿真器的优势所在。性能的提高必然要付出更多的代价对开发者来说这个代价就是成本。经过市场的考 察仿真器的价格一般在千兀左右而简易JTAG的价格一般在百元左右也就是存在将近10倍的差别。另外还需要考虑的就是其兼容性。兼容性包括与H标 板的兼容和与调试代理的兼容。在与目标板的兼容方面后面的内容中会有详细说明在与调试代理的兼容方面也有所反映。简易JTAG能够与多个调试代理兼 容而仿真器只能使用其自带的调试代理具有一定的局限性。 2.3 原因分析 既然所有JTAG的基本原理都是一样的为什么这两种仿真器的速度会存在如此大的差异而且并不是所有的仿真器都是通用的呢? 首先介绍一下ARM7扫描链架构如图5所示。 与简易JTAG比较在扫描过程中STR710的仿真器为ARM7TDMI添加了一个专门的指针通道以及相应的存储空间store- multiple(STM)。因此在调试状态下仿真器不再利用系统除了边界扣描寄存器外的任何其他资源而是通过JTAG-style接口直接获取系统 的状态信息对系统状态进行观测以及调试进而大大提高调试速度。 在STR7lO目标板中ARM7TDMI可以通过外部信号和内部电 路模块(ICE)进入调试状态。当目标板一旦进入调试状态后内核就将其与存储器分离开来这样内核就可以保证在不影响系统正常运作的状态下对系统的状况 进行监测和调试。同时ARM7TDMI内部状态的检测是通过JTAG-style接口进行的这个接口允许指令不通过数据线直接进入到内核的扫描通道。 这样在调试状态下STM就可以直接嵌入到指令通道并存储ARM7TDMI寄存器的内容在不影响系统工作的情况下将这些内容移位出来使仿真器获得目标 板的状态信息。 与仿真器比较简易JTAG完成的工作就要少得多。它只是完成了对主机信号的电平转换也就是相当于一个驱动器。上面提 到的所有工作都要交给CPU去做因此在使用简易JTAG下载文件时目标板自然会相应地降低速度。尤其是当程序相对较大时其速度就会大大降低对于一些 开发人员来讲这是相当致命的缺点。 关于仿真器与目标板的兼容问题现在市场上的部分仿真器出现不同程度的不兼容问题其产生的主要原 因是对RTCK信号(DBGRQ信号极不常见这里不作介绍)的处理情况存在一些差异(不包括周立功系列的实验开发板它们的仿真器使用的足单片机与大 多数的仿真器都不能兼容)。例如在STR710中是将STCK信号与TCK信号直接相连了而在nano2410A实验开发板中是将STCK信号直接接 地因此造成了ARM JTAG Emulator在nano2410A实验开发板中的不兼容。在对nano2410A主板的JTAG进行了小小的改动后就完成了仿真器兼容性的扩展。 备注①JD4480X为北京交通大学自控室实验开发板STR710为北京微芯力科技有限公司实验开发板②实验数据为秒表所测。 JTAG接口解读 JTAG接口解读 通常所说的JTAG大致分两类一类用于测试芯片的电气特性检测芯片是否有问题一类用于Debug一般支持JTAG的CPU内都包含了这两个模块。 一个含有JTAG Debug接口模块的CPU只要时钟正常就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备如FLASHRAMSOC比 如4510B44BoxAT91M系列内置模块的寄存器象UARTTimersGPIO等等的寄存器。 上面说的只是JTAG接口所具备的能力要使用这些功能还需要软件的配合具体实现的功能则由具体的软件决定。 例如下载程序到RAM功能。了解SOC的都知道要使用外接的RAM需要参照SOC DataSheet的寄存器说明设置RAM的基地址总线宽度访问速度等等。有的SOC则还需要Remap才能正常工作。运行Firmware时 这些设置由Firmware的初始化程序完成。但如果使用JTAG接口相关的寄存器可能还处在上电值甚至时错误值RAM不能正常工作所以下载必然 要失败。要正常使用先要想办法设置RAM。在ADW中可以在Console窗口通过Let 命令设置在AXD中可以在Console窗口通过Set命令设置。 下面是一个设置AT91M40800的命令序列关闭中断设置CS0-CS3, 并进行Remap适用于AXD(ADS带的Debug) setmem 0xfffff124,0xFFFFFFFF,32 关闭所有中断 setmem 0xffe00000,0x0100253d,32 设置CS0 setmem 0xffe00004,0x02002021,32 设置CS1 setmem 0xffe00008,0x0300253d,32 设置CS2 setmem 0xffe0000C,0x0400253d,32 设置CS3 setmem 0xffe00020,1,32 Remap 如果要在ADWSDT带的DEBUG中使用则要改为 let 0xfffff1240xFFFFFFFF 关闭所有中断 let 0xffe000000x0100253d 设置CS0 let 0xffe000040x02002021 设置CS1 let 0xffe000080x0300253d 设置CS2 let 0xffe0000C0x0400253d 设置CS3 let 0xffe000201 Remap 为了方便使用可以将上述命令保存为一个文件config.ini, 在Console窗口输入 ob config.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功能但使用也非 常麻烦。AXDADW都不提供写FLASH功能。我写Flash的方法时是自己写一个简单的程序专门用于写目标板的FLASH利用JTAG接口 下载到目标板再把要烧写的目标码装成BIN格式也下到目标板地址和烧FLASH的程序的地址不同然后运行已经下载的烧FLASH的程序。使用这 种方式比起FlashPGM的写Flash速度似乎要快一些。