技術專題

I2C接口協議介紹與應用說明發布時間:2017-12-29    被閱覽數:

I2C總線介紹


  I2C(Inter-Integrated Circuit)總線是由Philips公司開發的一種雙向二線制同步串行總線,它只需要兩條線(SDA,SCL)即可在連接于總線上的器件之間傳送信息。I2C總線的工作速率有100k、400k和4M三種,支持多機通訊,支持多主控模塊但同一時刻只允許有一個主控端。

  SCL(Serial Clock):邊沿觸發方式,上升沿將數據輸入到EEPROM,下降沿驅動EEPROM輸出數據。

  SDA(Serial Data Line):雙向數據線,OD門,每次傳輸8bit。


I2C總線介紹與應用說明.gif

成都英創ETA202 I2C矩陣鍵盤擴展模塊


  I2C總線中主要定義如下:

  發送機(Transmitter):向總線傳輸數據的設備。

  接收機(Receiver):從總線接收數據的設備。

  主機(Master):產生時鐘、啟動發送、發送I2C命令、停止發送的設備。

  從機(Slave):監聽總線并且被主機尋址的設備。

  多主控(Multi-master):總線上可以有多個主機,每一個都可以發送命令。

  仲裁(Arbitration):在有多個主機同時嘗試控制總線時,只允許其中一個控制總線并使報文不被破壞的過程。

  同步():兩個或多個設備同步時鐘信號的過程。


  SCL和SDA信號都是雙向的,他們通過電阻連接到電源上,總線空閑時兩條線都處于高電平狀態。I2C總線上的設備都必須有集電極開路或者漏極開路管腳,激活總線意味著拉低其電平。單個總線上的設備數量幾乎是無限的,唯一的要求是總線電容不超過400pF。由于邏輯1取決于電源電壓的大小,因此沒有標準的總線電壓。


I2C總線掛載設備示意圖.gif

I2C總線掛載設備示意圖


I2C時序分析


  總線空閑

  SDA和SCL兩條信號線都處于高電平,即總線上所有的器件都釋放總線,兩條信號線的上拉電阻把電平拉高。


  啟動信號START

  時鐘信號SCL保持高電平,數據信號SDA的電平被拉低。啟動信號必須是跳變信號,而且在建立該信號前必須保證總線處于空閑狀態。


  停止信號STOP

  時鐘信號SCL保持高電平,數據線被釋放,使SDA返回高電平,停止信號也必須是跳變信號。


I2C總線介紹與應用說明.gif

I2C啟動信號START與停止信號STOP


  應答信號ACK

  發送器每發送一個字節之后,在時鐘的第9個脈沖期間釋放數據總線,由接收器發送一個應答信號ACK(將SDA的電平拉低)來表示數據成功接收。


  無應答信號NACK

  在時鐘的第9個脈沖期間發送器釋放數據總線,而接收器不拉SDA電平,則表示一個無應答信號NACK,NACK有兩種用途:

 ?。?)一般表示接收器未成功接收數據字節。

 ?。?)當接收器是主機時,它收到最后一個字節后,應發送一個NACK信號,以通知從機結束數據發送,并釋放總線,以便主機發送停止信號STOP。


  數據傳輸

  每個時鐘脈沖傳輸1比特數據。SDA信號只在SCL處于低電平時變化,SCL處于高電平期間,SDA電平必須保持穩定。


I2C總線介紹與應用說明.gif

I2C數據傳輸時SDA與SCL電平變化情況


I2C總線介紹與應用說明.gif

I2C數據傳輸流程


I2C總線協議


  基本工作原理

  主設備以啟動信號START來掌管總線,以停止信號STOP來釋放總線。主設備啟動的每一個I2C命令均以START開始,以STOP結束。

  啟動信號START后緊接著發送一個地址字節,其中7位為被控器件的地址碼,一位為讀/寫控制位R/W。R/W為0表示主機向從機寫數據,R/W為1表示主機從從機讀取數據。當從機檢測到收到的地址與自己的地址相同時,在第9個時鐘期間反饋應答信號。每個數據字節在傳送時都是高位(MSB)在前。


