示波器抓 I2C 时序:如何一眼看出 ACK 没拉低?
摘要:I2C 通信失败,逻辑分析仪看着“有波形”,但示波器一看全是破绽。很多时候,问题不在“有没有波形”,而在ACK 信号的“坡度”和“幅值”。本文将教你识别那些“看起来像 0,实际是 1”的假低电平。
一、真实波形长什么样?(视觉对标)
为了让你能对着示波器调,我们先描述一下教科书级的正常波形:
1. 正常的 START 信号(干净利落)
SCL: ──────┐ ┌─────── │ │ └───────┘ SDA: ──────┐ └─────────────── ↑ SDA 快速下坠(< 20ns)视觉特征:SDA 的下降沿几乎是垂直的,没有圆角,没有回勾。
2. 正常的 ACK 信号(扎实的深槽)
这是本文的重点。在第 9 个时钟脉冲期间,SDA 应该被从设备狠狠地拉低。
好问题,这一点很多工程师工作了几年都说不清楚 😄
我分“文字描述(你写文章用)” 和“示波器真实长相(你对照看 / 配图用)” 两部分说。
一、I2C 的 ACK 波形到底是什么?
1. 基本规则(复习)
ACK:从设备在第9 个 SCL 脉冲期间,把SDA 拉低(Low)。
NACK:从设备不拉低 SDA,SDA 保持高电平。
二、✅ 正确的 ACK 波形(示波器看到的)
假设 7 位地址 + W = 已发完,接下来是 ACK 位:
时间轴 → SCL: ────┐ ┌───┐ ┌───┐ ┌───────┐ ┌─── │ │ │ │ │ │ │ └───┘ └───┘ └───┘ └───┘ ↑ 第 9 个脉冲(ACK 时隙) SDA: ────────┐ ┌─────────────── │ 低电平 │ └───────────────┘ 0.1V ~ 0.3V视觉特征:
SCL 高电平期间,SDA 被牢牢地按在 0V 附近(0.1V ~ 0.3V)。
波形像被凿子凿出来的深槽,而不是平缓的斜坡。
槽底平坦,没有抖动。
二、异常波形:90% 的坑都在这(重点)
这才是你刚才吐槽的点——那些“似是而非”的危险波形。
1. 坑位一:ACK 拉不深(最隐蔽,也是最经典的坑)
波形描述:
SCL: ────┐ ┌─── │ │ └───┘ SDA: ───────┐ ─────── │ 1.5V └───────┘视觉特征:
SDA 确实下去了,但下不去。
它像是一个缓坡,停在 1.5V 左右,而不是一条直线趴在 0V。
本质:从设备的 MOS 管导通电阻太大,或者上拉电阻太小(电流太大拉不动)。
后果:主机(MCU)认为“这不是低电平”,判定通信失败。
2. 坑位二:上升沿太圆(容性负载)
波形描述:
SCL: ──────┐ ┌─────── │ (圆弧) │ └─────────┘ SDA: ──────┐ ┌─────── │ (圆弧) │ └─────────┘视觉特征:
波形不是直角,而是像山坡一样圆滑。
在 400kHz 下,这种圆角会导致采样点错过。
本质:总线电容太大(线太长、分支太多、上拉太弱)。
3. 坑位三:毛刺干扰(静电/电源)
波形描述:
SDA: ──────┐ ┌─────── │ /\/\ │ └──┘ └─┘ ↑ 毛刺 (Spikes)视觉特征:在 SDA 应该平稳的时候,突然冒出尖刺。
本质:电源噪声串入,或者静电干扰。
三、示波器上的“金标准”参数(直接读数值)
别光看形状,看右下角的测量值:
参数 | 正常值 | 异常值 | 含义 |
|---|---|---|---|
V_low (ACK) | < 0.3V | > 0.7V | 低电平不合格 |
V_high | > 2.97V (3.3V*0.9) | < 2.97V | 高电平不合格 |
Rise Time | < 1us (100kHz) | > 2us | 上拉太弱或电容太大 |
Fall Time | < 300ns | > 1us | 驱动能力不足 |
四、工程级“排雷”步骤(对着波形改)
1. 看到 ACK 停在 1.5V?
动作:换大阻值的上拉电阻(4.7k -> 10k),或者换驱动能力强的从设备。
2. 看到上升沿像山坡?
动作:减小上拉电阻(10k -> 4.7k),或者缩短 SDA/SCL 走线,减少分支。
3. 看到毛刺?
动作:在 SDA/SCL 靠近 MCU 引脚处并联 100pF ~ 220pF 的小电容(会牺牲一点速度,但抗干扰)。
五、写给读者的“看图说话”口诀
口诀一:低不平,就是零;高不硬,就是病。
口诀二:直角快,圆角慢;毛刺多,电源乱。
六、写在最后(关注我,少走弯路)
我是 gqqsherry666,一个拒绝调包、专注底层逻辑的嵌入式工程师。
逻辑分析仪告诉你“发生了什么”,示波器告诉你“为什么发生”。
学会看 ACK 的“坡度”,你就从“调库工程师”进阶为“信号分析师”。
关注我,下一篇我们聊《RTOS 栈溢出压力测试:如何故意把系统搞崩来证明其稳定》。