日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

I2C死锁原因及解决方法

發布時間:2025/4/16 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 I2C死锁原因及解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

死鎖總線表現為:SCL為高,SDA一直為低

?

現象:單片機采用硬件i2c讀取E2PROM,當單片機復位時,會有概率出現再無法與E2PROM通信,此時SCL為高,SDA一直為低

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

解決方法:最好的方法是采用模擬i2c. 但由于已經配置成硬件i2c,程序改為上電或復位改成發9個SCL時鐘信號,使從好釋放SDA。

?

?

?最近發現單片機(硬件I2C實現)讀取E2PROM時候,單片機復位可能會引起i2C死鎖,表現為SCL為高,SDA一直為低,后發現是E2PROM從設備拉死i2c總線,從設備斷電之后,SDA變高,上電后通信正常。后來通過拉低SCL信號線,SDA就會自動變成高電平,i2c總線恢復。后查看一篇文章,講的不錯,特摘錄如下:

?

??? 在正常情況下,I2C總線協議能夠保證總線正常的讀寫操作。但是,當I2C主設備異常復位時(看門狗動作,板上電源異常
導致復位芯片動作,手動按鈕復位等等)有可能導致I2C總線死鎖產生。下面詳細說明一下總線死鎖產生的原因。

?

??? 在I2C主設備進行讀寫操作的過程中.主設備在開始信號后控制SCL產生8個時鐘脈沖,然后拉低SCL信號為低電平,在這個時候,從設備輸出應答信號,將SDA信號拉為低電平。如果這個時候主設備異常復位,SCL就會被釋放為高電平。此時,如果從設備沒有復位,就會繼續I2C的應答,將SDA一直拉為低電平,直到SCL變為低電平,才會結束應答信號。而對于I2C主設備來說.復位后檢測SCL和SDA信號,如果發現SDA信號為低電平,則會認為I2C總線被占用,會一直等待SCL和SDA信號變為高電平。這樣,I2C主設備等待從設備釋放SDA信號,而同時I2C從設備又在等待主設備將SCL信號拉低以釋放應答信號,兩者相互等待,I2C總線進人一種死鎖狀態。同樣,當I2C進行讀操作,I2C從設備應答后輸出數據,如果在這個時刻I2C主設備異常復位而此時I2C從設備輸出的數據位正好為0,也會導致I2C總線進入死鎖狀態。

?

SCL為高,SDA一直為低原因

從:正常時序下:SDA信號是在SCL為低的狀態下改變,即從應答SDA為低電平時,此時SCL應為為低電平(即從設備是先拉低SDA信號,等待主設備SCL由高變低,“取走”ACK信號后,從再釋放SDA為高)。但如果此時時序被打亂,例如單片機i2c通信時突然復位,SCL突然變高,則從設備SDA一直為低,等待SCL變低。

主:SDA被從拉低,故主認為i2c總線占用,一直等待SDA變高

這樣主從進入一個相互等待的死鎖過程。

?

?方法

? ??最好用模擬I2C實現,則不會死鎖

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

????(2)將所有的從I2C設備的電源連接在一起,通過MOS管連接到主電源,而MOS管的導通關斷由I2C主設備來實現。
??? (3)在I2C從設備設計看門狗的功能。

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

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

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

總結

以上是生活随笔為你收集整理的I2C死锁原因及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜中出 | www.青青草.com | 亚洲一区二区三区影院 | 亚洲福利天堂 | 亚洲男人在线 | 日本a级黄 | 99精品国产成人一区二区 | 激情婷| 成人18网站 | 性一交一乱一色一免费无遮挡 | 久久人妻无码aⅴ毛片a片app | 人妻少妇精品视频一区二区三区 | 久久国产精品-国产精品 | 日韩特级片 | 992tv成人免费视频 | 国产伦精品一区二区三区视频我 | 欧洲久久久 | 成年人网站免费视频 | 免费麻豆国产一区二区三区四区 | 一区二区 亚洲 | 国产特黄大片aaaa毛片 | 免费看黄色一级片 | 久久综合九色综合欧美狠狠 | 亚洲欧美字幕 | 日韩电影在线一区 | 美日韩一区二区 | 久久99精品国产.久久久久 | 落日余晖 | 国产精品久久久国产盗摄 | 国产精品aaa | 日韩在线视频观看 | 人人澡人人澡人人澡 | 成片免费观看视频大全 | 狠狠干天天色 | 久久六| 污视频网站免费看 | 黄色综合网 | 欧美老肥妇做爰bbww | 色在线免费视频 | 亚洲少妇一区二区 | 清纯唯美第一页 | 欧美性videos高清精品 | 日韩在线毛片 | 天天干天天看 | 专干中国老太婆hd | 国产成人无码av在线播放dvd | 人妻丝袜一区二区三区 | 午夜免费视频网站 | 国产色一区二区 | 国产91精品高潮白浆喷水 | 91精彩视频在线观看 | 东北少妇av | 成人精品视频一区 | 在线尤物 | 成人免费网站www网站高清 | 操伊人| 桃色激情网 | 亚洲在线观看av | 瑟瑟视频在线免费观看 | 午夜av免费看| 亚洲国产三级 | 日日做夜夜爽毛片麻豆 | 男人喷出精子视频 | 欧美久久成人 | 蜜桃成熟时李丽珍在线观看 | 91亚洲国产成人精品一区 | 伊人精品一区二区三区 | 午夜精品毛片 | 热热热av| 亚洲av成人精品毛片 | 亚洲美女福利视频 | 黄片毛片视频 | 神马午夜伦理影院 | 欧美xxxx视频 | 国产综合视频在线 | 久久亚洲国产 | 久久大香焦 | 色臀av| 欧美一级在线 | 自拍偷拍麻豆 | 欧美少妇xxxxx | 欧美一级淫片aaaaaa | 色婷婷亚洲 | 欧美国产日本在线 | 少妇一级片 | 男女啪啪网站免费 | 2级黄色片 | 日韩中文字幕在线看 | 日韩精品福利在线 | 叼嘿视频91 | 麻豆视频一区二区 | 国产91绿帽单男绿奴 | 亚洲欧美日韩电影 | 亚洲中文字幕无码专区 | 日本三级吃奶头添泬无码苍井空 | 国产成人啪精品午夜在线观看 | 九九福利视频 | 久久久久久久黄色 | 青青毛片 |