I2C總線介紹與應用說明.gif

I2C基本工作流程


  寫數據過程

  1、主機檢測到總線空閑之后,發送啟動信號START信號掌管總線。

  2、主機發送一個地址字節(包括7位地址碼和1位R/W)。

  3、當從機檢測到主機發送的地址與自己的地址相同以后,發送應答信號(ACK)。

  4、主機收到應答信號ACK后,開始發送第一個數據字節。

  5、從機收到數據字節后,發送應答信號ACK表示繼續傳送數據,發送NACK表示數據傳送結束。

  6、主機發送完全部數據后,發送停止信號STOP,結束通訊并釋放總線。


  讀通訊過程

  1、主機檢測到總線空閑之后,發送啟動START信號掌管總線。

  2、主機發送一個地址字節(包括7位地址碼和1位R/W)。

  3、當從機檢測到主機發送的地址與自己的地址相同以后,發送應答信號ACK。

  4、主機收到應答信號ACK后釋放數據總線,開始接收第一個數據字節。

  5、主機收到數據字節后,發送應答信號ACK表示繼續傳送數據,發送NACK表示數據傳送結束。

  6、主機完成接收以后,發送停止信號STOP,結束通訊并釋放總線。


  同步

  每個主機必須生成自己的時鐘信號,只有當時鐘信號電平為低時,數據才能改變。執行總線仲裁必須有同步時鐘。當某個主機拉低時鐘電平時,時鐘會并保持低電平,直到所有主機均將時鐘拉至高電平。同樣,時鐘會處于高電平狀態,直到第一個主機將其拉低。這樣,通過觀察SCL信號,主設備可以同步它們的時鐘。


  仲裁

  對于I2C總線上的正常數據傳輸過程而言,只允許一個主機進行控制。如果出于某種原因,兩個主機同時啟動I2C命令,則仲裁過程決定哪個主機獲得控制權并且可以繼續執行命令。仲裁是通過SDA信號執行的,此時SCL信號處于高電平。每個主機檢查總線上的SDA信號是否對應于自己生成的SDA信號。如果總線上的SDA信號應該是高電平但它卻處于低電平,那么這個主機就在仲裁過程中失敗。仲裁失敗的I2C主設備可以產生SCL脈沖直到字節結束,然后必須釋放總線并進入從設備模式。仲裁過程可以持續到所有數據傳輸完畢以后。這意味著在多主機系統中,每個I2C主機必須監控I2C總線并執行相關操作。


I2C總線典型電路


  現在的ARM CPU芯片普遍直接支持I2C總線,直接從CPU中將相應管腳引出,即可以外接I2C功能模塊或者芯片,然后通過軟件進行控制操作。

  下圖為一個典型的I2C應用擴展(成都英創ETA202 I2C矩陣鍵盤擴展模塊部分電路),使用TCA8418芯片擴展出8x8矩陣鍵盤。直接將SDA、SCL、鍵盤中斷信號KEY_INT#和復位信號RST#接入芯片,并接上電源和地,即可以控制8x8矩陣鍵盤。


I2C總線介紹與應用說明.gif


I2C總線在英創主板平臺上的應用


  支持I2C接口的芯片都可以直接和英創主板連接,并執行相應的功能。歷年來,大量用戶使用英創主板進行I2C應用和數據處理,英創也累積了豐富的工程經驗。下面整理出了英創網站發表的相關技術文檔供用戶參考。雖然有一些方案文檔中提到的英創主板是較老的型號,用戶在新產品開發的時候未必會使用這些老主板產品,但是文中的軟硬件使用技巧、編程技巧和方法等技術細節,是值得用戶參考或者直接使用的。


  使用方法與技巧


英創工業主板EM9160的GPIO應用于I2C通訊嵌入式Linux工控板EM9160的I2C功能及其應用

EM9170工控主板I2C總線使用方法JAVA操作英創主板I2C接口簡介
Go Top
云南快乐十分