前段时间折腾Stellaris单片机,觉得老用8962评估板上的调试接口不是很方便,于是和同学一起画了一块调试器.本来想参考EK8962这块板子的电路图画.但是这个调试器需要一个CPLD,既需要CPLD编程,而且成本也比较高.恰好在论坛里发现了9b96开发板上的调试器电路,这个调试器一个FT2232,三片缓冲.比较容易做,马上就动手了.
电路图和成品图如下:
debuger(Version2).pdf
(75.22 KB, 下载次数: 34)
板子画好焊接好后,才开始考虑固件的问题.站内了大牛fengzhang2002,告知可以从开发板上读取PID,VID等信息,然后编程到新的板子上.
因为手上只有8962的开发板,上面用的也是FT2232,于是就理所当然的把8962板子上的FT2232固件烧写到新调试器上了.
但是一上电,新的调试器怎么都不能连接上目标板,出错信息如下:
mybays@spaceship:~/stellaris/lm3s8962/final$ luminary-openocd -f ../ek-lm3s9b96.cfg
Open On-Chip Debugger 0.3.1 (2010-09-15-10:11)
$URL$
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
3000 kHz
jtag_nsrst_delay: 100
jtag_ntrst_delay: 100
srst_only separate srst_gates_jtag srst_open_drain
Info : clock speed 3000 kHz
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
这种问题,一般是jtag不能和目标板通信,可能的原因是目标板没上电,调试插头没有插上,像我这种情况,很有可能是FT2232到目标板这一部分的逻辑电路有问题.
既然有问题就要解决了,首先是检查焊接问题和电路图是否画错,经过长时间的检查,没有问题.
然后和同学讨论,两个开发板(EK-LM3S8962和EK-LM3S9B96)的电路不一样,是不是烧写的固件也不一样.
手里没有9b96开发板,到网上一看,果然不一样,9b96的是vid&pid是0x0403 0xbcda,而8962的是0x0403 0xbcd8,两者的描述也不一样,一个是"Luminary Micro ICDI Board",另外一个是"Stellaris Evaluation Board".于是重新在网上找了9b96的调试器固件,烧写了进去.但是问题依然存在,怎么办呢?向困难屈服不是我的作风,于是我决定使用逻辑分析仪看看到底问题出在哪.
虽然实验室刚买了一批很高端的示波器,带数字逻辑分析功能,但是那个太复杂了,还没学会.所以就用我们画的cy7c68013a逻辑分析仪,软件是Logic,虽然盗版山寨不好,但是我们是学习自己用,不是以盈利为目的.
将板子的TDI,TMS,TCK,TDO,SRSTN引出,发现前四个信号都是低电平,没有问题.
SRSTN是高电平,低电平将复位单片机.
准备妥当,逻辑分析仪开始采样,这边连接open-ocd:
可以看到在0.7s左右板子复位,但是错误还是和以前一样.
和以前不同的是,烧写8962调试器固件后,以上5个信号都是高电平.说明程序和以前的相比,已经正常了很多。在SRSNT复位后,4个信号线都有动作,但是最后还是没有结果,很有可能是JTAG没有建立正确的连接。
那么到底正确的连接,是什么样的呢?
用EK-LM3S8962的评估板调试小板,逻辑分析仪采样的信号如下:
jtag输出信息为:
mybays@spaceship:~/stellaris/lm3s8962/final$ luminary-openocd -f ../ek-lm3s8962.cfg Open On-Chip Debugger 0.3.1 (2010-09-15-10:11)
$URL$
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
3000 kHz
jtag_nsrst_delay: 100
jtag_ntrst_delay: 100
srst_only separate srst_gates_jtag srst_open_drain
Info : clock speed 3000 kHz
Info : JTAG tap: lm3s8962.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
Error: AHBAP Cached values: dp_select 0x10, ap_csw 0xa2000002, ap_tar 0xe000edf0
Error: SWJ-DP OVERRUN - check clock or reduce jtag speed
Error: Read MEM_AP_CSW 0x23000040, MEM_AP_TAR 0x0
这里的出错原因是我配置文件里的目标CPU为LM3S8962,而调试器发现的CPU却是LM3S2110.
可以从图中看到正常的数据,这里补充一下,8962调试器没有SRSTN信号,估计这个调试器能够软件复位CPU,而9B96的开发板只能通过硬件来复位CPU.