新聞中心

EEPW首頁 > 模擬技術 > 設計應用 > I2C總線設計注意事項

I2C總線設計注意事項

作者: 時間:2018-12-29 來源:網絡 收藏

  對于硬件工程師,I2C再熟悉不過了,兩根線,一根數(shù)據(jù)SDA一根時鐘SCL。當時在使用avr CPU設計數(shù)據(jù)采集器產品的CPU主板,外掛了Silicon lab的溫濕度傳感器Si7013,實時時鐘,主要實現(xiàn)溫濕度、時鐘及電流電壓等信號通過I2C總線到達CPU進行處理,并且由MCU EFM32WG290F64控制在液晶上和上位機界面上的CPU自帶的I2C總線外掛的六個I2C從設備,如下圖1所示。

本文引用地址:http://m.butianyuan.cn/article/201812/396200.htm

  

  圖1:Avr的I2C接口電路圖

  最初時候,此CPU主板的I2C接口僅掛了實時時鐘和溫度芯片,采用CPU自帶的I2C接口。在調試時,波形都比較正常,上升沿和下降沿都能符合要求,通常跑的速率為100KHz。然而后期改版,需要在I2C接口上增加四個I2C設備,線路也相應地變長,在調試的時候,就發(fā)現(xiàn)CPU主板上電后,I2C工作異常,偶爾會讀不到任何信息。

  經過了長時間的查問題階段,發(fā)現(xiàn)通過I2C接口的SDA和SCL上拉電阻的大小與放置位置都是有講究的。通常I2C上拉電阻放在CPU引出的位置,若沒有外掛的I2C芯片就不需要加上拉電阻,這點在我們的CPU主板是沒有問題的。然后就是上拉電阻,這個通常講的就是與速率有關,我們將上拉電阻從4.7K,2.2K,1K甚至幾百歐姆都測試過,在1K和2.2K的情況下,上升沿和下降沿會比較陡一點。速率100KHZ下采用2.2K的上拉電阻測試出的I2C波形,如圖2所示。

  

  圖2:在100Khz下,采用2.2K的上拉電阻測試出的I2C波形

  最終測出的情況,在上拉電阻為4.7K的時候,速率在100KHZ,波形是正常的;在2.2K的時候,速率在100Khz的時候,波形也是正常;在1K的時候,速率為400Khz,波形也正常;在470歐姆的時候,速率為400KHZ,波形就會畸變。我們采用的上拉2.2K,速率為100KHZ的接口,仍出現(xiàn)CPU板電后I2C工作異常,讀不到任何異常信息。后發(fā)現(xiàn)是SDA被一直拉低了,SCL一直為高,I2C被死鎖了。

  為了解決這種問題,在網絡上找到一種采用IO模擬I2C的方式,調試了一周后,發(fā)現(xiàn)這個問題得到了解決。將I2C接口當做普通IO來操作可能是改動最小的一種方式。其實針對這個問題,還有一些辦法可以使用:

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

  2)將所有的從I2C設備的電源連接在一起,通過MOS管連接到主電源,而MOS管的導通關斷由I2C主設備來實現(xiàn)。

  3)在I2C從設備設計看門狗的功能。

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

  由于avr CPU帶多個I2C從設備出現(xiàn)死鎖的問題,雖然能夠通過IO模擬解決問題,但是對于編程來說比較麻煩,IO模擬在高速上面效果并不好。后來更換了Silicon Labs的MCU,型號為EFM32WG290F64,做了一個最小系統(tǒng)板,外圍電路不變,I2C死鎖問題不再存在,有效地解決了我的I2C問題。采用EFM32WG290F64讀到的I2C波形如下:

  

  圖3:EFM32WG290F64讀到的I2C波形

  另外,設計中通過采用了多片溫濕度傳感器Si7013,精度也非常高,特別在高溫條件下,測試的濕度準確率也非常高。其實I2C接口在我們的設計中再常見不過,但在設計中還是要特別注意以下幾點,能夠充分考慮以下的要點,I2C設計就可以游刃有余。

  1)I2C線路的負載電容不能超過400pF;

  2)需要滿足上升沿和下降沿的時序關系;

  3)I2C上拉電阻和速率有著密切的聯(lián)系,需要選擇合理;

  4)如何判斷死鎖的情況,如上面所示,并提供了一系列的解決方案。



關鍵詞: I2C總線

評論


相關推薦

技術專區(qū)

關閉