示波器抓 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从设备不拉低 SDASDA 保持高电平。二、✅ 正确的 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 栈溢出压力测试如何故意把系统搞崩来证明其稳定》。