I2C設備驅動(四)-- 調試問題

1 i2c死鎖

異常現象:master設備復位後,不能對slave進行讀寫操作,總線表現爲SCL爲高,SDA一直爲低
原因:master與slave進行通信時,正好發生打算髮第9個時鐘,此時SCL爲高,而從開始拉低SDA爲低做準備(作爲ACK信號),等待SCL變低後,從再釋放SDA爲高。如果此時正好master復位,master SCL還沒來得及變低,直接變成高電平,此時slave還在等待SCL變低,所以一直拉低SDA;而master由於復位,發現SDA一直爲低,也在等待slave釋放SDA爲高。因此主從都進入一個相互等待的死鎖狀態。
解決方法:每次I2C master設備復位後,如果檢測到SDA數據線被拉低,則控制I2C中的
SCL時鐘線產生9個時鐘脈衝(針對8位數據的情況),這樣I2C slave設備就可以完成被掛起的讀操作,從死鎖狀態中恢復過來。

2 …

3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章