Floppy Emu 调试奇遇:晶振引发的故障
Adventures in Microcontroller Circuit Debugging

几个月前,我生产的新一批 Floppy Emu 设备在工厂质检中出现了从未见过的诡异故障:有的完全无法启动,有的表现出类似“闹鬼”的随机代码跳转,还有的运行速度极慢。凭借多年调试 ATMEGA1284 的经验,我排除了电源、芯片编程等问题,甚至更换了芯片也无济于事。最终,通过将时钟源切换到内部 8 MHz 振荡器,问题迎刃而解。真相竟是新批次更换的 ECS 晶振与原有电路不兼容。这次经历再次提醒我们,即便是微小的元器件变更,也可能引发难以捉摸的系统级故障。
是的,尽管我手头拥有各种先进的硬件工具,但我还是不得不退回到用闪烁 LED 灯进行原始调试的‘原始人’模式。
- kosma
我在量产时也遇到过同样的问题,只不过晶振来自同一家制造商、同一型号,只是批次不同。排查起来还挺有意思。
- in_absentia
我怀疑作者说得对不对;给时钟电路用个稍微不对的电容(考虑到它们出厂公差通常是 +/-10% 甚至更差)可能会导致振荡频率不同,但通常不会直接导致故障。这些芯片能接受的时钟频率范围其实挺宽的。
在评论里他们提到:
“我把其中一块无法工作的板子上的 18pF 电容换成了 10pF,但它仍然无法启动或响应调试器。这让我很惊讶——我以为问题就出在这儿!这是一次匆忙的返修,搞得有点乱,包括不小心把晶振拆下来又装回去了,所以我打算稍后用另一块板子再试一次。但看起来电容数值可能根本不是问题所在。要么是 10pF 这个值不合适,要么是晶振本身有问题,要么就是我在故障排查的逻辑上哪里出错了。嗯。”
根据我的经验,神秘的稳定性问题往往是由电容引起的,但通常是另一种:电源引脚上的去耦电容。如果数量不足以应对来自电机或数字开关产生的噪声,我预计会出现完全一样的问题。某些板子上会出现间歇性的“不可能”CPU 状态,毫无规律可循(因为有时候那 +/-10% 能救你,有时候则不行)。我会建议多加些电容,可能再加几个铁氧体磁珠。
- mrlambchop
我不是电气工程师,但读到第二句时我就对自己说“肯定是外部时钟源的问题”,然后浑身一激灵,想起多少次代工厂用了些老旧的晶振或第三方元器件,却没更新匹配的电容,导致我过去参与的项目出现过非常类似的问题。最糟糕的是晶振老化——一阵暖风就能让它们暂时工作一段时间,这很糟糕,如果工厂环境温度偏高(比如 26°C 左右),结果你把这批货发到了欧洲,而那里正值初冬……