> 我花了3小时破的这桩案,真相让我沉默…


【案发现场】

那是一个普通的周二下午,我兴冲冲地拿到硬件同事刚焊好的STM32G431板子。5V上电,电源灯亮起,一切看起来都那么美好。我插好J-Link,打开Keil,点击Debug——

“J-Link found, but no target device found.”

啥?我揉了揉眼睛。J-Link识别到了,说明USB和调试器没问题;电源灯亮,说明供电没问题。那我的MCU呢?我的芯片呢?它明明就在那儿,却又好像不在那儿。


【第一轮侦查:软件工程师的自信】

"肯定是配置问题。"我嘀咕着,检查了一遍SWD线序:SWCLK、SWDIO、GND… 没问题。复位引脚电平?高电平,正常。晶振?示波器一打,8MHz稳稳当当。

"硬件,你检查一下板子是不是虚焊了?"我自信满满地把板子递回去。

十分钟后,硬件老哥还我板子:“重新补焊了,你试试。”

我点击下载——Success! 程序刷进去了,串口输出正常。我长舒一口气,把板子放在桌上,去接了杯咖啡。


【第二轮反转:薛定谔的芯片】

十分钟后回来,我想再验证一下功能。

点击Debug——“No target device found.”

???我咖啡差点喷出来。刚才明明可以,现在又不认了? 这芯片是薛定谔养的猫吗?观测的时候存在,不观测就消失?

我开始怀疑人生:

  • 线序?测了,通的。
  • 电源?5V稳稳的。
  • 复位?没毛刺。
  • 芯片温度?温温的,没烧。

这太诡异了。如果是硬件坏了,应该一直坏;如果是好的,应该一直好。这种"时灵时不灵"的状态,比彻底坏掉更让人抓狂。


【真相大白:显微镜下的"幽灵"】

"重新焊一下MCU吧,"硬件老哥也纳闷了,“这次用显微镜看着焊。”

热风枪呼呼作响,锡膏重新流动。当MCU被重新焊接后,我再次上电——稳定识别,连续下载20次,反复复位,纹丝不动。

🔍 真相揭晓:

是MCU底部的GND焊盘虚焊了。

这种"地平面虚焊"最阴险:

检测手段结果实际情况
万用表通断测试✅ 通的因为压在一起,有微弱接触
轻触/刚焊接后✅ 正常压力让触点暂时接触良好
电流增大/温度变化❌ 掉线接触电阻飘忽不定
J-Link通信⚠️ 时灵时不灵不稳定的地参考导致信号完整性问题

【结案陈词】

这次经历教会我几个血的教训:

1️⃣ "时灵时不灵"≈接触不良

如果故障不能稳定复现,先怀疑虚焊、接触不良、氧化,而不是软件配置。

2️⃣ 万用表≠万能表

通断测试只能证明"有连接",不能证明"连接可靠"。大功率GND焊盘必须亲自检查,特别是QFN封装的底部散热焊盘。

3️⃣ 热胀冷缩是试金石

那种"刚焊好能用,过会儿就挂"的症状,往往是热胀冷缩导致虚焊点分离的典型表现。

4️⃣ Debug端口识别分级诊断表

❌ 找不到J-Link 
   └── USB线/驱动/J-Link固件问题
   
⚠️ 找到J-Link,找不到Target 
   ├── 芯片未供电 (检查VDD)
   ├── SWD线序错误 (检查CLK/DIO是否反接)
   ├── 虚焊/接触不良 (🔥本文案例)
   ├── 芯片损坏 (更换MCU)
   └── 复位脚被拉低/晶振未起振
   
✅ 能找到但下载失败 
   ├── 芯片锁死 (需要解锁)
   ├── 代码占用了SWD引脚 (按住复位再点击下载)
   └── Flash写保护 (需要擦除)

排查Checklist(建议收藏)

下次遇到"幽灵芯片"时,按这个顺序排查:

  • 视觉检查:MCU引脚是否有连锡、虚焊、歪脚
  • 按压测试:用手指轻压MCU,看是否能识别(判断虚焊)
  • 供电测量:VDD是否为3.3V/5V(看芯片规格),GND是否稳固
  • 线序确认:SWCLK和SWDIO是否反接(常见于杜邦线)
  • 复位检查:NRST引脚是否被拉低,是否有电容漏电
  • 晶振验证:用示波器看是否有起振波形
  • 最终手段:重新焊接MCU,特别是底部GND焊盘
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