溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

I2C死鎖怎么辦

發布時間:2021-10-14 17:56:21 來源:億速云 閱讀:274 作者:小新 欄目:互聯網科技

這篇文章給大家分享的是有關I2C死鎖怎么辦的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

原因

當單片機正在和I2C從機通信,如果主正好發生打算發第9個時鐘,此時SCL為高,而從開始拉低SDA為低做準備(作為ACK信號),等待主SCL變低后,從再釋放SDA為高。如果此時正好單片機復位,主SCL還沒來得及變低,直接變成高電平,此時從還在等待SCL變低,所以一直拉低SDA;而主由于復位,發現SDA一直為低,也在等待從釋放SDA為高。因此主從都進入一個相互等待的死鎖狀態。

解決辦法

  1. 最好的方法是采用模擬i2c. 但由于已經配置成硬件i2c,程序改為上電或復位改成發9個SCL時鐘信號,使從好釋放SDA。

  2. 盡量選用帶復位輸人的I2C從器件。

  3. 將所有的從I2C設備的電源連接在一起,通過MOS管連接到主電源,而MOS管的導通關斷由I2C主設備來實現。

  4. 在I2C從設備設計看門狗的功能。

  5. 在I2C主設備中增加I2C總線恢復程序。每次I2C主設備復位后,如果檢測到SDA數據線被拉低,則控制I2C中的 SCL時鐘線產生9個時鐘脈沖(針對8位數據的情況),這樣I2C從設備就可以完成被掛起的讀操作,從死鎖狀態中恢復過來。 這種方法有很大的局限性,因為大部分主設備的I2C模塊由內置的硬件電路來實現,軟件并不能夠直接控制SCL信號模擬 產生需要時鐘脈沖。

  6. 在I2C總線上增加一個額外的總線恢復設備。這個設備監視I2C總線。當設備檢測到SDA信號被拉低超過指定時間 時,就在SCL總線上產生9個時鐘脈沖,使I2C從設備完成讀操作,從死鎖狀態上恢復出來??偩€恢復設備需要有具有編程 功能,一般可以用單片機或CPLD實現這一功能。

  7. 在I2C上串人一個具有死鎖恢復的I2C緩沖器,如Linear公司的LTC4307:LTC4307是一個雙向的I2C 總線緩沖器,并且具有I2C總線死鎖恢復的功能。LTC4307總線輸人側連接主設備,總線輸出側連接所有從設備。當LTC4307 檢測到輸出側SDA或SCL信號被拉低30ms時,就自動斷開I2C總線輸人側與輸出側的連接.并且在輸出側SCL信號上產生16個時鐘脈沖來釋放總線。當總線成功恢復后,LTC4307會再次連接輸人輸出側,使總線能夠正常工作。

感謝各位的閱讀!關于“I2C死鎖怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

i2c
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女