您现在的位置是:首页 > 技术资料 > I2C死锁故障问答笔记
推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

I2C死锁故障问答笔记

更新时间:2026-10-20 10:15:44 大小:39K 上传用户:烟雨查看TA发布的资源 标签:I2C死锁总线故障SCLSDA 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

I2C 死锁的那些事 概述 问:老师,最近被 I2C 死锁折磨得不行,总线老是卡死,从设备都唤不醒了,到底啥叫 I2C 死锁? 答:好问题,咱先把概念捋清楚。I2C 是两根线——SCL 时钟线和 SDA 数据线,靠开漏结构工作。死锁最典型的表现就是 SDA 被从设备拉低不放,主设备怎么发起始位都发不出来,总线像被人摁住了手,彻底僵在那儿。说白了,就是有设备把 SDA 钳在了低电平,谁也没法继续通信。 问:那为什么好好的总线会突然死锁? 答:多数死锁都出在通信中断的那一下。比如主设备正读到一半,程序出错或者被中断打断,时钟停了,但从设备还在等下一个时钟把最后那一位收完,于是它就一直攥着 SDA 不放。还有一种常见情况是电平不匹配,主设备跑 3.3V,从设备是 5V 或者反过来,上拉电阻选得不对,也能把总线状态搞乱。 工作原理 问:我想搞清楚根因,能不能把 I2C 的时序再说细一点? 答:可以,我们一层层拆。I2C 通信靠"起始条件"和"停止条件"来界定一段传输。起始条件就是 SCL 为高时 SDA 从高变低,停止条件是 SCL 为高时 SDA 从低变高。这俩条件由主设备发起,从设备全程是被动接收指令的角色。 问:那数据怎么传? 答:数据位在 SCL 高电平期间必须保持稳定,只有在 SCL 低电平时 SDA 才允许变化。这就是为什么时钟一旦停在半路,从设备会愣住——它正处在"等下一个边沿"的状态,手里的 SDA 电平就成了"定格画面",一直保持着,总线自然就被占住了。 问:那 ACK 应答是怎么回事? 答:每收完一个字节,接收方要在第九个时钟周期把 SDA 拉低表示应答。如果主设备在传输中被复位了,它的 GPIO 状态回到初始,而上拉电阻又没被正确配置,就可能出现主设备既不拉高也不释放的情况,总线就悬在中间状态,死锁就来了。

部分文件列表

文件名 大小
I2C死锁故障问答笔记.docx 39K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载