一个价值百万的BUG

背景介绍

最近帮人友情解决了某个PCBA厂家ATE设备的BUG,这个BUG导致DUT硬件板卡ADC数据转换结果不稳定甚至不准确。这个顽疾已经存在9个年头,为此这条产线多配置了一个测试员,专门负责这个BUG的调试工作,每当DUT的ADC测试结果异常时,用热风枪加热一下,重新测试,大概率能够通过功能测试,然后贴上检验合格的标签,方能送往包装区并出厂。如果加热这招不管用,那就只能怀疑是ADC器件本身的问题,测试员需要手工更换ADC芯片并重新测试。手气差的时候,一块PCBA测试可能一天都搞不定,费时费力费钱。由于这块PCBA年用量较大(约100k),每块DUT有2~4块ADC芯片,判定失效的器件数也是挺可观的。一个专用测试员将近10年的人力成本,加上调试占用机台的设备成本以及各种耗材,粗略估计这个BUG价值百万一点也不为过。
一般来说,大型的PCBA厂家都配置有自己的ATE开发团队,这家公司也有,而且研发水平也还不错,配置有项目经理、机械工程师、软件工程师和测试技师等。不巧的是,本地ATE开发团队成立时间不长,工厂的大部分ATE装置都是从国外转移过来的,简单交接后,总部的ATE开发团队居然就地解散了。大量老旧的ATE装置的维护更新只能依靠本地工程师,本来技术还没吃透,问题又多,一时间测试车间鸡飞狗跳、热闹非凡。我这个悲催的哥们带着几个小弟负责这一堆ATE设备的维护,为此大伤脑筋,简直夜不能寐。某次宵夜烧烤,照例又是喋喋不休的吐槽,然后给大伙每人一份他的简历。我不由得恻隐之心一动,顺口安慰道:别着急,把资料发过来,我帮你看看吧。觥筹交错间,我看到那小子嘿嘿的坏笑着,心想这次怕是上了他的贼船。
人的第一感觉往往是对的,我果然接了个烫手的山芋。花了大半年时候断断续续帮忙修复了3个类似的BUG,连续搭进去了好几个周末,这些时间我本来可以陪娃逛超市打游戏,增进亲子感情的!现在想来,真是肠子都要悔青。花点时间记下来吧,就当买了个教训:不要轻易许诺!不要轻易许诺!不要轻易许诺!

复现故障

毫不夸张的讲,复现故障是排除故障过程中最为关键的一步,特别是如果能在实验室或者人为设定的条件下复现,那就太完美了。因为故障如果能够被复现的话,那就可以轻易的收集到故障发生时的各种状态数据,从中找出异常,进而推断错误产生的真正原因。此外,我们还可以用来验证后续的故障修复。不幸的是,这个BUG就像某些精神病人一样间歇性发作,PCBA良品率时高时低,毫无规律;幸运的是,某个PCBA一旦出现故障,多次测试复现的概率会很大。不过由于距离的关系,我也懒得往现场跑;ATE机台笨重且昂贵,也不太方便运到我家。于是我写了个故障收集的脚本,扔给测试工程师跑了一堆数据,然后拿回来慢慢分析。

了解系统

ATE机台是一个Agilent(老东家哦,电子测试测量部门已经是Keysight啦)的测试机柜,里面有多个测试仪表如电源\信号源\示波器\频谱仪等,通过各种线缆连接到这款PCBA的测试治具。机台具体结构无非就是结构件+电源+总线+仪器仪表,而且相当的不便宜。测量仪器仪表价格不菲,一旦购置就成了固定资产,而且每年都需要校准维护,对企业来说也是一笔不小的开支。很多玩波的初创公司买不起高端仪表,只好租借或者直接去Keysight的开放实验室蹭饭,也是一个无奈的选择。
话题扯的有点远了,在定位问题前,我花了些时间学习这块PCBA的测试治具。系统结构图大致如下图,包括各种电源和仪表提供信号激励\接收反馈、一块DSP接口转接卡和上位机,其中DUT和DSP转接卡通过PCI通信,上位机和接口转接卡通过串口通信,测试脚本运行在上位机。
在这里插入图片描述

定位问题

于是乎请现场工程师用示波器查看ADC芯片SPI通信接口的波形,果然发现了问题所在:FPGA似乎没有检测BUSY信号是否有效,在ADC转换未完成之前,可能就开始读取测试结果。有兴趣的朋友可以读一下AD7663的文档,基本的转换时序图如下。CNVST的每次拉低都会触发一次ADC转换 --> BUSY随后拉高,表示正在进行模数转换 --> BUSY电平变低,ADC转换结果可有效读出,同时进入采样状态。对比示波器观测到的正常工作和故障产生时采数波形图,可以很清楚的看到FPGA只是在CNVST拉低后固定延时一段时间,然后就开始读ADC转换结果。当ADC芯片品控不好或者受环境温度影响较大时,并不能严格满足文档上的时序指标,FPGA读到的ADC结果偶尔是错误的,良品率就变低。
在这里插入图片描述
在这里插入图片描述

解决办法

找到AD7663接口程序,在状态机上添加对BUSY信号判断的状态,问题基本就解决了。小批量测试后,问题不再复现。窃喜,以为大功告成。殊不知大坑还在后面等着。上位机和DSP之间系统地址定义不一致的问题,FPGA管脚驱动能力弱带来的问题,甚至硬件板卡串扰的问题,折腾了好些时间。Mark一下好了,不一一絮絮叨叨。下回有时间分析下Bug修复前后的FPGA代码,应该也蛮有意思的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章