新闻详情

新闻详情

首页 / 资讯中心 / 详情

I2C通信故障排查全流程:从万用表到示波器,搞定ACK与波形异常

发布时间:2026/9/25 11:29:32来源:尧图网络
I2C通信故障排查全流程:从万用表到示波器,搞定ACK与波形异常
1. 从一根总线说起I2C 排查到底难在哪I2C 这东西说简单也简单两根线一挂上拉电阻一焊代码一跑理论上就能通信。但真到了板子不认、数据读不出来、ACK 死活等不到的时候很多人第一反应就是——换芯片、换板子、重焊一遍。结果折腾半天问题还在。我这些年调过的 I2C 设备不算少从 EEPROM、OLED 屏、各种传感器到多路复用器踩过的坑基本覆盖了“完全没波形”“波形有但数据错”“数据对但从机不响应”“低速能跑高速就挂”这几大类。这篇文章就把我实际排查 I2C 的完整流程拆开讲清楚从最基础的万用表静态检查到示波器抓波形看时序再到 ACK 位到底怎么判读每一步该看什么、该量什么、该注意什么都给你说明白。适合谁看如果你是刚接触 I2C 的嵌入式新手照着这个流程走一遍基本能定位八成以上的常见故障如果你是有经验的工程师也可以对照检查一下自己的排查习惯有没有遗漏。全文不堆协议原文重点放在“手上有什么工具、该怎么用、看到什么现象对应什么问题”这条实操主线上。2. 排查前的静态检查万用表能帮你排除一半的低级问题2.1 为什么先上万用表而不是直接接示波器很多人一遇到 I2C 不通第一反应是拿示波器抓波形。示波器确实能看到最真实的总线状态但它有个前提你的硬件连接本身得是通的。如果 SDA 或 SCL 某根线虚焊、上拉电阻没焊、电源没供上示波器抓到的要么是平线要么是乱七八糟的耦合噪声反而容易把你带偏。万用表的优势在于“静态、确定”。它不关心时序只告诉你这根线现在是什么电平、两点之间通不通、电阻是多少。I2C 故障里相当一部分是硬件层面的低级问题——断线、短路、上拉缺失、电源异常。这些问题用万用表几分钟就能排除没必要一上来就动用示波器。我一般的顺序是先断电测通断和电阻再上电测静态电平最后才接示波器看动态波形。这个顺序能帮你把问题范围快速缩小。2.2 断电测通断找出虚焊和断线断电状态下万用表打到蜂鸣档通断档重点测这几个点主控的 SDA 引脚到从机 SDA 引脚之间是否导通主控的 SCL 引脚到从机 SCL 引脚之间是否导通从机的 VCC 引脚到电源正极是否导通从机的 GND 引脚到电源地是否导通这里有个细节如果你用的是多从机总线要分别测每一段。我遇到过一次主控到第一个传感器是通的但第一个传感器到第二个传感器的排线有一根断了结果就是第一个设备正常、第二个死活不认。分段测通断能直接定位到是哪一段的问题。注意测通断一定要断电。带电测电阻或通断万用表读数不准还可能损坏表或电路。2.3 测上拉电阻I2C 的“隐形命脉”I2C 是开漏输出SDA 和 SCL 都必须接上拉电阻才能拉到高电平。没有上拉总线永远是低电平或者浮空通信根本无从谈起。用万用表电阻档测 SDA 对 VCC 的电阻、SCL 对 VCC 的电阻。正常情况下应该读到上拉电阻的阻值常见是 4.7kΩ、10kΩ 这个量级。如果你读到的是无穷大说明上拉电阻没焊或者断了如果读到接近 0Ω说明可能短路了。上拉电阻的取值不是随便选的它和总线电容、通信速率有关。简单估算公式是Rp(max) tr / (0.8473 × Cb)其中 tr 是上升时间要求Cb 是总线总电容。标准模式 100kHz 下tr 最大 1000ns快速模式 400kHz 下tr 最大 300ns。假设总线电容 100pF快速模式下 Rp(max) ≈ 300ns / (0.8473 × 100pF) ≈ 3.5kΩ。所以 4.7kΩ 在 400kHz 下其实偏大上升沿可能不够陡。这也是为什么有些板子低速能跑、高速就挂——上拉太弱边沿爬不上去。2.4 上电测静态电平判断总线是否被拉死上电但不通信的状态下用万用表直流电压档测 SDA 和 SCL 对地的电压。正常情况应该是接近 VCC比如 3.3V 系统读到 3.2V 左右。如果读到 0V 或者明显偏低说明总线被某个设备拉死了。常见原因有某个从机芯片损坏把 SDA 或 SCL 内部短到地主控引脚配置错误输出低电平总线上有短路这时候可以逐个断开从机看电压是否恢复快速定位是哪个设备把总线拉死的。这个操作比接示波器看半天波形要快得多。3. 示波器抓波形看懂 I2C 的“心电图”3.1 探头怎么接、触发怎么设静态检查没问题就上示波器。I2C 排查至少需要两个通道一个接 SDA一个接 SCL。如果示波器通道够再留一个接从机的电源或者中断引脚方便对照。探头接地要短最好用探头自带的弹簧地针不要用长长的鳄鱼夹地线。I2C 速率虽然不高但边沿比较陡长地线会引入振铃和噪声让你误判波形质量。触发设置是很多人忽略的点。我一般这样设触发源选 SCL触发类型选下降沿触发电平设在 VCC 的一半左右比如 3.3V 系统设 1.6V触发模式先用 Normal抓不到再切 Auto为什么要用 SCL 下降沿触发因为 I2C 的数据在 SCL 高电平期间必须稳定下降沿之后才允许变化。以 SCL 下降沿为触发点你能稳定看到每一位数据的建立和保持过程。3.2 正常 I2C 波形长什么样先建立“正常”的参照。一次完整的 I2C 传输包括起始条件SCL 高电平时SDA 从高变低地址帧7 位地址加 1 位读写位共 8 位ACK 位从机拉低 SDA 表示应答数据帧每 8 位数据后跟 1 位 ACK停止条件SCL 高电平时SDA 从低变高在示波器上你应该看到 SCL 是一串规整的方波SDA 在 SCL 高电平期间保持稳定在 SCL 低电平期间变化。起始和停止条件表现为 SDA 在 SCL 高电平时的跳变。如果 SCL 方波都不规整——比如上升沿很缓、占空比严重不对称、频率忽高忽低那先别管数据先把时钟问题解决。时钟不对后面全是白搭。3.3 用示波器判断常见异常波形几种典型异常和对应判断波形现象可能原因排查方向SCL 无波形主控没发起通信、引脚配置错误检查代码、引脚复用配置SDA 一直低从机拉死、短路、上拉缺失断电测通断、逐个断开从机SCL 有波形但 SDA 不动主控 SDA 引脚未正确配置为开漏检查 GPIO 模式上升沿明显变缓上拉电阻过大、总线电容过大减小上拉、缩短走线波形有振铃走线过长、阻抗不匹配、地线太长缩短走线、改善接地时钟频率不对分频配置错误核对主控时钟配置我印象比较深的一次是某块板子 I2C 时好时坏。示波器抓下来发现 SCL 上升沿在有些时候会“塌”下去一块像是被什么东西拽住了。后来查出来是旁边一路 PWM 走线和 SCL 平行走了很长一段耦合导致的。把走线分开就好了。这种问题万用表测不出来只有示波器能看到。3.4 100kHz 和 400kHz 的波形差异标准模式 100kHz 和快速模式 400kHz对波形的要求不一样。100kHz 下上升时间要求宽松普通 10kΩ 上拉加短线就能跑。400kHz 下每一位只有 2.5μs上升时间必须控制在 300ns 以内否则高电平还没建立起来时钟就翻转了从机采样到的可能是中间电平直接导致误码。用示波器看 400kHz 波形时重点看上升沿是否能在 300ns 内从 0.3VCC 爬到 0.7VCC。如果爬不上去要么减小上拉电阻要么降低总线电容缩短走线、减少挂载设备。我一般会在 400kHz 下把上拉降到 2.2kΩ 甚至 1.5kΩ 试试但也不能太小否则低电平时灌电流太大有些从机拉不到足够低的电平。4. ACK 位I2C 通信的“握手确认”4.1 ACK 到底是怎么产生的ACK 是 I2C 通信里最关键的反馈机制。主机发送完 8 位地址或数据后会释放 SDA 线然后在第 9 个时钟周期读取 SDA 电平。如果从机正确接收会把 SDA 拉低这就是 ACK如果从机没响应SDA 保持高电平就是 NACK。这里有个容易搞混的点ACK 是接收方拉低 SDA不是发送方。主机发地址时从机是接收方从机拉低 SDA 表示“我在我收到了”。主机读数据时主机是接收方主机拉低 SDA 表示“我收到了继续发”主机发 NACK 表示“我收够了别再发了”。用示波器看 ACK就是把时间轴展开找到第 9 个 SCL 脉冲看那个脉冲高电平期间 SDA 是不是被拉低了。如果 SDA 一直是高就是 NACK。4.2 用示波器定位 ACK 失败的步骤ACK 失败是 I2C 排查里最常见也最让人头疼的问题。我的定位步骤是这样的先确认地址对不对。7 位地址左移一位最低位是读写位。很多人栽在地址上比如把 7 位地址当成 8 位用或者读写位搞反。抓起始条件后的第一个字节数清楚 8 个 SCL 脉冲看第 9 个脉冲时 SDA 的状态。如果第一个字节就 NACK说明从机根本没应答重点查地址、供电、从机是否复位。如果地址 ACK 了但数据字节 NACK说明从机在但可能寄存器地址不对、写保护没解除、或者从机内部忙。如果读操作时主机发 NACK那可能是正常的表示主机不想再读了。实操心得抓 ACK 时把示波器时间轴设成“每格一个 SCL 周期”左右这样数脉冲最方便。比如 100kHz 下一个周期 10μs时间轴设 10μs/格一个脉冲占一格一眼就能数到第 9 个。4.3 地址 ACK 了但数据不通的几种情况地址能 ACK说明从机活着、地址对、总线基本正常。但数据不通问题往往更隐蔽寄存器地址错误从机内部寄存器地址写错读出来的是别的寄存器或者写不进去。写保护有些 EEPROM 有 WP 引脚拉高时禁止写入你写数据它不 ACK 或者 ACK 了但不生效。从机忙某些传感器转换期间不响应需要等转换完成再读。时序参数不满足比如某些从机要求特定的建立时间、保持时间主控太快或太慢都会出问题。多字节传输中间断掉连续读时中间某个字节 NACK可能是从机内部地址翻转或缓冲区溢出。我遇到过一次 GT911 触摸屏 I2C 通信失败地址能 ACK但读出来的坐标全是 0。后来查出来是复位时序不对芯片没真正初始化完成就开始读它虽然 ACK 了地址但内部状态机还没准备好。把复位后的延时加够就好了。4.4 逻辑分析仪和示波器在 ACK 排查上的分工示波器看 ACK 是“看电平”逻辑分析仪是“看协议”。逻辑分析仪能把 SDA 和 SCL 直接解码成地址、数据、ACK/NACK省去你手动数脉冲的麻烦。如果手头有逻辑分析仪排查 ACK 会快很多。但逻辑分析仪也有局限它只能告诉你“协议层面发生了什么”不能告诉你“波形质量怎么样”。如果上升沿太缓导致从机采样错误逻辑分析仪可能显示 NACK但你不知道是电气问题还是协议问题。所以我的习惯是逻辑分析仪快速定位到哪一帧出问题再用示波器看那一帧的波形质量两者结合。5. 从现象到根因一套可复用的排查流程5.1 第一步确认电源和地不管什么现象先测从机电源。万用表直流档测从机 VCC 引脚对 GND 的电压确认在芯片工作范围内。有些芯片标称 3.3V但实际低于 3.0V 就不工作了。地也要测确保从机地和主控地是共地的。我见过一次两块板子分别供电地没连I2C 怎么都不通连上地就好了。5.2 第二步静态测总线和上拉断电测 SDA、SCL 通断测上拉电阻阻值。上电测 SDA、SCL 静态电平。这一步能排除大部分硬件低级问题。5.3 第三步示波器看时钟和数据接示波器先看 SCL 有没有波形、频率对不对、边沿质量如何。再看 SDA 有没有随 SCL 变化。如果 SCL 都没有问题在主控侧如果 SCL 正常但 SDA 不动问题在 SDA 通路或从机侧。5.4 第四步定位 ACK 失败点找到第一个 NACK 出现的位置。是地址字节就 NACK还是数据字节才 NACK。地址 NACK 查地址、供电、从机复位数据 NACK 查寄存器、写保护、时序。5.5 第五步对照数据手册核对时序如果前面都正常但通信仍不稳定就要翻从机数据手册核对关键时序参数起始建立时间、数据保持时间、时钟频率范围、ACK 建立时间等。用示波器测量实际波形是否满足这些参数。很多时候问题就出在“主控太快从机跟不上”或者“主控太慢从机超时”。6. 常见问题速查与避坑经验6.1 常见问题速查表现象优先排查工具完全无波形主控引脚配置、代码是否发起通信示波器、代码检查SCL 有 SDA 无SDA 引脚模式、上拉、从机是否拉死万用表、示波器地址 NACK地址值、供电、从机复位逻辑分析仪、示波器数据 NACK寄存器地址、写保护、从机忙逻辑分析仪、数据手册低速正常高速失败上拉电阻、总线电容、上升时间示波器偶发通信错误走线耦合、电源纹波、地弹示波器多从机时好时坏地址冲突、总线电容过大逐个断开排查6.2 几个容易踩的坑坑一上拉电阻只焊了一根线。有些人 SDA 焊了上拉SCL 忘了结果 SCL 永远拉不高。万用表测一下就能发现。坑二地址搞错。7 位地址和 8 位地址混用是重灾区。数据手册给的是 7 位地址代码里要左移一位再或上读写位。我习惯在代码里把地址定义成 7 位调用时统一左移避免混乱。坑三总线电容过大。挂的设备越多、走线越长总线电容越大上升沿越缓。I2C 规范建议总线电容不超过 400pF。超了就要减小上拉或者加总线缓冲器。坑四忽略从机复位时间。很多从机上电后需要几毫秒到几十毫秒的初始化时间这期间不响应 I2C。代码里上电就立刻通信必然失败。加个延时或者读状态寄存器等就绪。坑五示波器地线太长。长地线引入的振铃会让你误以为波形有问题其实电路本身没问题。用短地针或者至少把地线夹在靠近测试点的地方。6.3 我的个人经验总结调 I2C 这些年最大的体会是先静态后动态先电源后信号先时钟后数据先地址后数据。这个顺序能让你用最少的时间缩小问题范围。另外别迷信“换一个就好了”。换芯片能解决的问题往往是芯片本身坏了或者焊接不良但如果你不知道为什么坏下次还会坏。找到根因比换十个芯片都有价值。还有一点数据手册一定要看。很多问题手册里都写了只是你没注意到。比如某个传感器的 I2C 地址有两个可选由某个引脚决定比如某个 EEPROM 写入后需要 5ms 内部写周期这期间不响应。这些细节不看手册靠猜是猜不出来的。最后分享一个小技巧如果手头没有逻辑分析仪可以用示波器的“单次触发”功能把触发点设在起始条件上然后慢慢展开时间轴一位一位地数。虽然慢但准确。数几次之后你对 I2C 帧结构的理解会深刻很多以后再抓波形一眼就能看出问题在哪。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明 2026/9/25 18:25:53

