救活你的I2C總線故障方案出爐了!

2020-11-25 騰訊網

一般情況下, i2c 設備焊接沒什麼問題,按照設備手冊一步步來,基本上就順風順水能夠用起來。如果這麼一個簡單的東西,有時候想要的結果死活不出來,反覆的檢查問題的原因,查詢解決辦法,核查設備的數據手冊,甚至發送和接收的每一條命令與數據都知道是什麼意思,仍然無法解決問題,那該怎麼辦呢?

本文主要針對 i2c 設備,講解如何解決 i2c 設備主機與從機直接無法正常數據交互的問題,側重點是針對硬體設計不太合理、i2c 設備設計不標準導致總線故障的情況,並且通過分析現象,提出解決方案。對於在設備初始化中,沒有設置相應的寄存器或者發送命令,而導致的無法獲取想要的數據情況,不作詳細介紹。

一、i2c 基本用法

i2c 總線是一種簡單、雙向二線制同步串行總線。所有主機在 SCL 線上產生它們自己的時鐘來傳輸總線上的報文,SDA 線傳輸每個字節必須為 8 位,每次傳輸可以發送的字節數量不受限制,每個字節後必須跟一個響應位。在空閒狀態時,SCL 與 SDA 均為高電平。

通常一些低功耗 i2c 設備,晶片引腳使用上拉輸出即可滿足與其正常數據交互,還有一些 i2c 設備,則需要在總線上外加一個上拉電阻,此時相應的 I/O 配置成開漏輸出,其他的按照晶片手冊進行標準配置。

二、硬體問題匯總

2.1 無法正常拉高拉低引腳

首先確定 SDA 與SCL 引腳能夠被拉高、拉低,檢測方式直接軟體控制 I/O 口輸出引腳低電平/高電平,測量引腳電壓是否能夠隨著晶片引腳的設置輸出相應的狀態。

如果不能被拉低,檢測虛焊、上拉電阻斷開、i2c 設備是否正常、晶片引腳是否損壞等問題,確保能夠正常被拉高或者拉低。

2.2 電氣特性無法滿足

如果正常拉高、拉低的情況下,依然無法正常讀取數據。通常建議,根據負載電流更換小阻值的電阻。

如果需要詳細知道原因,就具體查詢 i2c 設備電氣特性。大多數 i2c 設備電氣特性,大致下圖所示

通常這塊內容在 i2c 設備電氣特性這一塊,主要講解電平拉高拉低的最長時間、最短時間,以及處於高電平與電平的閾值與持續時間等等內容。

硬體設計,為了降低單片機的功耗與保護晶片引腳,在滿足負載電流和負載電容相關要求的前提下,阻值設置通常比較大。如果同一個總線上掛載多個 i2c 設備, 即使在 I/O 口配置正確的前提下,也會導致驅動能力不足。

現象是拉高電壓不足,在拉高、拉低過程中消耗時間過長。這兩個問題通常還引起數據線與時鐘線:拉高時,高電壓持續時間過短;拉低時,低電壓持續時間過短。用示波器抓取圖形:從波形上看,顯示是尖波、斜波、雜波等不符合 i2c 設備電氣特性的波形;從數據上看,數據線高電平持續時間過小 ,上升沿時間過長 ,下降沿時間過長等等數據超出設備電氣特性的有效值。典型雜波圖,如下所示

如果出現此類異常,建議更換小一點的電阻,用來增強總線驅動能力,提高電平轉換速度。應當注意的是每個 MCU 的耐受電流不一樣,減小電阻應避免超過相應引腳承受電流的最大值。

3 SDA 死鎖

如果i2c 設備的數據偶爾能夠正確獲取,但是仍然會在總線發送數據或者命令的時候,爆出總線讀寫錯誤,那麼有可能遇到下面的死鎖問題,死鎖時候,就是數據線被拉低,主機無法拉高。死鎖一般發生在從機上,且為數據線死鎖。因為i2c總線是共享的,如果需要確定,是否是從機死鎖,可以參照下面兩幅圖,串聯電阻進行測試

如上圖所示,如果從機死鎖,即從機拉低電平,此時檢測到的電壓為1/3 Vcc。

