昨天已经有网友总结了这次ARM DIY板子的一些瑕疵。而我想谈的并不是这些BUG,而是一个特例(当然是我板子上的问题),那我就分享一下我折腾了一个多小时的问题。
昨天晚上刚刚焊好板子,上电看到LED亮了,心里感觉挺高兴,时间已晚,又没有找到合适的例程,所以没有测试CPU是否好使。
今天下午,编了一个流水灯的程序,但是在下载的时候,出现了问题,KEIL提示“failed to halt cpu",下载失败。开始怀疑自己cpu的某些引脚没有焊好,用烙铁摁了好几遍,但是问题如故。仔细看keil的提示,发现有一句说reset引脚不能控制,于是乎用万用表查了一下reset脚的电平,果然啊,一直都是0V,竟然和地短接了!看原理图,发现在复位按键没按下时,复位引脚应该是高电平。可见有某个地方短路了。
对着PCB图,把reset这根线整个捋了一遍,没有发现有短路处。于是拆掉复位按键及其周边,问题如故。由于这根线从SD卡,串口,JTAG插座经过,但是这些器件焊上了显然无法拆。于是只能将该线断成三段,缩小包围圈了。
最后割了两刀,发现问题出在JTAG口和TFT插座之间。再经过我的仔细辨别,终于发现了一根毛刺(比头发丝还细,可怜我这深度的近视眼),将铺地和reset线连接了!
好了,问题找到了。修正后的板子也好使了,但是我在找问题的过程当中有几个大胆的想法:
第一,这个问题的直接原因当然是PCB加工厂的失误。鉴于论坛里也有其他兄弟板子出现了问题,所以可以推断这个PCB工厂的加工精度不高。而此次板子的线比较细,所以次品率较高。
第二,这个reset走线我认为不够好。大家可以看一下PCB图,这根线绕了大半个PCB板,而且很多情况下都是贴着PCB的边。这样干扰很容易进入,而reset对于单片机来说又是一个至关重要的引脚,因此容易造成单片机经常重启。我想起了我大三参加飞思卡尔智能车时设计的一块主控板,由于我把reset线引的太长,造成小车在行驶过程中频频无故复位。因此,我认为单片机的硬件设计中,reset按键应该尽量靠近单片机,而且引线一定要短。从另一方面来说,线越短加工中出现的问题就越少,至少我这次的经历就说明了这点。
第三,这个事情也告诉了我,拿到板子还是不要着急焊元件。先把所有的非地线都和地线检查一遍,确保无误再开工。因为由于大面积铺地,较容易发生某些信号线和地短路。
最后,希望我的这个经历对于那些焊板子的兄弟有所帮助。