科通芯城教你随机故障的排查
科通芯城教你随机故障的排查
科通芯城,中国IC元器件在线采购的领跑者,通过整合行业资源,运用创新的自营电商模式为客户提供丰富的原厂正品及专业的增值服务,引领全新的IC元器件采购方式变革。
我们给企业做的样机出现了一种随机故障:多数情况下,仪器工作正常,先进行不定长度的噪音检测,然后开始正式采集,噪音很小,采集信号也正确。但是,偶然的,噪音检测信号突然变得很大。关机再开机,一切又正常了。
让故障重复发作,需要足够的耐心。找到重复发作的规律,又需要足够缜密的思维。反正,谁遇到这种随机故障,都是头大。
我们先对异常的信号进行了分析,很快就找到了异常的表象原因:我们的每个样点数据都是32位的,其中高8位(简称A)是通道号标记,有规律,低24位(简称B/C/D)是实际数据。通过简单的分析就能发现,异常的原因是高16位和低16位颠倒了。如果原始噪音数值密布在低8位D上,那么新的数据格式是C/D/A/B,显然,数据就变得庞大且混乱。
但是,是谁让高16位和低16位发生了颠倒,却让我们伤透了脑筋。先陈述一下我们的设计:上位机是PC机,中间级是DSP,底层是FPGA和ADC。上位机发出两种工作模式,第一是噪音检测,就是在**爆炸前,先检测背景噪音,如果太大,就不引爆**,如果合适,就进入正常采集模式,也就是第二种工作模式。注意,第二种工作模式,全套流程都是确定性的,但第一种模式,隐含着随机性,测试员观察背景噪音,觉得噪音不大,他随时都可以终止目前的噪音检测,而进入正常采集。
这个终止的时刻,就是随机的根源。
ADC每125us吐出一次数据交给FPGA,是32位的。FPGA把他们摆放成高16位,低16位两个寄存器中,同时DSP实施一次读操作,FPGA自动将高低计数器HL实施0、1转换。注意,DSP成功读取全部数据,需要10us~23us,一旦读完,高低计数器自然归零。因此,如果在DSP不读取数据的时刻,终止程序进入第二模式,就不会发生任何问题。在DSP读取了偶数次,HL也归零,也不会出问题。问题在于,如果DSP刚好读取了奇数次,接到了高级中断,迫使其退出读取,准备实施第二模式(正常采集)时,HL仍处在1状态。
此时,DSP向FPGA发出了复位信号,按说可以对HL进行清零,但是问题就出现在这里。我们的学生设计的流程中,DSP虽然接到高级中断,请求进入第二模式,也向FPGA发出了复位命令。但是,FPGA没有清零HL计数器。
这样,启动正常采集后,DSP读取的第一个数据,不是应该的高16位,而是低16位,数据就乱套了。
我们随后分析了出现概率,125us一次中,如果高级中断发作于10us~23us之外,不会出问题。发作于10us~23us之内,也只有刚好读取了奇数个数据时,才会出问题。因此故障概率为(5~11.5us)/125us,大约是1/25~1/10.8。
事实证明,我们的实验,有时第一次就出错,有时七八次,但是绝大多数情况下,30次之内必然出错。这与我们的分析完全吻合。我猜测,在错误的情况下,继续实施噪音检测,肯定会在相同的概率下,由错误再回归到正确。