事情发生在2002年春天,我们公司历时一年开发下一版税控收款机。税控收款机需要获得国家有关机构的认证,并且必须符合对其构建和工作模式的相关要求。认证机构通常会签发证书,允许供应商三年内在这个国家销售收款机,在此期间,生产商不能对收款机的硬件或固件进行任何修改。如果做了任何修改,那么这些修改都需要重新认证,这不仅耗时,还会产生额外的费用,因此我们想确保我们的收款机没有潜在的问题。
在一个长周末里,我们每个人都高兴地计划着如何消磨闲暇的时间。然而,大约中午时分,生产部门通知我们,在测试一款收款机的主板时出现了一个问题。超过一半的板子在基本测试开始的时候就失败了(即组装后的第一次测试)。
这类故障过去也会发生,通常是组件安装问题引起的,例如安装不当或过程中有损坏,但这次安装似乎都很好。我的一位同事检查了电路板组件,一切也都很好。然后我们猜可能是测试仪坏了;我们注意到有时一块板子再多试一次就可以通过测试。
在接上示波器进行多次测试后,我们注意到问题的根源:可编程逻辑芯片(GAL16V8)并不会总将一个关键信号传送到其他芯片。
一开始,问题看起来似乎很明显:GAL在焊接之前没有进行编程,也有可能是包含错误内容,因此无法正常工作。但是当我们拆焊了一些 GAL然后检查它们之后,发现它们都有合适的内容,并且它们都通过了测试向量过程。然而,这些GAL仍然无法在板子上正常工作。组件问题?我们在不同型号收款机的许多其他板子中也使用了这些组件,因此我们决定也检查一下其他板子看看。我们发现只有一块板子出现了同样的情况。
我们准备了一块特殊版本的故障板——板子上专门为GAL提供了一个插口。然后我们找来了不同版本的GAL芯片并开始测试。几分钟后,我们就知道只有最新版的 GAL出现了问题。但这似乎又是不可能发生的——这是精心编程的 GAL,在编程器中使用专门准备的测试向量进行了测试,竟然有一半的时间在电路中不工作?
我们分析了采用这些GAL的电路板的配置,注意到GAL只有在用作地址解码器时,才会出现问题;在一些板子上,GAL用作多路复用器和解码器,这时候就没有任何问题。这一发现让我们明白了为什么只有两种采用新 GAL的电路板会出现问题,但为什么电路板有时候又会通过测试呢?我们想找出原因。
我们将电路板连接到测试仪,反复进行测试,同时观察GAL的电源。我们发现,只有当重新开始测试前GAL上的电源降到1V以下(对于旧版本的GAL是2V),板子才会通过测试。在这种情况下,收款机似乎永远不可能工作, 除非有人将收款机关电然后快速将其通电,情况可能就是这样。而当电源快速开、关时,GAL 上的电压不会低于1V,所以收款机会死机。
我们准备了一个特殊的测试电路来可靠地模拟生产测试过程中的问题,然后对 GAL的表现进行观察,并将观察结果反馈发送给GAL制造商。同时,我们还要准备一种能够“修复 GAL”的方法,使它们不再出现这样的故障。经过多次尝试后,我们注意到,只要(上电后)改变 GAL的一个输入的状态,就可以使其恢复正常运行。
我们对电路板做了小小的修改。GAL有一个空闲引脚,因此我们将其连接到µC复位信号。生产部门现在可以继续组装器件了。
几周后,GAL的制造商向我们解释了出现这种奇怪故障的可能原因。除了其他的一些修改,发生故障的GAL修订版采用了一种最新优化的内部结构,这改变了其内部电路的复位阈值。这可能是我们这个板子出现问题的根源。
经验教训:改进一个组件,有时候并不一定会使整个设计得到改进。
作者介绍:
Andrzej Winczura 在 ELZAB(波兰电子收款机制造商)的研发部门工作了近 20 年,最开始是硬件和固件设计师,后来开发嵌入式系统应用程序。
(原文刊登于Aspencore旗下EDN英文网站,参考链接:Cashing in on lessons in electronic design, part 1,由Jenny Liao编译。)