<s id="eoqoe"><xmp id="eoqoe">
<button id="eoqoe"><strong id="eoqoe"></strong></button>
<s id="eoqoe"><xmp id="eoqoe">
<button id="eoqoe"><strong id="eoqoe"></strong></button>
<wbr id="eoqoe"></wbr>
<wbr id="eoqoe"><strong id="eoqoe"></strong></wbr>
<wbr id="eoqoe"><strong id="eoqoe"></strong></wbr>
<wbr id="eoqoe"><strong id="eoqoe"></strong></wbr>
<wbr id="eoqoe"><label id="eoqoe"></label></wbr>
<button id="eoqoe"></button>
<wbr id="eoqoe"></wbr>
你的位置:首頁(yè) > 互連技術(shù) > 正文

詳談:I2C設備導致死鎖怎么辦?

發(fā)布時(shí)間:2019-11-13 責任編輯:wenwei

【導讀】一般情況下, i2c 設備焊接沒(méi)什么問(wèn)題,按照設備手冊一步步來(lái),基本上就順風(fēng)順水能夠用起來(lái)。如果這么一個(gè)簡(jiǎn)單的東西,有時(shí)候想要的結果死活不出來(lái),反復的檢查問(wèn)題的原因,查詢(xún)解決辦法,核查設備的數據手冊,甚至發(fā)送和接收的每一條命令與數據都知道是什么意思,仍然無(wú)法解決問(wèn)題,那該怎么辦呢?
 
本文主要針對 i2c 設備,講解如何解決 i2c 設備主機與從機直接無(wú)法正常數據交互的問(wèn)題,側重點(diǎn)是針對硬件設計不太合理、i2c 設備設計不標準導致總線(xiàn)故障的情況,并且通過(guò)分析現象,提出解決方案。對于在設備初始化中,沒(méi)有設置相應的寄存器或者發(fā)送命令,而導致的無(wú)法獲取想要的數據情況,不作詳細介紹。
 
一、i2c 基本用法
 
i2c 總線(xiàn)是一種簡(jiǎn)單、雙向二線(xiàn)制同步串行總線(xiàn)。所有主機在 SCL 線(xiàn)上產(chǎn)生它們自己的時(shí)鐘來(lái)傳輸總線(xiàn)上的報文,SDA 線(xiàn)傳輸每個(gè)字節必須為 8 位,每次傳輸可以發(fā)送的字節數量不受限制,每個(gè)字節后必須跟一個(gè)響應位。在空閑狀態(tài)時(shí),SCL 與 SDA 均為高電平。
 
通常一些低功耗 i2c 設備,芯片引腳使用上拉輸出即可滿(mǎn)足與其正常數據交互,還有一些 i2c 設備,則需要在總線(xiàn)上外加一個(gè)上拉電阻,此時(shí)相應的 I/O 配置成開(kāi)漏輸出,其他的按照芯片手冊進(jìn)行標準配置。
 
二、硬件問(wèn)題匯總
 
2.1 無(wú)法正常拉高拉低引腳
 
首先確定 SDA 與SCL 引腳能夠被拉高、拉低,檢測方式直接軟件控制 I/O 口輸出引腳低電平/高電平,測量引腳電壓是否能夠隨著(zhù)芯片引腳的設置輸出相應的狀態(tài)。
如果不能被拉低,檢測虛焊、上拉電阻斷開(kāi)、i2c 設備是否正常、芯片引腳是否損壞等問(wèn)題,確保能夠正常被拉高或者拉低。
 
2.2 電氣特性無(wú)法滿(mǎn)足
 
如果正常拉高、拉低的情況下,依然無(wú)法正常讀取數據。通常建議,根據負載電流更換小阻值的電阻。
 
如果需要詳細知道原因,就具體查詢(xún) i2c 設備電氣特性。大多數 i2c 設備電氣特性,大致下圖所示
 
詳談:I2C設備導致死鎖怎么辦?
 
通常這塊內容在 i2c 設備電氣特性這一塊,主要講解電平拉高拉低的最長(cháng)時(shí)間、最短時(shí)間,以及處于高電平與電平的閾值與持續時(shí)間等等內容。
 
