之前做的板子用的4线JTAG,一直是可以烧写程序的。最近要改板子,由于4线JTAG太占面积,所以打算换成2线JTAG。但是在调试的过程中却出现了 Could not find device (or device not supported) Session aborted!的问题。下面讲一下解决的过程。
一、4线JTAG和2线JTAG介绍
首先先介绍一下4线JTAG和2线JTAG。这里以我用的MSP430F6638为例。5系列和6系列的应该都差不多。
4线JTAG需要用到430上6个脚,分别为TDO(1),TDI(3),TMS(5),TCK(7),TEST(8)以及RST(11)脚,再加上一个共地的角GND(9),一个VDD脚(2或4),VDD这个脚根据你单片机是非JTAG供电还是JTAG供电,分别选择接在2号脚或者4号脚。根据MSP430F5529demo板的板载仿真器的电路结构猜测,应该是JTAG仿真器内部有一个电平转换芯片,当单片机采用非JTAG供电时,可能电压与JTAG仿真器输出电压不一致,这时需要一个电平转换芯片将信号电平转换一下,使得两者一致?
2线JTAG只需要用到单片机上的RST脚和TEST脚,这两个其实是复用引脚,在2线JTAG模式下,应该称为SBWTDIO和SBWTCK更准确。除了那两根信号线之外,再加一个共地线应该就可以烧写程序了。
二、问题的描述及解决
问题的现象描述:
当采用4线JTAG烧写程序时,一切正常;但是使用2线JTAG烧写程序时,却报出了 Could not find device (or device not supported) Session aborted!的错误,无法烧写程序。
解决方案:
在查阅之后,发现接在单片机RST引脚的接地电容的大小很有讲究。
接地电容如下图C28所示。按照TI的demo板上来看,这个电容的值为DNP,应该是do not place。但是TI的demo板上,这里又焊接了一个电容,这个到底应该多大呢?一开始没有仔细研究,我用的是0.1uF,这个是最常用的一个电容值了。
但是后来查阅资料后发现,这个电容值其实很有讲究的,在4线JTAG模式下,推荐为10nF,在2线JTAG模式下,最大为2.2nF。我这里用的是0.1uF,显然是远超了推荐值。
后来把这个电容换成2nF之后,下载正常~
这里分析一下,可能是在2线JTAG模式下,SBWTDIO既作为数据的输入又作为数据输出,对时序的要求更高,所以这里电容太大之后,会产生影响。同时,贴上一张关于JTAG部分参数的图,从图上似乎可以看到,2线JTAG是速度更高一些,可能也正因为如此,其对时序的要求也更高吧~这个分析可能不一定正确,欢迎交流、指正~