【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明

机器视觉通用平台V5.0版本发行说明地址 了解更多 System.Windows.Controls 命名空间 | Microsoft Learn 控件库 - WPF .NET Framework | Microsoft Learn WPF 介绍 | Microsoft Learn 使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn https://github.co…

阅读更多 →
只用一个问题训练几百步,模型居然还在变强:一篇论文的意外发现 2026/9/25 18:25:34

只用一个问题训练几百步,模型居然还在变强:一篇论文的意外发现

先说一件让人有点摸不着头脑的事。有研究团队拿出一个数学题,就一道题,反复喂给模型训练了上千步。按常理这事儿应该很快就练废了,一道题能有多少信息量?可结果是,模型的准确率一路涨,涨到接近用全部一万七千道题训练出来的效果的七成二。这不是巧合,也…

阅读更多 →
Atlas 300V 24G实战:从NPU选型到YOLO生产级部署 2026/9/25 18:25:34

Atlas 300V 24G实战:从NPU选型到YOLO生产级部署

刚拿到Atlas 300V 24G这块卡的时候,我第一反应也是——这不就是一块显存比较大的“图像处理卡”吗?直到把YOLO模型完整跑完一遍,才真正搞明白它和普通GPU加速卡的区别。这篇文章不整虚的,就围绕两个实际问题展开:Atlas…

