最近同事做了一个FPGA板子,高低温下面一直出问题,找我帮忙解决,由于我的古道热肠,我也就答应了,于是答应晚上空闲的时候帮他弄。
开始我让他把他的板子上面的电源什么的,都调试好,然后我自己把BGA焊接上,因为我觉得可能他的BGA 有问题吧,我自己对我自己焊接功底还是比较放心的,待到焊接好了后,我又迅速敲击了2份代码,一份是IO口测试的,吧所有的IO口都拉高拉低,输出一个1M 的始终出来,另外一份是一个串口收发数据,我用串口助手发一个数据出去,FPGA返回当前数据,写好这2个代码后,我就拿着它的板子在常温下测试,2份代码一次性测试OK,因此觉得没啥大问题嘛,然后丢到了低温箱,-40度温度,当然我们公司所有的芯片,全都是买的工业级的,因为大多数都需要过高低温试验。
丢进了低温箱后,我就开始上电不断的向下发数据,串口也不断的回传,但是大约过了5分钟后,串口就挂掉了,感觉FPGA不工作了,重新上电,关电,也无效,因此我马上重新烧写了一份IO测试代码进去,发现每一个IO口都有高低电平输出,因此我首先怀疑是电源可能不稳定造成吧。
好吧,先假设电源不稳定,我取出板子,去下板子上的电源芯片,换成外部的稳压电源供电,再次测试,在低温箱还是没有挺过5分钟。
好吧,再次继续假设FPGA虚焊,我可以吧BGA拆下来,看看PCB 焊盘上面是不是都有锡球,因此我将BGA拆下来,发现每一个焊盘都有锡珠,因此BGA没有虚焊,我又只得植球上去,再次焊接,排除了这个问题后,我觉得是不是FPGA在低温下处理逻辑出乱了呢?也就是说FPGA 是商业级的,过不了低温?
为了验证这个,我找了一个以前的产品,上面的芯片能过低温测试,这样保证了FPGA是没问题 的,因此我再次植球焊接上,进行测试,还是家庭不过黑色的5分钟,串口就挂了,那么是不是我发数据进去的时候,芯片内部乱了呢?我为了验证则个,我马上吧代码再改了一份,我让FPGA上电后,一直向外发数据这样,就相当于让FPGA让IO口输出一个高低电平嘛,再次进低温箱测试,在5分钟后,发现数据乱码了,本身我要发上来AA,记过一大堆乱七八糟的东西来了,我顿时揪心了。
从这个实验也证明了,FPGA 的时钟出乱子了,我马上在常温下测试串口向上传一帧数的时间,然后再低温下向上传乱码的一帧数的时间,进行了对比,发现2个之前时间误差了很大,因此我确定是时钟出问题了。
确认这个问题后,为了验证,我马上找了一个同步晶振,输出频率100M,可以过低温-50 的,因此挂上去后,在低温下,任然串口乱码,因此我马上让我同事把他的图纸拿来分析,发现晶振到FPGA之间,串联了一个电容和一个电阻,一个电阻,一个电容,电阻电容,偶的个神啊,我还是没看到FPGA 时钟输入上接入电容的呀。
发现这个,迅速取下电容,换成0欧姆,然后放入低温箱,欧耶耶,欧拉拉,-50度都很坚挺啊,然后我再次换上电容,故障浮现。因此我又做了一个测试,就是吧电容和电阻值都换了一下,再次测试,在低温下-40 ,都没问题的。问题终于得到了解决,忙活了大半夜了,顿时感觉真的折磨人啊!!
以此给正在做设计的广大同仁一个警示。给初学者一点指导意见。