- 1
- 2
- 3
- 4
- 5
I2C死锁故障问答笔记
资料介绍
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 |
最新上传
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)