把这几天由J-LINK而学习的jtag和arm仿真器的心得总结一下。
首先简单介绍一下jtag:
JTAG(Joint Test Action Group,联合测试行动小组)是1985 年制定的检测PCB 测试的一个标准, 在1990 年被修改后成为IEEE 的一个标准, 即IEEE1149.1-1990。IEEE 1149.1 标准就是由JTAG 这个组织最初提出的,最终由IEEE 批准并且标准化的。所以,这个IEEE 1149.1 这个标准一般也俗称JTAG 调试标准。
通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug;一般支持JTAG的CPU内都包含了这两个 模块。
一个含有JTAG Debug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比 如2410,44Box,STR91x系列)内置模块的寄存器,像UART,Timers,GPIO等等的寄存器。
我对arm的接触是从xscale系列开始的,pxa255和pxa270,可惜的是也许由于太高端了,一般的仿真器都不支持这个系列,所以关于仿 真调试这一块一直都是一片空白,只是在用axd做过软件模拟的调试,对于jtag的理解只是烧写flash用的。
从拿到J-LINK开始,对jtag及市面上的一些仿真器和调试器进行了研究,总算找到了一点头绪,但是对arm jtag的理解还不是很透彻,在这把心得写出来,希望对初学者有所帮助。
接下来介绍一下几种常见的仿真器:
1.wiggler,std-jtag,用户自定义的jtag
这几个属于同一性质,此类器件仅做简单的PC并口到JTAG接口的电平转换,同时起到保护作用。它们的区别仅在于JTAG信号PIN和PC并口 PIN的对应关系不同。
这些也就是我们常说的简易调试器,其主要用途是:
l 通过调试代理与ADS,IAR,KEIL,GDB配合使用来进行源代码的调试。
我们上面说了,wiggler只是起了一个电平转换的作用,具体的jtag逻辑则是由pc机上的软件实现的,这个软件就是调试代理。为什么要用调试 代理呢?这是因为JTAG是串行接口,使用并口的简单JTAG电缆,利用的是并口的输出带锁存的特点,使用软件通过I/O产生JTAG时序。所以有了调试 器的硬件,还要加上调试代理软件,作为中介,将调试器前端软件(比如AXD)的调试信息与目标板上的目标芯片交互,才能最终完成仿真的任务。由于jtag 逻辑由软件实现,所以这就决定了其下载速度很慢,因为由由JTAG标准决定,通过 JTAG写/读一个字节要一系列的操作,使用简单JTAG电缆,利用并口,通过JTAG输出一个字节到目标板平均需要43个打印口 I/O, 普通的p4机器每秒大约可进行660K次 I/O 操作,所以下载速度大约在660K/43, 约等于15K Byte/s。
既然是由软件实现,所以调试代理软件是非常重要了,可以免费使用的简易ARM仿真器的代理软件很多,差别也比较大,主要表现在易用程度,目标器件支 持,调试速度等方面。H-JTAG 作为近来新推出的简易ARM 仿真器调试代理,其支持器件比较多,支持的调试器前端软件也比较多,特别是支持keil,其调试速度也很有优势。具体的使用方法到其官方网站可以找到http://www./
l 与软件配合烧写flash
在理论上,通过JTAG可以访问CPU总线上的所有设备,所以应该可以写FLASH,但是FLASH写入方式和RAM大不相同,需要特殊的命令,而 且不同的FLASH擦除,编程命令不同,而且块的大小,数量也不同,很难提供这一项功能。所以一般调试软件像AXD等不提供写Flash功能,或者仅支持 少量几种Flash。比如我们使用AXD调试程序,则目标程序一般只能下载到ram里,其地址由ro base来指定。要把程序烧写到flash中,还需要想其他办法。
烧写flash的软件也有很多,像FlashPGM,H-flash等,这里还是推荐H-flash,和H-jtag配合使用。
IAR直接支持wiggler,并可以通过它编程flash。iar进行flash编程是通过其自带的flashloader实现的。所以对于内置 flash的mcu,像str912使用iar+wiggler+h-jtag的组合即经济又实惠。
2. multi-ICE
这个是由arm推出的官方仿真器,正版价格不菲,不过现在盗版满天飞,兼容产品很多,价格和性能也相差很多。
与wiggler一样,通过并口与计算机相连(现在也有usb的版本),由于其内部有颗FPGA做并口到JTAG的协议转换, 速度要比前两者都要快很多,下载速度可在120kByte/s左右。Multi-ICE的系统构架是由硬件实现PC并口到JTAG协议的转换(JTAG Bus Master控制器),而在PC机上用Multi-ICE.exe服务软件及并口驱动实现JTAG TAP多路访问、控制接口及不同ARM核的支持,用Multi-ICE.dll或Multi-ICE-gdb.exe来支持RDI(ADS或SDT等)或 GDB(gdb或xgdb等)接口的调试器与Multi-ICE.exe之间的TAPop接口的操作。在如此的架构下,使得ARM公司可以在不提供 Multi-ICE硬件升级的前提下,能通过更新Multi-ICE.exe及Multi-ICE.dll等软件来实现支持最新的ARM核。
综合来说其优点是由于是arm官方推出的仿真器,所以几乎所有的ide均支持,而且目前兼容产品较多,价钱也不是很贵。
缺点是缺乏flash编程功能,速度一般(相对与我们后面说的jlink)
3.ulink
由keil公司推出,由于keil已被arm收购,也算是arm自家的东西了。
其优点是:Ulink使用usb口,方便了没有并口的笔记本用户,现在ulink的d版也是满天飞,价格也到了萝卜价。调试时,配合keil的外设 窗口,非常直观, 对于从keil c51转过来的用户来说是再熟悉不过了。而且其支持flash编程。
缺点是:只能在keil下使用,速度一般。
网上可以找到ulink的原理图以及固件,可以自己制作。
由于手头上没有ulink及multi-ice,没有实际测试,只是从网上找了一些资料。
4.jlink
这是由segger公司开发一款仿真器,可以说是目前功能最强大的了。支持全系列的arm7和arm9。
支持rdi接口,支持所有的IDE,比如常用的ADS,IAR,KEIL,GDB,支持调试时下载到flash,有单独的flash编程软件,可以 编程外部flash器件。
采用usb接口,下载速度飞快。
由于我手上的jlink是iar的oem产品,所以功能上做了一些限制,只能在iar下使用,而且下载速度也限制了。需要注意的是iar默认是使用 flash loader下载flash的,所以可能你在使用时没感觉到速度上的优势,在下图中把flasher loader选项去掉就可以了。
目前市面上已经有盗版的jlink了,中国人的盗版能力还是很强的,但是牵扯到利益问题,具体方法还没有公开,等盗版奸商赚够了只够估计jlink 的命运就会想ulink一样了。现在只知道其内部是通过一颗AT91SAM7S芯片来实现相关功能的。