1. 程式人生 > >IIC下掛多外設,SCLK頻率高導致掛死疑問

IIC下掛多外設,SCLK頻率高導致掛死疑問

最近做IIC介面下掛多個外設,但是發現SCLK速率設定為400KHz時,系統執行一段時間就卡死,主要是OLED的影響,萬用表測量SCL SDA電平為高;查了下IIC相關的資料,某個論壇上的帖子給了很大的啟發,權當學習記錄應用。目前還有疑問是,SCLK降到100K就OK了,不知道SCLK頻率高到底怎麼影響IIC掛死的,OLED  手冊上最高iiC  SCLK  400k,會不是到臨界點導致的,望有經驗的兄弟路過留言指點,感謝!

 

【原貼內容】:

【牛人回覆】:

本帖最後由 yang_alex 於 2017-9-26 09:37 編輯


這兩個上拉電阻不僅僅是電平匹配!

要真正瞭解為什麼需要這兩個電阻的原因,首先要了解這SDA和SCL兩個埠的內部電路。
下面這張圖就很好的說明了,原來這兩個埠內部是OD門(開漏門)。
 

而這個OD門的主要作用是防止I2C匯流排衝突。其機理是這樣的:

I2C匯流排是一個真正的多主機匯流排,如果兩個或更多主機同時初始化資料傳輸,就有可能出現匯流排衝突。SDA 和 SCL 都是雙向線路,都通過一個上拉電阻連線到電源VCC。 當匯流排空閒時這兩條線路都是高電平。連線到匯流排的器件輸出級必須是漏極開路或集電極開路才能執行線與的功能。主機只能在匯流排空閒的時侯啟動傳輸,當 SCL 線是高電平時,仲裁在 SDA 線發生。 這樣, 在其他主機發送低電平時, 傳送高電平的主機將斷開它的資料輸出級因為總線上的電平與它自己的電平不相同。

此外,即使在一主多從的系統中,由於SDA 是大家一起使用的,所以當一個裝置(或器件)不用的時候,把它固定成0或1都必將導致匯流排衝突,同時自己在通訊時還要檢測匯流排是否被佔用,所以線與功能的OD門是一個很好的選擇。

由於OD門具有線與功能,所以不同電壓的器件(或器件),也可以連線在一起,從而實現電平匹配的功能。但是需要做一定處理。
 
最後,上拉電阻的選擇涉及兩個問題,其一是匯流排的傳輸速度,其次是總線上裝置(或器件)的數量。
I2C匯流排支援低速模式100kbit/s 、快速模式400kbit/s 和高速模式3.4Mbit/s ,
下圖是快速模式下電阻取值圖
 

最後,給大家一份資料吧,使用I2C匯流排,匯流排協議總是要看一看的。