<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

I2C總線的基本用法 I2C總線硬件問題匯總

FPGA之家 ? 來源:RT-Thread ? 2023-12-26 09:33 ? 次閱讀

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

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

1 i2c 基本用法

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

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

2 硬件問題匯總

2.1無法正常拉高拉低引腳

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

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

2.2電氣特性無法滿足

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

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

3a2adcb4-a385-11ee-8b88-92fbcf53809c.jpg

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

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

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

3a3451c2-a385-11ee-8b88-92fbcf53809c.jpg

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

3 SDA 死鎖

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

3a39e24a-a385-11ee-8b88-92fbcf53809c.jpg

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

3a421302-a385-11ee-8b88-92fbcf53809c.jpg

如上圖所示,如果主機死鎖,即主機拉低電平,此時檢測到的電壓為 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設備,單獨使用一個總線,避免干擾,或者單獨一個獨立引腳,控制電源。

來源:RT-Thread

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 硬件
    +關注

    關注

    11

    文章

    2929

    瀏覽量

    64930
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1348

    瀏覽量

    120957
  • 引腳
    +關注

    關注

    16

    文章

    1050

    瀏覽量

    49051
  • 串行總線
    +關注

    關注

    1

    文章

    164

    瀏覽量

    30444

原文標題:再談I2C,硬件問題匯總及死鎖解決辦法

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    i2c總線協議pdf

    I2C 總線規范目錄1 序言
    發表于 08-13 17:16

    i2c總線規范

    1992 I2C 總線規范的這個版本有以下的修正? 刪除了用軟件編程從機地址的內容因為實現這個功能相當復雜而且不被使用? 刪除了低速模式實際上這個模式是整個I2C 總線規范的子集不需要
    發表于 08-13 17:18

    I2C規范,I2C總線原理

    I2C規范,I2C總線原理1 序言
    發表于 04-09 18:34

    I2C總線彩電的檢修

    彩電,軟件設置中必須有自檢功能。我國早期開發研制的個別型號I2C總線彩電軟件中就未開發自檢測試,或者說故障自檢測試很不完善。再者,即使具有優良的故障自檢軟件,還應有最起碼的硬件運行環境。也就是說,欲
    發表于 09-05 10:56

    I2C總線協議詳解

    I2C總線定義 I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發的兩線式串行總線,用于連接微控制
    發表于 02-01 09:56

    Micropython TPYBoard I2C用法

    先看看基本用法: from pyb import I2C i2c = I2C(1) # create on bus 1 i2c =
    發表于 05-25 12:14

    淺談I2C總線

    I2C(Inter Integrated Circuit,內部集成電路)總線是價格低廉卻很有效的用以互連小規模嵌入式系統內的外設的網絡。I2C 總線有時候也叫作 IIC,它已有20多年
    發表于 11-30 11:50

    I2C總線是什么

    I2C總線I2C總線(讀做“IC”或“I2C
    發表于 07-21 09:03

    I2C總線簡介

    1、I2C總線簡介I2C是兩線式串行總線,用于連接微控制器及其外圍設備。I2C總線最主要的優點是
    發表于 08-20 08:25

    什么是軟件I2C硬件I2C

    學習I2C總線通信協議,完成基于I2C硬件協議的AHT20溫濕度傳感器的數據采集,并將采集的溫度-濕度值通過串口輸出。具體任務:1)解釋什么是“軟件
    發表于 08-23 06:19

    I2C總線的相關資料推薦

    16.1 I2C工作原理16.1.1 I2C串行總線概述I2C總線是PHLIPS公司推出的一種雙線式串行
    發表于 11-29 06:41

    I2C總線簡析

    硬件上,I2C 總線是由時鐘總線 SCL 和數據總線 SDA 兩條線構成,連接到總線上的所有器
    發表于 01-07 06:03

    I2C總線簡單介紹

    1.I2C簡單介紹I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。
    發表于 01-14 07:10

    I2C總線的原理是什么

    采用串行總線技術可以大大簡化硬件的設計,體積減少,可靠性高。常見的總線,I2C(inter IC bus),單總線,SPI
    發表于 01-18 07:36

    I2C總線簡介

    I2C 簡介I2C 是雙線雙向的串行總線,它為設備之間數據交換提供了一種簡單高效的方法。I2C 標準是一個具有沖突檢測機制和仲裁機制的真正意義上的多主機
    發表于 02-22 06:55
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>