电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章嵌入式系统一种嵌入式系统实现的JTAG调试器

一种嵌入式系统实现的JTAG调试器

11-20 17:13:02 | http://www.5idzw.com | 嵌入式系统 | 人气:530
标签:嵌入式系统开发,嵌入式开发,http://www.5idzw.com 一种嵌入式系统实现的JTAG调试器,http://www.5idzw.com
  
另外BYPASS、INTEST、RESTART等JTAG指令的实现方法与上面两条指令的实现方法类似。
  
嵌入式ICE- RT 逻辑实现
  
嵌入式ICE- RT是ARM处理器内部集成的在线仿真功能模块,通过JTAG调试接口与外界交互,其中包含的常用寄存器如表1所示。

嵌入式ICE- RT内部的常用寄存器
  
要访问嵌入式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的基本调试功能。
  
ARM7TDMI 寄存器和内存访问的实现
  
边界扫描链分布在ARM7TDMI的32位数据总线的周围, ARM7TDMI每次取指令或者进行数据存储时都要通过32位数据总线进行。这样, 通过边界扫描链1, 就可以插入新指令或者新数据, 同时也可以捕获出现在数据总线上的数据。通过这种方式, 可以检查和修改ARM7TDMI的通用寄存器和系统内存。
  
以读取寄存器R0 的值为例, 介绍边界扫描链1 的操作过程, 如图3 所示。
访问通用寄存器R0的流程图
  
读取寄存器R0的值可以用指令STR R0, [R0] ( 机器码为0xE5800000) 来实现。该指令可将寄存器R0 的值存储到内存单元R0中去。因为在ARM7TDMI处于调试状态时, ARM7TDMI和外部是隔离开的, 所以该指令实际上不能访问内存单元, 也不会对内存单元产生任何影响。使用指令STR R0, [R0]可使得寄存器R0的值出现在数据总线上, 这样就可以通过扫描链1将其捕获, 然后从TDO输出。指令STR R0, [R0]的执行需要两个指令执行周期。在第一个指令执行周期, 执行地址计算; 在第二个指令执行周期, 将寄存器R0的值放到数据总线上去。对ARM寄存器写操作及访问内存的方法与此类似,都是通过扫描链1, 只是所使用的指令不同而已。
  
网络编程
  
通过网络编程, 可以对目标系统实现远程调试。图4是PC与仿真器的网络通信流程图。网络通信通过μClinux下的socket编程实现, 首先PC(调试主机)通过网络向仿真器发送命令, 仿真器通过统一的程序接口分析调试命令, 并将调试命令转换成JTAG标准所要求的时序, 通过I/O口线发送到目标板; 然后目标板执行命令,并将命令执行后得到的调试信息返回给仿真器, 接着仿真器将调试信息通过网络发送给PC, 这样用户在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信号、断点和观察点, 实现在线调试功能。
  
本文实现的JTAG调试器具有基本的调试功能, 尚不具备完善的用户操作界面, 特别是图形操作界面, 另外网络功能也需要进一步完善。但调试器的设计和实现方法对于设计类似调试器具有参考价值。为了提高JTAG调试器速率, 还可以采用CPLD或FPGA实现JTAG时序,通过存储器形式与调试器CPU接口, 这将在提高速度的同时, 减轻调试器CPU的负担。

上一页  [1] [2] 

,一种嵌入式系统实现的JTAG调试器
关于《一种嵌入式系统实现的JTAG调试器》的更多文章