I2C總線(xiàn)死鎖原因及解決方法
導致復位芯片動(dòng)作,手動(dòng)按鈕復位等等)有可能導致I2C總線(xiàn)死鎖產(chǎn)生。下面詳細說(shuō)明一下總線(xiàn)死鎖產(chǎn)生的原因。
方法
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)按鈕復位等等)有可能導致I2C總線(xiàn)死鎖產(chǎn)生。下面詳細說(shuō)明一下總線(xiàn)死鎖產(chǎn)生的原因。
方法
SCL時(shí)鐘線(xiàn)產(chǎn)生9個(gè)時(shí)鐘脈沖(針對8位數據的情況),這樣I2C從設備就可以完成被掛起的讀操作,從死鎖狀態(tài)中恢復過(guò)來(lái)。
這種方法有很大的局限性,因為大部分主設備的I2C模塊由內置的硬件電路來(lái)實(shí)現,軟件并不能夠直接控制SCL信號模擬
產(chǎn)生需要時(shí)鐘脈沖。
時(shí),就在SCL總線(xiàn)上產(chǎn)生9個(gè)時(shí)鐘脈沖,使I2C從設備完成讀操作,從死鎖狀態(tài)上恢復出來(lái)??偩€(xiàn)恢復設備需要有具有編程
功能,一般可以用單片機或CPLD實(shí)現這一功能。

總線(xiàn)緩沖器,并且具有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í)鐘脈沖。
時(shí),就在SCL總線(xiàn)上產(chǎn)生9個(gè)時(shí)鐘脈沖,使I2C從設備完成讀操作,從死鎖狀態(tài)上恢復出來(lái)??偩€(xiàn)恢復設備需要有具有編程
功能,一般可以用單片機或CPLD實(shí)現這一功能。

總線(xiàn)緩沖器,并且具有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)能夠正常工作。
評論