如上圖所示,如果主機死鎖,即主機拉低電平,此時檢測到的電壓為 1/11 Vcc。依據這個原理,可以準確判定死鎖的具體位置,多個傳感器依據類似方式進行定位。

3.1 反覆重啟導致死鎖

3.1.1 現象

如果設備需要反覆重啟,很有可能在從機設備返回數據的時候,SDA被鎖住。具體原因是從機設備在回數據,還沒有發送完成,主機時鐘消失,從機等待時鐘信號, MCU重啟,如果從機設備的電源沒有復位,從機繼續等待 MCU 時鐘信號,數據一直被鉗住,總線無法完成數據交互。

3.1.2 解決方式

解決重啟導致總線死鎖,一種方式可以如同 rt-thread 驅動解決方式一樣,在系統復位的時候,提供9個時鐘信號,解初總線死鎖;另一種是在按下復位鍵初始化的時候,給從機設備電源斷電重啟,這個需要引腳控制。

3.1.3 9 個時鐘信號

i2c 設備進行讀寫操作的過程中,在從機鉗住總線的期間,MCU 異常復位,會導致 SDA 死鎖,異常產生出現在倆個階段:從機響應階段、從機發送數據階段。下面將針對這兩種異常,對時鐘信號進行解釋,並且總結其他原因,得出結論。

(a) 從機響應階段

MCU 在開始信號後發送地址,得到從機設備響應,準備開始返回數據,在這個時候,從機將 SDA 信號拉為低電平,如果 MCU 異常復位,會導致總線上 SCL 停止發送時鐘信號,從機等待 MCU 的時鐘信號,產生鉗住並且拉低 SDA 的現象。如果想要解鎖 SDA,從機需要 9 個時鐘信號,使得從機完成響應,釋放 SDA 。

(b) 從機發送數據階段

如果從機響應完成了,開始給 MCU 返回數據。這個數據有八位,每一位都有可能為低,如果在數據低位,MCU 異常復位,停止發送時鐘信號,從機就會等待 MCU 的時鐘信號,產生鉗住並且拉低 SDA 的現象。如果想要解鎖 SDA,從機需要 1-8 個時鐘信號,使得從機完成數據響應,釋放 SDA 。

(c)其他情況

在從機一個 8 位數據發送完成後,等待 MCU 響應, 即使屬於 MCU 的,從機不再鉗住 SDA,沒有時鐘,數據交互停止。

在主機發送數據階段,總線所有權在主機,主機異常,數據交互停止,總線釋放。所以,這些情況下,不存在 SDA 死鎖的情況。

(d)結論

綜上所述,解鎖 SDA 從機最多需要 9 個時鐘信號,也就是異常復位後,MCU 至少發送需要 9 個時鐘信號,完成 i2c 總線的 SDA 解鎖。所以,RT_Thread 為了避免此類問題的產生,在 i2c 驅動初始化,對總線進行判斷,判斷是否需要解鎖,如果需要,就進行解鎖,確保 i2c 設備不會因為這個問題導致數據交互失敗。

3.2 多個 i2c 設備導致死鎖

多 i2c 設備除了異常復位導致死鎖,還會形成相互幹擾的問題,一般情況下,不會把同種從機地址掛在同一條總線上,但除此之外,有些 i2c 設備設計不是按照標準的 i2c 總線協議設計,在 i2c 總線共享的前提條件下,有的設備只要總線上從機地址就會有響應。這樣由於從機的錯誤響應,使得各個 i2c 總線異常,甚至鉗住總線,導致 I2C 總線進人一種死鎖狀態。

解決方式,這樣的不標準i2c設備,單獨使用一個總線,避免幹擾,或者單獨一個獨立引腳,控制電源。