硬件設計,為了降低單片機的功耗與保護芯片引腳,在滿(mǎn)足負載電流和負載電容相關(guān)要求的前提下,阻值設置通常比較大。如果同一個(gè)總線(xiàn)上掛載多個(gè) i2c 設備, 即使在 I/O 口配置正確的前提下,也會(huì )導致驅動(dòng)能力不足。
 
現象是拉高電壓不足,在拉高、拉低過(guò)程中消耗時(shí)間過(guò)長(cháng)。這兩個(gè)問(wèn)題通常還引起數據線(xiàn)與時(shí)鐘線(xiàn):拉高時(shí),高電壓持續時(shí)間過(guò)短;拉低時(shí),低電壓持續時(shí)間過(guò)短。用示波器抓取圖形:從波形上看,顯示是尖波、斜波、雜波等不符合 i2c 設備電氣特性的波形;從數據上看,數據線(xiàn)高電平持續時(shí)間過(guò)小 ,上升沿時(shí)間過(guò)長(cháng) ,下降沿時(shí)間過(guò)長(cháng)等等數據超出設備電氣特性的有效值。典型雜波圖,如下所示
 
詳談:I2C設備導致死鎖怎么辦?
 
如果出現此類(lèi)異常,建議更換小一點(diǎn)的電阻,用來(lái)增強總線(xiàn)驅動(dòng)能力,提高電平轉換速度。應當注意的是每個(gè) MCU 的耐受電流不一樣,減小電阻應避免超過(guò)相應引腳承受電流的最大值。
 
3 SDA 死鎖
 
如果i2c 設備的數據偶爾能夠正確獲取,但是仍然會(huì )在總線(xiàn)發(fā)送數據或者命令的時(shí)候,爆出總線(xiàn)讀寫(xiě)錯誤,那么有可能遇到下面的死鎖問(wèn)題,死鎖時(shí)候,就是數據線(xiàn)被拉低,主機無(wú)法拉高。死鎖一般發(fā)生在從機上,且為數據線(xiàn)死鎖。因為i2c總線(xiàn)是共享的,如果需要確定,是否是從機死鎖,可以參照下面兩幅圖,串聯(lián)電阻進(jìn)行測試
 
詳談:I2C設備導致死鎖怎么辦?
 
如上圖所示,如果從機死鎖,即從機拉低電平,此時(shí)檢測到的電壓為1/3 Vcc。
 
詳談:I2C設備導致死鎖怎么辦?
 
如上圖所示,如果主機死鎖,即主機拉低電平,此時(shí)檢測到的電壓為 1/11 Vcc。依據這個(gè)原理,可以準確判定死鎖的具體位置,多個(gè)傳感器依據類(lèi)似方式進(jìn)行定位。
 
3.1 反復重啟導致死鎖
 
3.1.1 現象
 
如果設備需要反復重啟,很有可能在從機設備返回數據的時(shí)候,SDA被鎖住。具體原因是從機設備在回數據,還沒(méi)有發(fā)送完成,主機時(shí)鐘消失,從機等待時(shí)鐘信號, MCU重啟,如果從機設備的電源沒(méi)有復位,從機繼續等待 MCU 時(shí)鐘信號,數據一直被鉗住,總線(xiàn)無(wú)法完成數據交互。
 
3.1.2 解決方式
 
解決重啟導致總線(xiàn)死鎖,一種方式可以如同 rt-thread 驅動(dòng)解決方式一樣,在系統復位的時(shí)候,提供9個(gè)時(shí)鐘信號,解初總線(xiàn)死鎖;另一種是在按下復位鍵初始化的時(shí)候,給從機設備電源斷電重啟,這個(gè)需要引腳控制。
 
3.1.3 9 個(gè)時(shí)鐘信號
 
i2c 設備進(jìn)行讀寫(xiě)操作的過(guò)程中,在從機鉗住總線(xiàn)的期間,MCU 異常復位,會(huì )導致 SDA 死鎖,異常產(chǎn)生出現在倆個(gè)階段:從機響應階段、從機發(fā)送數據階段。下面將針對這兩種異常,對時(shí)鐘信號進(jìn)行解釋?zhuān)⑶铱偨Y其他原因,得出結論。
 
(a) 從機響應階段
 
