2010-07-26 20:07:00
制作调试过程
1,串口通信硬件设计。焊接了串口通信电路实验。由于我的usb转串口线是不能配max232的。而是要配一个反向器。于是自己焊接了74ls00。并且把圈圈电路板通过飞线改了下。至此,串口通信硬件完成。
2,串口通信软硬件调试。改了改之前的串口通信程序。并且下载测试。很顺利的通过串口通信测试。
3,做了一些51外围的led及按键的软硬件测试。很顺利的通过了。
4,D12的硬件焊接。东拼西凑的把电路板连接上了,买了TSSOP的D12,开始焊接引脚间距为0.65mm的贴片ic。运用拖拉方法,我成功地焊接了D12。接着从我家的废主板上插了几个电阻焊接了下。还在淘宝买了晶振和配晶振的贴片电容。其他的基本都是用其他板子通过杜邦线相连。能省略元件的就省略。
5,下载D12的测试程序。读D12的id。结果不成功。先检查硬件,原来漏焊了一个电阻。查了一下,这个电阻一定要焊接的。于是焊完电阻后,再次测试,ok。真是兴奋啊。
6,下载usbMouse程序调试。结果不成功,一会就挂起了。那么就开始一段一段调试吧。结果发现,单片机读出的数据和usb主机发送的数据不符。多了很多位。这就奇怪了。为什么会这样呢?
a,难道数据延时,单片机读的太快了。那么我就延时后再读,可结果一样。与延时没关系。
b,难道是usb延长线的延时,导致d12多接收了些0x00?于是通过修改程序,不去读前面的哪些个0x00,程序就可以继续运行一点。但是还是有问题,这是我人为的修改程序不读前7位数据,才能使usb和d12在正常通信,但是实际他们的通信是不正常的。print显示D12接收到usb主机的请求,也返回了枚举数据,但是USB主机并没收到,又挂起了。
c,难道是D12的缓冲区发送接收数据有问题?保险起见,我不连D+和D-,我让单片机发数据到D12的缓冲区,并从缓冲区再读取数据到单片机。问题终于出现了。写入的数据和读出的数据不相符。并且很明显是一条P0.0位的数据线有问题。终于有眉目了。P0.0输出的数据总是为高。那么我先检查硬件原理及连线。硬件没问题。天呢?那么他为什么总是拉不低呢?
d,用示波器看看此位与其他位的波形吧,终于看出,此位拉低时,电压为1.76v,再也低不了。这就是此位总是显示1的原因。但是为什么电压总是拉不下来,而其它位的电压能拉下来呢?是不是焊接的排阻没焊牢。但是查了下,外围硬件焊接及杜邦线连接都是好的。测了下不运行程序与运行程序时,他们各个引脚连接的电阻阻值。发现,一运行程序,则P0.0连接的电阻的阻值就比其他位要高。但是不运行程序时,阻值则一样。怎么会这样?
e,突然有种感觉,c51芯片坏了,还好,我上次在淘宝买了2片,换了一片,大功告成。果然是c51芯片引脚有问题。
7,串口调试助手成功的显示了从usb主机发送过来的设备描述符请求。并且d12也有反映,向usb主机返回数据。但是usb主机没收到,挂起了。为什么呢?我怀疑是这根便宜的usb延长线的问题。那该怎么查啊!另外还有就是单片机把数据发给d12,d12再通过usb延长线给usb主机。那么也有可能是单片机数据没写入d12,导致设备没返回给usb主机数据。
8,调试单片机与d12之间的数据收发。根据d12缓冲区的数据格式,第一个字节为保留字,数据为0。第二个字节为数据长度。第三个字节为真正的数据。通过修改程序,多次调试,查看数据变化后,发现。一个字节为保留字,但是单片机不能向它写0x00,否则d12会自己填补第一个字节,并且把0x00作为第二个字节。难道规格书上描述错了。反正我这样改下程序,枚举过程就能读能写了。但是数据还是不稳定。有些位拉不高等问题。
9,接着再调试吧,没想到买的一个usb延长线断了。没办法,买根好点的吧,可能数据传输不稳定的现象就能解决。期待明天的usb线。
10,usb线到了。接着我把之前调试比较成功的hex文件重新烧进c51,结果发现很不稳定,一会好一会不好。尝试了好几次,决定data线不用杜邦线连接,还是把40pin排针插了,然后焊接40pin的ic座,还好上次多买了一个,现在派上用了。如何拆20pin排针?
11,网上查了下,20pin的直插排针,可以把塑料先插下,然后把排针一个个焊下。于是就用这个方法,花了点时间,终于搞定。但是孔都不焊锡堵上了。还要一个个把孔给搞出来吗?
12,尝试了下,好难搞啊,算了,40ic座就直接焊在top面。感谢圈圈板子设计的好,top和bottom都能焊接。顺利焊接完40ic座,接着把晶振和晶振电容也焊上了。查看完其他连接线。连到电脑,按下复位键后,呵呵呵~主机usb识别出了设备。此次调试宣告成功。
很有成就感,不经一番彻骨寒 哪来梅花扑鼻香。
调试总结:
曾经有4个高级工程师和我说过,编编小程序,很快就可以查出问题。这次我用上了自己编写的验证测试程序,发现在调试排查过程中真的很管用,我有潜质去做警方的侦查员,呵呵。
发现的重大问题就是d12芯片的写缓冲区的第一个字节不能写0,虽然规格书及圈圈的程序上都是写0。而我写0或者说直接烧圈圈的hex文件就是有问题了。