阅读更多 →
小模型能当裁判吗?一场关于强化学习奖励成本的实验 2026/9/25 18:25:28

小模型能当裁判吗?一场关于强化学习奖励成本的实验

先问你一个问题。如果你要训练一个AI模型写深度研究报告,怎么判断它写得好不好?数学题有标准答案,代码题能跑测试用例,可一篇论文该不该给9分还是7分,谁说了算?过去几年,大模型圈子里流行的做法…

阅读更多 →
数据闭环分层抽帧策略从 TB 级采集数据中提取高价值帧:三道成本闸门 2026/9/25 18:25:28

数据闭环分层抽帧策略从 TB 级采集数据中提取高价值帧:三道成本闸门

上一篇讲完了挖掘平台的架构骨架,从这篇开始填血肉。平台拿到采集数据后做的第一件事是「抽帧」——把视频形态的 clip 变成一张张图片。为什么必须做这一步?因为下游所有能力都是「认图不认视频」的:VLM 推理要喂图片,Embedding …

阅读更多 →
Atlas 300V 24G推理卡实战:从CANN环境搭建到YOLOv5模型部署全流程 2026/9/25 18:25:28

Atlas 300V 24G推理卡实战:从CANN环境搭建到YOLOv5模型部署全流程

先给结论:Atlas 300V 24G确实是一张“运算加速卡”,但你要是拿它当普通图形卡用,就完全理解偏了。它是一张面向AI推理场景的加速卡,最近“atlas部署yolo”这么热,主要还是因为这卡性价比够看、国产化适配到位&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