MCU 在開(kāi)始信號后發(fā)送地址,得到從機設備響應,準備開(kāi)始返回數據,在這個(gè)時(shí)候,從機將 SDA 信號拉為低電平,如果 MCU 異常復位,會(huì )導致總線(xiàn)上 SCL 停止發(fā)送時(shí)鐘信號,從機等待 MCU 的時(shí)鐘信號,產(chǎn)生鉗住并且拉低 SDA 的現象。如果想要解鎖 SDA,從機需要 9 個(gè)時(shí)鐘信號,使得從機完成響應,釋放 SDA 。
 
(b) 從機發(fā)送數據階段
 
如果從機響應完成了,開(kāi)始給 MCU 返回數據。這個(gè)數據有八位,每一位都有可能為低,如果在數據低位,MCU 異常復位,停止發(fā)送時(shí)鐘信號,從機就會(huì )等待 MCU 的時(shí)鐘信號,產(chǎn)生鉗住并且拉低 SDA 的現象。如果想要解鎖 SDA,從機需要 1-8 個(gè)時(shí)鐘信號,使得從機完成數據響應,釋放 SDA 。
 
(c)其他情況
 
在從機一個(gè) 8 位數據發(fā)送完成后,等待 MCU 響應, 即使屬于 MCU 的,從機不再鉗住 SDA,沒(méi)有時(shí)鐘,數據交互停止。
 
在主機發(fā)送數據階段,總線(xiàn)所有權在主機,主機異常,數據交互停止,總線(xiàn)釋放。所以,這些情況下,不存在 SDA 死鎖的情況。
 
(d)結論
 
綜上所述,解鎖 SDA 從機最多需要 9 個(gè)時(shí)鐘信號,也就是異常復位后,MCU 至少發(fā)送需要 9 個(gè)時(shí)鐘信號,完成 i2c 總線(xiàn)的 SDA 解鎖。所以,RT_Thread 為了避免此類(lèi)問(wèn)題的產(chǎn)生,在 i2c 驅動(dòng)初始化,對總線(xiàn)進(jìn)行判斷,判斷是否需要解鎖,如果需要,就進(jìn)行解鎖,確保 i2c 設備不會(huì )因為這個(gè)問(wèn)題導致數據交互失敗。
 
3.2 多個(gè) i2c 設備導致死鎖
 
多 i2c 設備除了異常復位導致死鎖,還會(huì )形成相互干擾的問(wèn)題,一般情況下,不會(huì )把同種從機地址掛在同一條總線(xiàn)上,但除此之外,有些 i2c 設備設計不是按照標準的 i2c 總線(xiàn)協(xié)議設計,在 i2c 總線(xiàn)共享的前提條件下,有的設備只要總線(xiàn)上從機地址就會(huì )有響應。這樣由于從機的錯誤響應,使得各個(gè) i2c 總線(xiàn)異常,甚至鉗住總線(xiàn),導致 I2C 總線(xiàn)進(jìn)人一種死鎖狀態(tài)。
 
解決方式,這樣的不標準i2c設備,單獨使用一個(gè)總線(xiàn),避免干擾,或者單獨一個(gè)獨立引腳,控制電源。
 
來(lái)源:RT-Thread
 
 
推薦閱讀:
 
選擇正確的加速度計,以進(jìn)行預測性維護
大聯(lián)大推出數字化平臺【大大網(wǎng)】,獲行業(yè)媒體AspenCore兩項殊榮肯定
三極管和運放構成的幾種恒流源電路分析
掌握這些步驟,輕松分配FPGA引腳
功率密度與效率:如何權衡(二)
要采購焊接么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門(mén)搜索
?

關(guān)閉

?

關(guān)閉

久久无码人妻精品一区二区三区_精品少妇人妻av无码中文字幕_98精品国产高清在线看入口_92精品国产自产在线观看481页
<s id="eoqoe"><xmp id="eoqoe">
<button id="eoqoe"><strong id="eoqoe"></strong></button>
<s id="eoqoe"><xmp id="eoqoe">
<button id="eoqoe"><strong id="eoqoe"></strong></button>
<wbr id="eoqoe"></wbr>
<wbr id="eoqoe"><strong id="eoqoe"></strong></wbr>
<wbr id="eoqoe"><strong id="eoqoe"></strong></wbr>
<wbr id="eoqoe"><strong id="eoqoe"></strong></wbr>
<wbr id="eoqoe"><label id="eoqoe"></label></wbr>
<button id="eoqoe"></button>
<wbr id="eoqoe"></wbr>