通过调试软件查找电路焊接错误的方法
通过调试软件查找电路焊接错误的方法
作者:林先贤 [email protected]
{沈阳东软飞利浦医疗系统,辽宁,沈阳,110179}
[摘 要] 分析总线焊接错误引起读写数据的异常状况,根据其中规律,介绍一种通过调试软件查找总线焊接错误的方法。
[关键词] 总线;读写数据;焊接错误
The Method of Welding Examination by Debugging Software
[Abstract] Explain the memory accessing rule when the memory bus in error status. According to the rule, introduce a technique of finding the memory bus welding mistake by debugging software.
[Keywords] memory bus; memory accessing; welding mistake
随着微电子技术在近半个世纪飞速发展,微电子芯片在性能,可靠性,加工工艺,生产成本,集成度等方面都在不断提高。随着芯片集成度及复杂性的提高,超大规模集成电路的封装却越来越成为一个问题。现在一个芯片的管脚数可多达几百个,管脚间的间距已只有几十微米。在一块电路板上有好些个几百个管脚的芯片也屡见不鲜。即使电路原理设计没问题,焊接尤其是手工焊接一些多引脚贴片封装的芯片,容易出现引脚粘连,虚焊等问题。 批量制版中出现的个别电路板故障,排除原理性设计错误,很可能是由芯片焊接错误引起的。一个芯片的电源没焊接好,根本不能工作,你可能很容易发现。还有假如它的某一特殊功能工作不正常,比如串行接口,SPI接口,A/D输出等等,就可以检查它的相应功能引脚的焊接情况。而在32位数据总线,20多位地址总线的系统中,发现总线读写数据问题,又如何判断具体那个引脚焊接错误呢?没有针对性地补焊有时不仅没能快速解决问题,还造成更多的管脚粘连。
下面就讲述一种方法快速查找,发现焊接问题。
支持在线调试的电路板,提供一个调试接口通过线缆连接到调试主机。调试主机通过相应软件可以实现对电路板的仿真调试,程序烧写等功能。我们通过调试软件读写数据产生总线操作,根据操作结果就可以进一步分析具体总线问题。
反过来思考,先假设系统的数据线32位(D0~
D31)假如数据线D0虚焊,那么我们往RAM(必须
是片外扩展的空间才能用到外部总线)写数0xffffffff
图1:数据位虚接示意图 和写0x00000000,读回来数据分别是0xffffffff和
0x00000001,也就是数据位D0始终为高电平。如图1
所示。当某数据位不管写‘0’还是写‘1’后读取始终是‘0’或‘1’,很可能该数据位虚焊悬空,或与邻近的线路(电源线,地线或其它信号线)短接。
如果两相邻数据线短接又是什么情况呢?假如数据位D1和D2粘连,那么读取的数据D1和bit2始终是相同的。如图2所示。我们往RAM写数据0x55555555,读进来的数据就是0x55555557或0x55555551;写0xaaaaaaaa,读进来数据就是0xaaaaaaa8或0xaaaaaaae。 分析过数据线焊接错误的情况,接下来分析的是
地址线焊接错误的情况。假如地址线的第0位A0
虚焊,那么我们修改RAM(假设地址为0x00000000)
的数据,然后读取该地址及它的相邻存储空间(地
图2:D1,D2数据位粘连示意图
址0x00000001)的数据,发现两地址的数据都跟着
改变。因为A0虚焊悬空,读写0x00000000和
0x00000001已无法区分开,实质上始终指向同一地址空间(0x00000000或0x00000001)。如图3所示。同理,假如第20位A19虚焊,前1M的数据和后1M的数据一致,读写
图3:地址线虚焊示意图 图4:地址线A0,A1粘连示意图 0x00100000~0x001fffff和0x0000000~0x00fffff空间的数据实质上是一样的。这种情况,2M字节的RAM实际上就只有1M字节空间可被寻址了。
这种地址线虚焊的情况比较容易判别,而地址线粘连的情况就比较复杂,比如说地址线A0和A1粘连,如图4所示。A0和A1始终一致,实际上只能寻找XXXXX11b(XXXX表示1或0)和XXXXX00b,你对XXXXX01b或XXXXX10b地址的RAM写数据时,也会改变XXXXX11b或XXXXX00b区域的数据。这里的A0和A1粘连,在电路上表现出两种电平始终相同,其中一位的电平决定另一位的电平状态,但是谁决定谁,谁占主导没法事先下定论,需要根据具体情况作分析。这种情况下,对XXXXXX00b~XXXXXX11b读写,实质上只能对XXXXXX00b和XXXXXX11b两个地址操作,XXXXXX01b和XXXXXX10b两个地址是无法寻址的。
以上分析的是总线焊接问题引发的读写数据错误现象。实际作判断是根据总结数据读写状态来推理总线焊接问题。一般步骤是先往片外扩展的RAM写读数据0xffffffff,0x00000000,0xaaaaaaaa,0x55555555,判断数据线正确与否。如果有错误就根据情况分析推断哪个数据线焊接错误。单纯的数据线焊接错误还是比较容易通过这种方式发现的。确定数据线焊接无误后,就接着查地址线状况。一般需要往RAM写具有特征性的数据,(目的是容易查找并且尽量不和RAM的初始数据重复)比如写数据0xff00a5a5,再读数据看是否该数据与写的数据一致,还需要查看其他地址的RAM数据是否也被更改为0xff00a5a5,查找可疑的地址线问题可以多试验几次进行确认。如果调试器支持RAM块清零的,可以事先将RAM区域清零,查找的数据就更明了且可靠。如果调试软件自动对更改数据作出明显标
记(比如标记为红色)那就更容易查找问题所在了。如果数据线,地址线都有错误,并且可能错的数量是好几处,由于需要过多的假设和确认,这个方法就显得费力,甚至是无能为力。你就只能用肉眼观察,动手先补焊一番,再结合这方法细化检查。
以上根据笔者工作经验总结,希望能给大家带来一些帮助。需要注意的是,这一方法只能用来排查地址线、数据线的焊接错误,当然不只是用在CPU和RAM芯片的总线连接,了解判别原理后,可以推断各种带总线接口的芯片,只不过有些芯片的操作有所限制,比如ROM芯片只能根据读取数据来判断。