I2C通讯过程中SDA被一直拉低
生活随笔
收集整理的這篇文章主要介紹了
I2C通讯过程中SDA被一直拉低
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? I2C通訊過程中SDA被一直拉低
一、現象
? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
二、分析原因
2.1 正常情況該部分數據
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ?? 正常情況slave返回一個byte數據:0x00(該字節8bit都是0)
2.2 異常發生時該部分數據
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 出現該情況原因:因為此時從機正在發數據給主機,但是此時主機因為重啟,所以clk被上拉電阻一直置為高。從機此時發送給主機的數據位剛好是低電平,若clk不為低,從機講一直保持低電平數據(CLK為低:SDA改變數據;CLK為高:SDA數據保持)。
?
三、解決方法
? ? ?? 主機開機時,首先需要先判斷SDA是否正常,若不正常(低電平),那么就需要通過軟件模擬方式將SDA恢復到高電平,然后再配置I2C接口。
? ? ? ?
? ?? 因為中斷通訊前,slave已經發送了4bit內容,所以還剩4bit內容沒有發送。(可以看2.2中的分析)
?
? ? ? ??
?
? ? ? ?
?
四、案例
?
1)異常情況
? ? ??
slave發送第3bit時,master突然重啟;
?
2)矯正過程
? ? ?
通過矯正程序,可以讓slave釋放SDA總線。
3)正常數據
? ?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的I2C通讯过程中SDA被一直拉低的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022 开源之夏 | Serverle
- 下一篇: 计算机开关电源的发展,牛人总结的开关电源