2. 硬件调试工具:示波器、逻辑分析仪、万用表在调试中的角色与实战用法
做嵌入式调试,说白了就是跟看不见的信号打交道。软件出问题还能加打印,硬件出问题呢?电流、电压、时序,这些东西摸不着。这时候就得靠三大件:万用表、示波器、逻辑分析仪。
我刚开始做嵌入式那会儿,总觉得一把烙铁、一块万用表就能走天下。后来被一个毛刺信号折磨了三天,才老老实实把示波器探头焊上去。嗯,工具用对了,问题就解决了一半。
2.1 万用表:调试的第一道防线
万用表这东西,看着简单,用好了能省一半时间。我个人的习惯是:上电之前,先拿万用表量一遍电源对地电阻。你想想看,如果电源和地已经短路了,一上电板子就冒烟,后面还调什么?
| 测量项目 | 典型值 | 异常判断 |
|---|---|---|
| 电源对地电阻 | >1kΩ(视电路而定) | <10Ω 可能短路 |
| 3.3V 电源电压 | 3.3V ± 5% | 偏低:负载过重或电源故障 |
| GPIO 引脚电平 | 0V 或 3.3V | 中间值:引脚浮空或损坏 |
| 晶振引脚电压 | 约 VCC/2 | 0V 或 VCC:晶振未起振 |
万用表最适合排查这类问题:
- 电源没电 —— 量一下 LDO 输入输出,立马知道哪段断了。
- 引脚电平不对 —— 比如 I2C 的 SDA 线一直低电平,可能是从设备拉死了总线。
- 虚焊/短路 —— 通断档一测,滴滴响就是通,不响就是断。
但万用表有个硬伤:它只能看到“平均值”。一个 PWM 信号,万用表测出来可能是 1.65V,你根本不知道它是 50% 占空比的方波,还是 1.65V 的直流。这时候就得请出示波器了。
2.2 示波器:调试的“眼睛”
示波器是我最常用的调试工具,没有之一。它能让你“看见”信号的变化。我记得有一次调试一个电机驱动板,电机转起来嗡嗡响,万用表测电源纹波只有几十毫伏,看着正常。但示波器一抓,好家伙,开关节点上有 200MHz 的振铃,幅度都快赶上电源电压了。
示波器调试的几个关键参数:
| 参数 | 建议设置 | 说明 |
|---|---|---|
| 带宽 | 信号频率的 5 倍以上 | 100MHz 信号,至少用 500MHz 示波器 |
| 采样率 | 带宽的 2.5 倍以上 | 保证波形重建不失真 |
| 探头衰减 | x10(高频信号) | x1 档带宽通常只有 6-10MHz |
| 时基 | 根据信号频率调整 | 1kHz 信号用 1ms/div 左右 |
实战中,我一般这样用示波器:
- 先看电源 —— 上电后第一件事,抓一下 3.3V 和 5V 的纹波。纹波超过 50mV 就要警惕了。
- 再看时钟 —— 晶振输出有没有?频率对不对?幅度够不够?
- 最后看通信 —— SPI 的 SCK 有没有毛刺?UART 的起始位是不是干净?
举个例子,调试 UART 通信时,我会把探头挂在 TX 引脚上,设置触发电平为 1.65V(3.3V 的一半),下降沿触发。这样一按发送,波形就稳稳地停在屏幕上。看一眼波特率对不对,起始位、数据位、停止位是不是完整,问题基本就清楚了。
2.3 逻辑分析仪:调试的“时间机器”
示波器再好,通道数也有限。一般就 2 通道或 4 通道。你要同时看 SPI 的 MOSI、MISO、SCK、CS 四根线,示波器就捉襟见肘了。这时候逻辑分析仪就派上用场了。
逻辑分析仪不关心电压的具体值,它只关心“高”还是“低”。所以它通道多(16 通道、32 通道甚至更多),存储深度大,能长时间记录数字信号的变化。
我个人觉得,逻辑分析仪最强大的功能是协议解码。你想想看,SPI 通信,用示波器看,只能看到一堆方波,你得自己数时钟、对数据。用逻辑分析仪,设置好 SPI 协议,它直接给你解出来:地址 0x12,写入数据 0x34。一目了然。
逻辑分析仪的使用步骤:
- 接线 —— 把通道夹子夹到目标引脚上,共地线一定要接。
- 设置触发 —— 比如 I2C 起始条件(SDA 下降沿时 SCL 为高),或者 UART 起始位(下降沿)。
- 设置采样率 —— 一般设为信号波特率的 10 倍以上。比如 115200 的 UART,采样率设 2MHz 就够。
- 捕获并解码 —— 点击开始,触发条件满足后自动停止,然后选协议解码。
| 协议 | 典型采样率 | 触发设置 | 常见问题 |
|---|---|---|---|
| UART | ≥ 1MHz | RX 下降沿 | 波特率不匹配、极性反 |
| SPI | ≥ 10MHz | CS 下降沿 | 极性/相位不匹配、MISO 没数据 |
| I2C | ≥ 4MHz | SDA 下降沿(SCL 高) | 地址错误、无 ACK、时钟拉伸 |
| 1-Wire | ≥ 2MHz | 下降沿 | 时序过紧、上拉电阻太小 |
2.4 三者的配合使用
实际调试中,这三个工具不是孤立的。我总结了一个“三板斧”流程:
- 第一板斧:万用表 —— 上电前测电阻,上电后测电压。排除明显的电源问题和短路。
- 第二板斧:示波器 —— 抓关键信号波形,看幅度、频率、上升时间、毛刺。确认信号质量。
- 第三板斧:逻辑分析仪 —— 多通道同时捕获,做协议解码,看通信内容是否正确。
举个例子,调试一个 SPI 闪存读写:
- 万用表先量 VCC 和 GND,确认供电正常。
- 示波器抓 SCK 时钟,看频率对不对,波形干不干净。
- 逻辑分析仪挂上四根线,发一个读 ID 命令,看返回的数据是不是预期的 0xEF 0x40 0x18。
如果第三步发现数据不对,再回到第二步,用示波器看 MISO 线上的信号质量。是不是上升沿太缓?是不是有串扰?这样一层层往下查,问题跑不掉。
好了,这一章的内容就这些。工具是死的,人是活的。多动手,多积累,慢慢你就会有感觉:听到板子叫一声,就知道大概是哪里的问题。这就是经验。