真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

I2C死鎖怎么辦

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

10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有南漳免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

原因

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

解決辦法

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

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

  3. 將所有的從I2C設(shè)備的電源連接在一起,通過MOS管連接到主電源,而MOS管的導(dǎo)通關(guān)斷由I2C主設(shè)備來實(shí)現(xiàn)。

  4. 在I2C從設(shè)備設(shè)計(jì)看門狗的功能。

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

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

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

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


分享標(biāo)題:I2C死鎖怎么辦
URL網(wǎng)址:http://weahome.cn/article/gegsgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部