相關焦點

  • Linux下I2C總線EEPROM驅動程序設計方法
    每個Adapter對應一個具體的I2C總線控制器。不同的I2C總線控制器可以使用相同的算法Algorithm。i2c-core是I2C總線驅動程序體系結構的核心,在這個模塊中,除了為總線設備驅動提供了一些統一的調用接口來訪問具體的總線驅動程序功能,以進行讀寫或設置操作外,還提供了將各種支持的總線設備驅動和總線驅動添加到這個體系中的方法,以及當不再使用這些驅動時將其從體系中刪除的方法。
  • 樹莓派怎樣連接多個I2C設備
    i2c總線可以處理多個設備,但是它們應具有不同的i2c地址。有些i2c設備具有用於設置其他i2c地址的跳線,但許多設備卻沒有。在這種情況下,您可以使用i2c多路復用器(硬體)來旋轉i2c SDA(數據)和SCL(時鐘),也可以創建其他i2c總線或更多。
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    MPC8250處理器正是通過內部的I2C總線控制器來和這些連接在I2C總線上的設備進行數據交換的。由於I2C總線的特性,Linux的I2C總線設備驅動程序的設計者在設計驅動程序時採用了獨特的體系結構。使開發I2C總線設備驅動程序與開發一般設備驅動程序的方法具有很大差別。因此,開發I2C總線設備驅動程序除了要涉及一般Linux內核驅動程序的知識外。
  • 飛利浦推出業界首款快速模式I2C總線控制器
    PCA9564可作為一個I2C 主設備或從設備,以及作為傳輸器或接收器,同時控制所有I2C總線的特殊序列、協議、仲裁、時序,而無需添加外在時鐘。通過該設備,沒有集成I2C埠的微控制器和微處理器可以與I2C或SMBus組件接口,並在需要多重I2C總線埠的地方提供附加埠。
  • 現場profibus pA 總線儀表故障的判斷
    我們發現有以下故障原因:1、現場儀表本身故障2、總線儀表死機現象3、總線鬆動現象。但排出以上幾點原因。還是出現故障。煩請各位不吝賜教!請問其故障原因為何?怎樣才能解決這個問題?本文引用地址:http://www.eepw.com.cn/article/201612/329876.htm既然硬體沒問題,那麼檢查一下畫面組態顯示的數據是否溢出。
  • 2.4G射頻的CAN總線汽車故障診斷儀
    4G射頻的車栽CAN總線故障診斷儀,詳細介紹其工作原理及系統硬體電路,最後分別闡述接收端、發射端和PC端的軟體模塊。該方案採用自動跳頻的2.4G空中協議,經測試統計誤碼率保持在有效範圍之內,在14m內仍能正常工作。
  • I2C總線設計注意事項
    當時在使用avr CPU設計數據採集器產品的CPU主板,外掛了Silicon lab的溫溼度傳感器Si7013,實時時鐘,主要實現溫溼度、時鐘及電流電壓等信號通過I²C總線到達CPU進行處理,並且由MCU EFM32WG290F64控制在液晶上和上位機界面上的CPU自帶的I²C總線外掛的六個I²C從設備,如下圖1所示。
  • I2C總線驅動在嵌入式系統中的兩種實現
    1 引 言I2C總線(Inter-IC Bus)是一種通用的串行總線,是用於IC器件之間連接的二線制總線。他通過串行數據線(Serial Data Lines,SDL)及串行時鐘線(Serial ClockLine,SCL)兩線在連接到總線上的器件之間傳送信息,並根據地址識別每個器件。一個或多個微控制器以及外圍器件可以通過I2C總線接口非常方便的連接在一起構成系統。這種總線結構的連線和連接引腳少,器件間總線簡單。
  • I2C總線概述及時序總結
    其中輸出為漏極開路的場效應管,輸入緩衝為一隻高輸入阻抗的同相器,這種電路具有兩個特點:1)由於SDA、SCL為漏極開路結構(OD),因此它們必須接有上拉電阻,阻值的大小常為 1k8, 4k7 and 10k ,但1k8 時性能最好;當總線空閒時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線與關係。
  • 示波器和I2C時序波形圖的關係分析
    示波器和I2C時序波形圖的關係分析 周碧俊 發表於 2018-08-03 16:57:53 I2C簡介 I2C總線只需要兩條線
  • 示波器快速維修與CPU及總線相關的故障
    示波器快速維修與CPU及總線相關的故障 大家知道,CPU的基本工作條件主要是電源(CPU供電VCC)、時鐘(CPU的時鐘振蕩電路)、復位(CPU的復位電路)必須正常。隨著新產品的電路變化,總線電路、鍵盤接口和其他輔助信號(例如電視機的行、場逆程脈衝)也會影響CPU的正常工作。本講將結合實例講解如何使用示波器快速維修與CPU及總線相關的故障。
  • 具有故障安全偏置功能的差分總線設計
    在本文中,筆者將介紹差分總線的故障安全偏置以及如何在您的下一個設計裡實現故障安全偏置功能。(如欲回顧一下總線拓撲架構,敬請閱讀筆者以前的一篇博客文章《適合多點應用的LVDS》)。在多點應用中,總線爭用和總線閒置情況會導致正常運行期間總線上發生衝突或通信故障。當不止一個驅動器在工作而總線處於不確定狀態時,會出現總線爭用情況;當所有的驅動器都處於關閉狀態或高阻抗(Hi-Z)狀態時,則會出現總線閒置情況。故障安全偏置網絡的實現能應對這兩種情況。
  • 汽車CAN總線容易出現哪些常見的故障呢
    汽車CAN總線在汽車系統應用中會出現哪些故障呢?  汽車車載網絡總線系統常見故障的檢修:  汽車車載網絡系統的CAN系統設置了特殊的硬體與軟體結構,要順利查出該系統的故障,在熟練掌握其工作原理的基礎上,還應對其故障的特點與類型有所了解,在此基礎上,再掌握一定科學、合理的故障診斷與檢測技術,任何CAN系統的故障都會迎刃而解的。
  • 淺談I2C總線,I2C接口和SPI接口的作用相同
    I2C 總線有時候也叫作 IIC,它已有20多年的歷史了。I2C 接口和 SPI 接口的作用相同,但二者的使用方法有些不同。  I2C 總線用兩根線來連接多支路總線中的多個設備。這種總線是雙向、低速的,並與公共時鐘同步。可以直接將一個設備接到 I2C 總線上或是從該總線上取下,而不會影響其他設備。
  • spi與i2c總線有什麼區別
    I2C總線是一個真正的多主機總線,總線上多個主機初始化傳輸,可以通過傳輸檢測和仲裁來防止數據被破壞 。   下來詳細了解I2C總線時序:   1.1 總線數據有效性   I2C總線是單工,因此同一時刻數據只有一個流向,因此採樣有效時鐘也是單一的,是在SCL時鐘的高電平採樣數據。
  • I2C總線是如何工作的
    打開APP I2C總線是如何工作的 發表於 2019-09-13 15:46:00   I2C總線簡介   I2C結合了SPI和UART的優點。
  • UPS冗餘並聯與雙總線連接供電方案
    它的含義是電源所有故障維修時間之平均值。    從式(1)中可以看出,為了提高可用性也有兩個途徑:提高電源的平均無故障時間和縮短平均修復時間。但當機器的期間質量達到一定程度後,再增大平均無故障時間的代價較大,而且效果也不太顯著,因為總不能將平均無故障時間做到無窮大。然而縮短平均修復時間的效果卻比較明顯,如果平均修復時間縮短為零(這種可能性是存在的,而且也不難實現),那麼可用性就是100%。
  • 弱電工程中rs485正確的接線方式與485總線常見通訊故障
    弱電工程中rs485正確的接線方式與485總線常見通訊故障 工控論壇 發表於 2021-01-12 16:39:25 做工程很多時候會提到RS485控制線,它到底是什麼呢?
  • 485總線結構解決方案及485通訊和TCP網絡通訊優缺點對比
    多年來我們的工程商已經習慣了應用485通信方式的網絡門禁解決方案,很多人走入了一個誤區,認為485組網門禁系統是一種最簡單、最穩定、最成熟的工業總線結構,其實不然,485總線是一種用於設備聯網的、經濟型的、傳統的工業總線方式。
  • 基於Profibus現場總線的車間生產過程自動化管理方案設計
    對於汽車項目而言,無論是新建項目,還是現有設備的擴展和改造,在規劃和設計控制系統時都應該有一個基本指導原則:採用最先進的自動化技術和產品,從而最大程度減小系統集成和調試時間、降低投資成本,方便生產運行階段的維護與工藝調整;提高各工藝設備系統的穩定性,減少故障停機時間保證計劃產量的實現。