那个让项目延期两周的 5 分钱电容
那是三年前的一个冬天,我们正在赶一个工业物联网网关的量产交付。
噩梦开始
周五下午,产线发来消息:“有一批板子,上电运行大概几分钟后就会自动重启。不良率大概 5%。”
我的第一反应是:“软件看门狗(Watchdog)复位了。” 于是我立刻查看了存放在 Flash 里的 Crash Log,结果显示——没有任何 Log。如果是软件死机,HardFault Handler 肯定会记录下来。
没有 Log,说明复位发生得极快,连写 Flash 的时间都没有。
排查过程
Round 1: 怀疑电源
我拿了一台故障机,接上示波器抓 3.3V 电源。
运行… 重启!
波形显示,重启瞬间 3.3V 有一个微小的跌落,但只有 0.1V,按理说 MCU 的 BOR (Brown-out Reset) 阈值是 2.8V,不应该复位啊。
Round 2: 怀疑还是软件
我在代码里插了很多桩,甚至禁用了看门狗。
依然重启。而且重启的时间毫无规律,有时是 1 分钟,有时是 10 分钟。这意味着这可能不是代码逻辑死锁,而是某种随机事件。
Round 3: 玄学现场
最诡异的事情发生了。当我把仿真器(J-Link)挂上去想 catch 复位现场时,它死活不复位了。一拔掉 J-Link,马上复位。
同事开玩笑说:“这板子怕你。”
其实这是典型的 Heisenbug:观测行为改变了系统状态(J-Link 的 GND 线改善了板子的接地?)。
真相大白
被折磨了一周后,硬件老法师拿出了高频电流探头。
我们发现,当 Wi-Fi 模块启动发送数据的一瞬间,电源线上有一个极短的尖峰脉冲(Glitch),幅度很大,直接把 MCU 的复位引脚 (NRST) 干扰到了。
再看 PCB 图,我倒吸一口凉气。
MCU 的去耦电容(Decoupling Capacitor,就是那颗 5 分钱的 100nF 0402 电容),竟然离 MCU 引脚有 2 厘米远!
而且,Wi-Fi 模块的供电走线,刚好从 MCU 下面穿过。
因为布线工程师的疏忽,这颗电容完全没起到“就近蓄水”的作用。Wi-Fi 一抽风,MCU 就“渴”得复位了。
结局
因为已经贴片了,无法改板。如果你见过那个画面,你一定毕生难忘:产线工人在显微镜下,用漆包线把电容直接“飞”到了 MCU 的引脚上。
那个月,我们的奖金全扣光了。
教训
去耦电容必须尽量靠近引脚!
去耦电容必须尽量靠近引脚!
去耦电容必须尽量靠近引脚!
重要的事情说三遍。有些规则写在书上你记不住,只有痛一次,你才刻骨铭心。
- Title: 那个让项目延期两周的 5 分钱电容
- Author: Evek Golden
- Created at : 2025-03-04 21:30:00
- Updated at : 2026-06-12 08:57:02
- Link: https://blog.cocodemo.uno/posts/debug5c9/
- License: This work is licensed under CC BY-NC-SA 4.0.