工程師經(jīng)驗(yàn)分享:采用硬件I2C讀取E2PROM
2016年06月16日 17:06 來(lái)源:網(wǎng)站整理 作者:h1654155596.7254 我要評(píng)論(0)
現(xiàn)象:單片機(jī)采用硬件i2c讀取E2PROM,當(dāng)單片機(jī)復(fù)位時(shí),會(huì)有概率出現(xiàn)再無(wú)法與E2PROM通信,此時(shí)SCL為高,SDA一直為低
原因:當(dāng)單片機(jī)正在和E2PROM通信,如果主正好發(fā)生打算發(fā)第9個(gè)時(shí)鐘,此時(shí)SCL為高,而從開始拉低SDA為低做準(zhǔn)備(作為ACK信號(hào)),等待主SCL變低后,從再釋放SDA為高。如果此時(shí)正好單片機(jī)復(fù)位,主SCL還沒來(lái)得及變低,直接變成高電平,此時(shí)從還在等待SCL變低,所以一直拉低SDA;而主由于復(fù)位,發(fā)現(xiàn)SDA一直為低,也在等待從釋放SDA為高。因此主從都進(jìn)入一個(gè)相互等待的死鎖狀態(tài)。
解決方法:最好的方法是采用模擬i2c. 但由于已經(jīng)配置成硬件i2c,程序改為上電或復(fù)位改成發(fā)9個(gè)SCL時(shí)鐘信號(hào),使從好釋放SDA。
最近發(fā)現(xiàn)單片機(jī)(硬件I2C實(shí)現(xiàn))讀取E2PROM時(shí)候,單片機(jī)復(fù)位可能會(huì)引起i2C死鎖,表現(xiàn)為SCL為高,SDA一直為低,后發(fā)現(xiàn)是E2PROM從設(shè)備拉死i2c總線,從設(shè)備斷電之后,SDA變高,上電后通信正常。后來(lái)通過拉低SCL信號(hào)線,SDA就會(huì)自動(dòng)變成高電平,i2c總線恢復(fù)。后查看一篇文章,講的不錯(cuò),特摘錄如下:
在正常情況下,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)行讀寫操作的過程中。主設(shè)備在開始信號(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è)備沒有復(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)。
SCL為高,SDA一直為低原因
從:正常時(shí)序下:SDA信號(hào)是在SCL為低的狀態(tài)下改變,即從應(yīng)答SDA為低電平時(shí),此時(shí)SCL應(yīng)為為低電平(即從設(shè)備是先拉低SDA信號(hào),等待主設(shè)備SCL由高變低,“取走”ACK信號(hào)后,從再釋放SDA為高)。但如果此時(shí)時(shí)序被打亂,例如單片機(jī)i2c通信時(shí)突然復(fù)位,SCL突然變高,則從設(shè)備SDA一直為低,等待SCL變低。
主:SDA被從拉低,故主認(rèn)為i2c總線占用,一直等待SDA變高這樣主從進(jìn)入一個(gè)相互等待的死鎖過程。
方法:
最好用模擬I2C實(shí)現(xiàn),則不會(huì)死鎖
(1)盡量選用帶復(fù)位輸人的I2C從器件。
(2)將所有的從I2C設(shè)備的電源連接在一起,通過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ù)過來(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)被拉低超過指定時(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公司的LTC4307如圖2所示:LTC4307是一個(gè)雙向的I2C總線緩沖器,并且具有I2C總線死鎖恢復(fù)的功能。LTC4307總線輸人側(cè)連接主設(shè)備,總線輸出側(cè)連接所有從設(shè)備。當(dāng)LTC4307檢測(cè)到輸出側(cè)SDA或SCL信號(hào)被拉低30ms時(shí),就自動(dòng)斷開I2C總線輸人側(cè)與輸出側(cè)的連接。并且在輸出側(cè)SCL信號(hào)上產(chǎn)生16個(gè)時(shí)鐘脈沖來(lái)釋放總線。當(dāng)總線成功恢復(fù)后,LTC4307會(huì)再次連接輸人輸出側(cè),使總線能夠正常工作。
上周熱點(diǎn)文章排行榜
- 奧哲與數(shù)環(huán)通達(dá)成合作,共筑企業(yè)數(shù)字化一站式轉(zhuǎn)型新生態(tài)
- 顛覆性創(chuàng)新技術(shù)——特斯拉土壤修復(fù)機(jī)器人!
- 三季度全球芯片代工市場(chǎng):臺(tái)積電第一,中芯國(guó)際營(yíng)收破20億美
- 科技看點(diǎn):小馬智行上市 我國(guó)5G基站總數(shù)達(dá)414.1萬(wàn)個(gè) 我國(guó)前10月
- 光刻機(jī)巨頭拋出重磅信號(hào) 阿斯麥(ASML)股價(jià)大幅上漲
- 射頻芯片企業(yè)前三季度業(yè)績(jī)PK:業(yè)績(jī)普降承壓前行,集成化、5
上周資料下載排行榜
論壇熱帖
- LF開頭請(qǐng)問這個(gè)是什么封裝元器件 jf_77000477
- 【飛凌嵌入式OK3588J-C開發(fā)板體驗(yàn)】OK3588J-C開發(fā)板開箱評(píng)測(cè) jf_43382582
- 【書籍評(píng)測(cè)活動(dòng)NO.52】基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化 ElecFans小喇叭
- 求一份CS32L010的相關(guān)資料(數(shù)據(jù)手冊(cè)、用戶手冊(cè)、Pack包和例程等),謝謝 jf_43621189
- 請(qǐng)問如何關(guān)閉獨(dú)立看門狗 jf_39582415
- 【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+閱讀濾波器章節(jié)部分筆記 james_87
熱門博文
論壇熱帖
電子工程師技術(shù)應(yīng)用
電子工程師資料下載
- 經(jīng)典設(shè)計(jì)經(jīng)驗(yàn)筆記,電子工程師必備基礎(chǔ)知識(shí)
- 巧評(píng)電子工程師常犯的20個(gè)錯(cuò)誤
- 99%的電子工程師掉進(jìn)過這29個(gè)坑
- 工程師常犯錯(cuò)誤匯總,有你嗎?
- 電子工程師用得最多的17個(gè)軟件!
- 嵌入式開發(fā)資料免費(fèi)分享
- 電子工程師便攜手冊(cè)PDF電子書
- 電子工程師出路在哪里?過來(lái)人分享
- 電子工程師必備元器件應(yīng)用寶典強(qiáng)化版電子書免費(fèi)下載
- 2018年中國(guó)工程師創(chuàng)新能量指數(shù)報(bào)告
I2C技術(shù)應(yīng)用
I2C資料下載
- IP2368寄存器說(shuō)明文檔
- ISO154xEVM低功耗雙向I2C隔離器評(píng)估模塊
- ISO1644DWEVM具有GPIO的增強(qiáng)型隔離式I2C評(píng)估模塊
- TPS25751技術(shù)參考手冊(cè)
- 可并聯(lián)的I2C遙感6A/12A電源模塊評(píng)估模塊
- DLPC3420和DLPC3421軟件
- TPS389006Q1EVM多通道、過壓和欠壓、I2C電壓監(jiān)控器評(píng)估模塊
- TPS389C0xEVM具有看門狗和I2C的多通道電壓監(jiān)控器評(píng)估模塊
- INA740x 85V、16位、精密I2C輸出數(shù)字電源監(jiān)控器數(shù)據(jù)表
- DLPC3439軟件編程人員指南
熱評(píng)
- IR將功率半導(dǎo)體觸角伸往消費(fèi)市場(chǎng)
- 多功能算術(shù)/邏輯運(yùn)算單元(ALU) ,什么是多功能
- 動(dòng)態(tài)ip、靜態(tài)ip、pppoe撥號(hào)的區(qū)別
- ARM與MIPS的比較
- ThunderBolt端口驅(qū)動(dòng)及NET改WAP方法
- ds18b20中文資料詳解
- 滴滴人臉識(shí)別怎么破解
- 超級(jí)計(jì)算機(jī)榜單重新排名 中國(guó)天河二號(hào)已淪為世界第
- 電阻色環(huán)表_色環(huán)電阻識(shí)別方法
- iphone6概念機(jī)圖片曝光_iphone6上市時(shí)
博文
帖子
- 【書籍評(píng)測(cè)活動(dòng)NO.51】具身智能機(jī)器人系統(tǒng) | 了解AI的下一個(gè)浪潮! ElecFans小喇叭
- 請(qǐng)教關(guān)于CS1239低側(cè)采樣如何獲得使用更高的Gain? jf_94221193
- 高頻條件下的耦合線圈出現(xiàn)負(fù)值的原因是什么 jf_42363055
- 請(qǐng)問如何關(guān)閉獨(dú)立看門狗 jf_39582415
- ads1291雙電源供電時(shí),Thermal Pad接AVSS嗎? ggfx
- 【米爾-Xilinx XC7A100T FPGA開發(fā)板試用】+03.SFP光口測(cè)試(zmj) 卿小小_9e6
- DAC7621的reference性能精度,可以使用外部輸入ref嗎? 萬(wàn)物死
- 【「HarmonyOS NEXT啟程:零基礎(chǔ)構(gòu)建純血鴻蒙應(yīng)用」閱讀體驗(yàn)】+1-7章有感 夜孤影
- DIY了一臺(tái)無(wú)人機(jī),用全志T113芯片 文小二
- 電子產(chǎn)品結(jié)構(gòu)與導(dǎo)熱材料解決方案 jf_86221244
用戶評(píng)論
查看全部 條評(píng)論
查看全部 條評(píng)論>>