当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]一种嵌入式系统实现的JTAG调试器

 JTAG 作为一个通用的标准器件功能测试接口, 具有灵活高效、易于实现等优点, 是微控制器、微处理器、DSP、SoC 等器件的重要外部接口。它不但可以用来测试内部功能模块状态, 而且可以实现在线调试(ICE)功能。arm系列处理器正是通过JTAG 接口使用内部集成的ICE 功能, 并采用这种方式实现在线调试。此外CPLD、FPGA 等器件大多都可以使用JTAG 接口实现在线编程或下载。因此,JTAG 接口已经成为复杂芯片系统的必备接口, 在芯片测试、调试及实现其他特殊功能方面发挥着重要作用。

    基本原理

    JTAG 标准即IEEE 1149.1 标准。联合测试行动组JTAG(Joint Test Action Group )起草了边界扫描测试BST(Boundary Scan Testing)规范, 该标准为数字集成电路规定了一个测试访问口(TAP)和边界扫描结构,解决了由于数字电路高度集成化带来的一些测试难题。它还提供了一种访问和控制芯片内部仿真(ICE) 模块的方法, ICE 模块一般包括内部扫描和自测试的功能, 可以很好地支持集成电路的开发。

    JTAG标准工作原理

    边界扫描技术的基本思想是在靠近芯片的输入输出管脚增加一个移位寄存器单元。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。另外, 靠近芯片输入输出管脚的边界扫描(移位) 寄存器单元可以相互连接起来,在芯片的周围形成一个边界扫描链(Boundary- Scan Chain) .一般的芯片都会提供几条独立的边界扫描链, 用来实现完整的测试功能。

    在JTAG标准中, 寄存器被分为两大类: 数据寄存器(DR- Data Register)和指令寄存器(IR- Instruction Register),边界扫描链寄存器即为一种很重要的数据寄存器,边界扫描链可用来观察和控制芯片的输入输出。指令寄存器用来实现对数据寄存器的控制。TAP 是一个通用的端口, 通过TAP 可以访问芯片提供的所有数据寄存器和指令寄存器, 对整个TAP的控制是通过TAP控制器完成的。TAP包括5个信号接口: (1)TCK(Test Clock), 为TAP操作提供了一个独立的基本的时钟信号。(2)TMS(Test-Mode Selector) ,用来控制TAP状态机的转换。(3)TDI(TestData Input), 是JTAG指令和数据的串行输入端。在TCK的上升沿被采样,结果送到JTAG寄存器中。(4)TDO(Test Data Output),是JTAG指令和数据的串行输出端。在TCK的下降沿被输出到TDO.(5)TRST, 是JTAG电路的复位输入信号, 低电平有效。

    通过TAP控制器的状态转移即可实现对数据寄存器和指令寄存器的访问, 从而实现对JTAG测试电路的控制。TAP控制器共有16 种状态。通过测试模式选择TMS 和时钟TCK可控制状态的转移。

    指令寄存器允许特定的指令被装载到指令寄存器当中, 用来选择需要执行的测试,或者选择需要访问的测试数据寄存器。每个支持JTAG调试的芯片必须包含一个指令寄存器。JTAG标准要求芯片支持的基本指令有:EXTEST、 INTEST、SAMPLE/PRELOAD、BYPASS、HIGHZ等。

    arm7TDMI调试原理

    从功能上看, arm7TDMI 处理器主要包括三大部分:

    (1)arm CPU Main Processor Logic , 包括了对调试的硬件支持; (2)嵌入式ICE- RT Logic , 包括了一组寄存器和比较器, 用来产生调试异常、设置断点和观察点; (3)TAP控制器, 它通过JTAG接口控制和操作扫描链。[!--empirenews.page--]

    ARM7TDMI 提供了4 条扫描链, 分别是扫描链0、1、2 和3.通过扫描链0可以访问arm7TDMI内核的外围电路,包括数据总线。该扫描链长度为113位, 具体包括数据总线的0 ̄31位、内核控制信号、地址总线的0 ̄31 位、嵌入式ICE -RT的控制信号等。扫描链1是扫描链0的子集, 长度为33位,具体包括数据总线的0 ̄31位和BREAKPT信号,扫描链1比扫描链0的长度短了很多,通过扫描链1可以更快地将指令或数据插入到ARM7TDMI的内部。扫描链2长度为38位, 该扫描链专门用来访问嵌入式ICE-RT内部的寄存器, 通过访问嵌入式ICERT的内部寄存器,可以让ARM7TDMI进入调试状态、设置断点、设置观察点。通过扫描链3, arm7TDMI可以访问外部的边界扫描链, 该扫描链用得很少。

    ARM7TDMI 的调试状态和正常运行状态是有区别的。在正常运行状态下, ARM7TDMI 由MCLK( MemoryClock)驱动, 正常运行。在调试状态下, ARM7TDMI的正常运行被打断,并且和系统的其他部分隔离开来。可以通过扫描链插入特定的ARM/THUMB指令来读写ARM7TDMI的内部寄存器和修改内存的内容。在完成需要的操作后,可以用RESTART JTAG 指令让arm7TDMI返回到正常运行状态,恢复原来的运行。

    JTAG调试器嵌入式系统实现

    JTAG调试器硬件是以基于ARM7芯片的嵌入式系统实现的。该系统以带以太网接口的arm芯片S3C4510B为核心处理器, 以μClinux为嵌入式操作系统。JTAG调试器软件主要包括两部分: JTAG调试器与目标机的接口模块和与调试主机的接口模块。

    嵌入式系统设计

    设计并制作标准的S3C4510B应用系统, 主要配置为2MBFLASH、16MBSDRAM、10/100Mbps 自适应以太网口、终端接口、并行I/O 接口等。利用S3C4510B 的通用I/O口中的P[4]、P[5]、P[6]、P[8]分别模拟JTAG标准中TAP的4个信号接口, 即TCK、TMS、TDI、TDO.

    从软件上看, 需要将μClinux 操作系统移植到设计制作的基于S3C4510B的JTAG调试器硬件平台上,以便开发基于网络的调试器软件。μCLinux是为没有内存管理单元(MMU)的处理器设计的一种嵌入式操作系统,它继承了桌面Linux的强大网络功能,其内核采用模块化的组织结构,通过增减内核模块的方式来增减系统的功能。

    通常,在PC机上通过并口模拟JTAG时序,也可以按照标准仿真器设计JTAG调试器。与上述方案不同,本设计采用开放源代码软件设计JTAG调试器应用软件,主要参考了Open- JTAG小组开发的通过PC机并口实现JTAG操作的软件jtager - 1.0.0,将其中对PC 机并口的操作改为对S3C4510B口线的操作,通过设置S3C4510B的通用I/O口模式寄存器IOPMOD 的值可将P[4]、P[5]、P[6]设置为输出模式,将P[8]设置为输入模式,然后通过编程设置I/O口数据寄存器IOPDATA的值,控制P [4]、P[5]、P[6]、P[8]的状态实现JTAG标准要求的时序。随后,根据arm7TDMI调试特性,修改操作代码,增加通过网络的远程调试功能。

    arm7TDMI的JTAG指令实现

    ARM7TDMI 的指令寄存器长度是4位, 通过TAP和JTAG接口, 可以把指令装载到指令寄存器中。在CAPTURE-IR状态下, 固定值B0001总是被装载到指令寄存器中。在SHIFT- IR状态下, 可以把arm7TDMI支持的新指令从TDI串行输入,同时固定值B0001会从TDO 串行输出。通过输出的这个固定值,可以判断当前的操作是否正确。在UPDATE- IR状态下, 新输入的指令被装载到指令寄存器中。在回到RUN- TEST/IDLE状态后,新指令立即生效。

    IDCODE和SCAN_N是ARM7TDMI调试中经常用到的JTAG命令。IDCODE命令的二进制代码是1110.IDCODE命令将Device Identification Code寄存器连接到TDI和TDO之间。Device Identification Code寄存器的长度是32 位,通过TAP可以读到ARM7TDMI的ID.SCAN_N命令的二进制代码是0010.arm7TDMI 提供了4 条扫描链,通过SCAN_N指令可以选择需要访问的扫描链。选择扫描链的过程是:先把SCAN_N指令装载到指令寄存器中,该指令会将长度为4位的扫描链选择寄存器连接到TDI和TDO之间;通过TAP状态的转移便可使选择的扫描链连接到TDI和TDO之间。

    另外BYPASS、INTEST、RESTART等JTAG指令的实现方法与上面两条指令的实现方法类似。

    嵌入式ICE- RT逻辑实现

    嵌入式ICE- RT是arm处理器内部集成的在线仿真功能模块,通过JTAG调试接口与外界交互,其中包含的常用寄存器。

    要访问嵌入式ICE- RT内部的寄存器,可通过扫描链2对Debug Control Register进行访问。实现过程:通过TAP将SCAN_N指令写入JTAG指令寄存器中,通过TDI将数值2写到扫描链选择寄存器中,即选择了扫描链2,在通过扫描链2访问任何嵌入式ICE- RT内部寄存器之前,还需要用INTEST指令将当前通过SCAN_N指令选择的扫描链置为内部测试状态。写入INTEST指令的过程和写入SCAN_N 指令的过程类似。接下来就可以通过扫描链2访问嵌入式ICE- RT内部寄存器,实现对arm7TDMI的基本调试功能。[!--empirenews.page--]

    arm7TDMI寄存器和内存访问的实现

    边界扫描链分布在ARM7TDMI的32位数据总线的周围, arm7TDMI每次取指令或者进行数据存储时都要通过32位数据总线进行。这样, 通过边界扫描链1, 就可以插入新指令或者新数据, 同时也可以捕获出现在数据总线上的数据。通过这种方式, 可以检查和修改arm7TDMI的通用寄存器和系统内存。

    以读取寄存器R0 的值为例, 介绍边界扫描链1 的操作过程。

    读取寄存器R0的值可以用指令STR R0, [R0] ( 机器码为0xE5800000) 来实现。该指令可将寄存器R0 的值存储到内存单元R0中去。因为在ARM7TDMI处于调试状态时, ARM7TDMI和外部是隔离开的, 所以该指令实际上不能访问内存单元,也不会对内存单元产生任何影响。使用指令STR R0, [R0]可使得寄存器R0的值出现在数据总线上, 这样就可以通过扫描链1将其捕获,然后从TDO输出。指令STR R0, [R0]的执行需要两个指令执行周期。在第一个指令执行周期, 执行地址计算; 在第二个指令执行周期,将寄存器R0的值放到数据总线上去。对arm寄存器写操作及访问内存的方法与此类似,都是通过扫描链1, 只是所使用的指令不同而已。

    网络编程

    通过网络编程, 可以对目标系统实现远程调试。网络通信通过μClinux下的socket编程实现,首先PC(调试主机)通过网络向仿真器发送命令, 仿真器通过统一的程序接口分析调试命令, 并将调试命令转换成JTAG标准所要求的时序,通过I/O口线发送到目标板; 然后目标板执行命令,并将命令执行后得到的调试信息返回给仿真器, 接着仿真器将调试信息通过网络发送给PC,这样用户在PC上便得到了调试信息。

    JTAG调试器测试及部分执行结果

    本设计最终完成了一种在Linux终端下操作的JTAG调试器。调试器上电后便在μClinux 下自动运行调试器客户端程序, 同时在PC的Cygwin环境下运行JTAG调试器服务器端程序jtager , 建立网络连接。然后在Cygwin下键入用户调试命令, 执行下列操作: (1)写目标板上的CPU状态;(2)读写编址在统一内存空间的外部设备寄存器; (3)读写目标机上的RAM; (4)读写目标机上的固态存储设备, 如Flash;(5)对嵌入式ICE- RT进行调试。

    设计实现的调试器的用户命令较多, 下面仅列出两条典型命令IDCODE 和REG 执行后的结果。

    执行IDCODE命令后, 读出了一个基于S3C4510B的目标开发板内的CPUID号, 从而得到Device ID=0x1F0F0F0F.通过逻辑分析仪分析几个JTAG接口信号的时序关系, 可以观察到JTAG扫描连的访问过程以及该过程中各种状态的转移,结果与JTAG_调试原理吻合。

    执行RE命令后, 得到了寄存器R0~R15及CPSR内容, 即读出了目标开发板处理器S3C4510B在当前处理器模式下的所有寄存器值, 而且还可以通过其他命令对其进行修改。

    此外, 通过扫描链2可以访问嵌入式ICE- RT的17个宽度不同的内部调试寄存器, 通过这些寄存器使目标arm7TDMI分别进入调试状态的3种方式, 即控制DBGRQ信号、断点和观察点, 实现在线调试功能。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