问题是这样的
大概一个月前,我在IAR6.1上建了一个S3C2410的工程,我这边有两种板子,一块优龙FS2410板子,两块博创UP-TECH2410的板子,对应的也有两种调试器,优龙的使用的是DragonJtag,一端跟电脑的并口相连接,一端连接板子的JTAG接口,优龙的板子是标准的20针JTAG接口,编译环境是ADS1.2,调试的时候还有AXD,你懂的,蛮老了,现在ADS好像是被KEIL收购了吧,博创的板子是标准的14针的JTAG接口,这两种板子的历史有点久远,我当初学习使用的是优龙的板子,由于实际情况需要就翻出了两块博创的板子,也是师兄以前做项目的时候使用了的,我这边有ADS1.2下建立的工程,用dragonjtag调试,在优龙的板子上没有问题,由于博创的板子是14针的JTAG接口,我在盒子里边找到一个20针转14针的JTAG转接板,使用转接板,使用dragonjtag在博创的板子上下载调试也正常,当初也就是想检测下板子还是不是好的,毕竟放了这么久,检查完后就放在一边了,扯的有点远,IAR上建立的过程编译后,使用JLINK V8(以前基本没有使用过JLINK和IAR),调试器下载,在优龙的板子上可以正常下载,也可以正常DEBUG,总之在优龙的板子上everything is OK,大概是一个星期前吧,我就想用JLINK把IAR上的程序下载到博创的板子上去,因为JLINK的JTAG接口也是20针的,中间只能使用转接板,就在这时,问题出现了,我一点这个下载
博创的板子竟然会自动重启,我开始以为是偶然现象,结果发现每次都这样,下载时弹出的log如下:
,后来我就对比看用JLINK在优龙的板子上下载时的log信息,却发现跟上图是一样的信息,更奇怪的是并不只是在下载时板子才会自动重启,而是我将JLINK连上板子后,给板子上电的时候板子就自动重启了,我当时真有点欲哭无泪的赶脚,由于我是个菜鸟,平时也就跟代码打交道,对于这种问题,真是感觉莫名其妙。
当时的第一时间反应就是找万能的度娘,确实有人遇到我这样的问题,但是很少有下文,没有解决方案。后来也在几个群里描述了这个问题,也问过认识的一些牛人,后来怀疑是硬件电路的问题。
后来冷静下分析问题,
使用dragonjtag(20
针JTAG
接口)
在优龙(20
针JTAG
接口)
和博创的板子(14
针JTAG
接口,使用转接板)上下载调试程序都没有问题,就是使用JLINK(20
针JTAG
接口)
,在优龙的板子上调试下载还是好的,在博创的板子上下载程序时板子会自动重启,并且是JLINK
连上板子后,一给JLINK
上电板子就会自动重启,当时就是去看两块板子的PCB
原理图上的JTAG
部分电路图,优龙的板子原理图上就没有把JTAG
部分的电路图给出来,还好博创的板子有给出JTAG
电路图,如下: 图上的注释是我后来添加的,后来又在网上找JTAG接口电路的分析,找了几位大大的文档,整理了下,下边会将文档贴上来。下边是20针和14针JTAG接口的图
典型
JTAG
连接图
现JTAG(Joint Test Action Group;联合测试行动小组)已经是一种国际标准测试协议(IEEE 1149.1兼容),既然有标准的话就比较好处理了,照着标准来呗。
标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
TCK——测试时钟输入;
TDI——测试数据输入,数据通过TDI输入JTAG口;
TDO——测试数据输出,数据通过TDO从JTAG口输出;
TMS——测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式。
JTAG各引脚功能描述
上边有点是直接COPY的,上边博创板子的JTAG图中,电阻的值是我用万用表打的,我在优龙的板子上,我觉得既然有标准的JTAG连接图的话,优龙的板子上的JTAG电路也应该是差不多,确实在20针JTAG旁边看到有4个电阻,用万用表打都是10K左右,上边博创的板子上边的电阻就有一个是6.4K左右,我就将这个记下来了。跟这个电阻相连的又是一个复位信号引脚nTRST,联想上边的情况,给JLINK上电(JLINK的USB接口跟电脑连接),事板子会自动重启,再看上表中队nTRST引脚的描述,目标板上应将此脚上拉到高电平,避免意外,后来在面包板上做了个转接口,跟6.4K电阻串了个5.1K的电阻,可是板子还是会自动重启,又受打击了。
后来想想板子为什么还是会自动重启呢,我注意到上图中有个RTCK引脚,14针JTAG没有这个脚,也就是不使用这个功能,要将这个脚接地,我又把这个脚接地了,可是还是不行。OH MY GOD.大哥我是搞软件的,这种问题怎么会出现在我身上,哥们当时真的是想各种爆粗口了。但是没有办法,还得继续….
为什么还是自动重启,熬了一个晚上,各种找资料,度娘,谷哥,发现有个一个文档上说14针JTAG口中的nSRST(也就是板子上的复位信号引脚)要NC(NOT CONNECTED不需要连接,是不是要悬空?)我之前在我的面包板上都是讲14针JTAG口的nSRST脚与JLINK的 nSRST脚直接相连,后来我在面包板上将这个脚悬空了,神奇的一幕发生了,竟然可以下载程序了,也可以调试了。
后来我又将与6.4K电阻串联的5.1K电阻撤掉,又不行了,后来又加上来,却又可以了。在串电阻和将nSRST脚悬空的前提下我尝试将nRTCK脚不接地,就悬空着,发现也可以。
后来想想为什么将nSRST脚悬空就可以呢?我把JLINK的盒子打开,连上面包板,连上博创的板子,用万用表打nSRST脚的电压,却是0,问题就很显然了,nSRST脚是直接连的板子的复位开关的,这个脚是低电平就复位的。
我勒个去,问题是解决了,却花了我将近一个星期的时间,不过从开始遇到问题感觉各种无赖,欲哭无泪,无助,到解决问题后的愉悦,这种感觉还是很爽的。
昨天晚上搞到3点钟,当时却拿不到工具,今天上午各种尝试之后终于是把问题解决了,还是挺庆幸的。
总结:
虽然我使用的dragonjtag和jlink调试器都是标准20的JTAG接口,但是两种调试器里边的电路可能是不一样的,所以有些引脚的信号输出也就不同,这里需要注意,需要实际情况实际分析。
本文含有来自论坛的附件或图片点击查看原帖附件。
本文来自论坛,点击查看完整帖子内容。