熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > I2C總線死鎖原因及解決方法

I2C總線死鎖原因及解決方法

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

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

方法

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

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

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

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

方法

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

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

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

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

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

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

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


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

評(píng)論


技術(shù)專區(qū)

關(guān)閉