<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > I2C總線(xiàn)死鎖原因及解決方法

I2C總線(xiàn)死鎖原因及解決方法

作者: 時(shí)間:2016-12-15 來(lái)源:網(wǎng)絡(luò ) 收藏
在正常情況下,I2C總線(xiàn)協(xié)議能夠保證總線(xiàn)正常的讀寫(xiě)操作。但是,當I2C主設備異常復位時(shí)(看門(mén)狗動(dòng)作,板上電源異常
導致復位芯片動(dòng)作,手動(dòng)按鈕復位等等)有可能導致I2C總線(xiàn)死鎖產(chǎn)生。下面詳細說(shuō)明一下總線(xiàn)死鎖產(chǎn)生的原因。

在I2C主設備進(jìn)行讀寫(xiě)操作的過(guò)程中.主設備在開(kāi)始信號后控制SCL產(chǎn)生8個(gè)時(shí)鐘脈沖,然后拉低SCL信號為低電平,在這個(gè)時(shí)候,從設備輸出應答信號,將SDA信號拉為低電平。如果這個(gè)時(shí)候主設備異常復位,SCL就會(huì )被釋放為高電平。此時(shí),如果從設備沒(méi)有復位,就會(huì )繼續I2C的應答,將SDA一直拉為低電平,直到SCL變?yōu)榈碗娖?,才?huì )結束應答信號。而對于I2C主設備來(lái)說(shuō).復位后檢測SCL和SDA信號,如果發(fā)現SDA信號為低電平,則會(huì )認為I2C總線(xiàn)被占用,會(huì )一直等待SCL和SDA信號變?yōu)楦唠娖?。這樣,I2C主設備等待從設備釋放SDA信號,而同時(shí)I2C從設備又在等待主設備將SCL信號拉低以釋放應答信號,兩者相互等待,I2C總線(xiàn)進(jìn)人一種死鎖狀態(tài)。同樣,當I2C進(jìn)行讀操作,I2C從設備應答后輸出數據,如果在這個(gè)時(shí)刻I2C主設備異常復位而此時(shí)I2C從設備輸出的數據位正好為0,也會(huì )導致I2C總線(xiàn)進(jìn)入死鎖狀態(tài)。

方法

(1)盡量選用帶復位輸人的I2C從器件。

(2)將所有的從I2C設備的電源連接在一起,通過(guò)MOS管連接到主電源,而MOS管的導通關(guān)斷由I2C主設備來(lái)實(shí)現。
(3)在I2C從設備設計看門(mén)狗的功能。

(4)在I2C主設備中增加I2C總線(xiàn)恢復程序。每次I2C主設備復位后,如果檢測到SDA數據線(xiàn)被拉低,則控制I2C中的
SCL時(shí)鐘線(xiàn)產(chǎn)生9個(gè)時(shí)鐘脈沖(針對8位數據的情況),這樣I2C從設備就可以完成被掛起的讀操作,從死鎖狀態(tài)在正常情況下,I2C總線(xiàn)協(xié)議能夠保證總線(xiàn)正常的讀寫(xiě)操作。但是,當I2C主設備異常復位時(shí)(看門(mén)狗動(dòng)作,板上電源異常
導致復位芯片動(dòng)作,手動(dòng)按鈕復位等等)有可能導致鎖產(chǎn)生。下面詳細說(shuō)明一下總線(xiàn)死鎖產(chǎn)生的原因。

在I2C主設備進(jìn)行讀寫(xiě)操作的過(guò)程中.主設備在開(kāi)始信號后控制SCL產(chǎn)生8個(gè)時(shí)鐘脈沖,然后拉低SCL信號為低電平,在這個(gè)時(shí)候,從設備輸出應答信號,將SDA信號拉為低電平。如果這個(gè)時(shí)候主設備異常復位,SCL就會(huì )被釋放為高電平。此時(shí),如果從設備沒(méi)有復位,就會(huì )繼續I2C的應答,將SDA一直拉為低電平,直到SCL變?yōu)榈碗娖?,才?huì )結束應答信號。而對于I2C主設備來(lái)說(shuō).復位后檢測SCL和SDA信號,如果發(fā)現SDA信號為低電平,則會(huì )認為I2C總線(xiàn)被占用,會(huì )一直等待SCL和SDA信號變?yōu)楦唠娖?。這樣,I2C主設備等待從設備釋放SDA信號,而同時(shí)I2C從設備又在等待主設備將SCL信號拉低以釋放應答信號,兩者相互等待,I2C總線(xiàn)進(jìn)人一種死鎖狀態(tài)。同樣,當I2C進(jìn)行讀操作,I2C從設備應答后輸出數據,如果在這個(gè)時(shí)刻I2C主設備異常復位而此時(shí)I2C從設備輸出的數據位正好為0,也會(huì )導致I2C總線(xiàn)進(jìn)入死鎖狀態(tài)。

方法

(1)盡量選用帶復位輸人的I2C從器件。

(2)將所有的從I2C設備的電源連接在一起,通過(guò)MOS管連接到主電源,而MOS管的導通關(guān)斷由I2C主設備來(lái)實(shí)現。
(3)在I2C從設備設計看門(mén)狗的功能。

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

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

(6)在I2C上串人一個(gè)具有死鎖恢復的I2C緩沖器,如Linear公司的LTC4307o如圖2所示TC4307是一個(gè)雙向的I2C
總線(xiàn)緩沖器,并且具有鎖恢復的功能。LTC4307總線(xiàn)輸人側連接主設備,總線(xiàn)輸出側連接所有從設備。當LTC4307
檢測到輸出側SDA或SCL信號被拉低30ms時(shí),就自動(dòng)斷開(kāi)I2C總線(xiàn)輸人側與輸出側的連接.并且在輸出側SCL信號上產(chǎn)生16個(gè)時(shí)鐘脈沖來(lái)釋放總線(xiàn)。當總線(xiàn)成功恢復后,LTC4307會(huì )再次連接輸人輸出側,使總線(xiàn)能夠正常工作。中恢復過(guò)來(lái)。
這種方法有很大的局限性,因為大部分主設備的I2C模塊由內置的硬件電路來(lái)實(shí)現,軟件并不能夠直接控制SCL信號模擬
產(chǎn)生需要時(shí)鐘脈沖。

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

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


關(guān)鍵詞: I2C總線(xiàn)死

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>