原创 ARM JTAG调试器全攻略

2008-9-8 18:33 3286 4 4 分类: 软件与OS

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

作者:小布


学习ARMJTAG这一关是必须要过的。但是似乎对应于不同的调试软件有不同的电路,又有可否烧写flash之分。这对初学者未免造成一些困惑,其实这层窗纸太薄了,一点即透。


我们首先来看Jtag几条线的作用:


??Test Clock Input (TCK)


TCKTAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。TCKIEEE 1149.1标准里是强制要求的。


??Test Mode Selection Input (TMS)


TMS信号用来控制TAP状态机的转换。通过TMS信号,可以控制TAP在不同的状态间相互转换。TMS信号在TCK的上升沿有效。TMSIEEE 1149.1标准里是强制要求的。


??Test Data Input (TDI)


TDI是数据输入的接口。所有要输入到特定寄存器的数据都是通过TDI接口一位一位串行输入的(由TCK驱动)。TDIIEEE 1149.1标准里是强制要求的。


??Test Data Output (TDO)


TDO是数据输出的接口。所有要从特定的寄存器中输出的数据都是通过TDO接口一位一位串行输出的(由TCK驱动)。TDOIEEE 1149.1标准里是强制要求的。


??Test Reset Input (TRST)


TRST可以用来对TAP Controller进行复位(初始化)。不过这个信号接口在IEEE 1149.1标准里是可选的,并不是强制要求的。因为通过TMS也可以对TAP Controll进行复位(初始化)。--所以有四线JTAG与五线JTAG之分。


其实对JTAG来说有着几根线就够了,再算上电源和地最多才7根线啊,可常见的接口方式是20针的插座啊;多出来的几根线适用于高级一点的用途,对于新手来说是不需要的。


??(VTREF)


接口信号电平参考电压一般直接连接Vsupply。这个可以用来确定ARMJTAG接口使用的逻辑电平(比如3.3V还是5.0V?


??Return Test Clock ( RTCK)


可选项,由目标端反馈给仿真器的时钟信号,用来同步TCK信号的产生,不使用时直接接地


??System Reset ( nSRST)


可选项,与目标板上的系统复位信号相连,可以直接对目标系统复位。同时可以检测目标系统的复位情况,为了防止误触发应在目标端加上适当的上拉电阻。


??USER IN


用户自定义输入。可以接到一个IO上,用来接受上位机的控制。


??USER OUT


用户自定义输出。可以接到一个IO上,用来向上位机的反馈一个状态


由于JTAG经常使用排线连接,为了增强抗干扰能力,在每条信号线间加上地线就出现了这种20针的接口。但事实上,RTCKUSER INUSER OUT一般都不使用,于是还有一种14针的接口。对于实际开发应用来说,由于实验室电源稳定,电磁环境较好,干扰不大,使用那么多地线意义不大,个人使用一种10针接口,接口方式与AVRJTAG接口顺序相近(非标准,不推荐大家使用)。下面是接口示意:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />



按照个人理解:JTAG开发工具有:USB Multi-ICE、并口Multi-ICE、简易JTAG.,价格由高到低,速度由快而慢,功能由强而弱。JTAG作为一种嵌入式系统调试规范,是有一套协议的,并口Multi-ICE就是将计算机对并口的读写转为JTAG协议,其实大家如果拆开看过,就很容易理解了,主要部分是一片FPGA,程序在EEPROM里。大家知道价格为啥差那么多了吗?成本低,进入门槛低,会抄板就行了。USB的只不过是多了一层USB协议,由于USB本身较并口为快,所以速度要快一些。不要问我有多快,我没用过。简易JTAG只有一片74HC244,其实是用并口模拟JTAG协议,由于JTAG是串行协议(废话,那么几根线怎么并行),所以并口的n次操作才能完成一条命令(n>8),事实上是远大于8,能快起来才怪呢。单片机的并口ISP下载是同样的道理(如果ISP最高速度受限那就不好说了)。


不要问我简易JTAG是不是具有Multi-ICE的全部功能,原则上是可以具有的。但是软件支持不支持就得另说了。就好像我们花钱买开发板一样,其实买的是一个售后服务。


网上有个很牛的仁兄,用一片EPM3128和一片Atmega8自己设计了一个Multi-ICE,并共享了一些资料,大家可以照着做一下。资料下载用google搜。


终于说到简易JTAG了,下面先看几张原理图:


第一张:支持软件SJF2410.exe,是三星提供的2410 flash烧写软件。2410开发的话最好备一个。


第二张:是JTAG for ARM SDT


第三张:是一家公司的Wiggler for X-JTAG原理图。


第四张:是另外一家公司提供的JTAG原理图。


第五张:是另一个版本的Wiggler


贴图不太全,其实没多大意思,主要区别是几条线对应的并口线序不同,反映到ARM那里都是一样的。最好的解决办法就是用一片PLD,对应什么软件就使用什么样的连接顺序,可以接几个跳线作为输入,免得每次更改程序。太大材小用了吧?不然,以后调试单片机、CPLD都可以用啊。现在有一种万能下载线就是这么做的。什么?不会用CPLD?那就用模拟开关设计一个电路出来,或者下面图每样做一个也行,做PCB的时候拼版,用不了几个钱。




 



      友情提示一下,有些公司为了显示自己的技术能力,把接口改的乱七八糟,跟谁的都不兼容,这时候就买他一根下载线好了。没几个钱,别耽误了项目。


      一个简易的JTAG究竟工作是否正常,除了可以用相应软件调试外,推荐大家使用X-JTAG调试,关于X-JTAG的使用参见好友NOCKY的《在ADS中使用XJTG》。

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条