1. 程式人生 > >I2C匯流排協議詳解

I2C匯流排協議詳解

1.1 I2C匯流排知識

1.1.1  I2C匯流排物理拓撲結構
 
    I2C 匯流排在物理連線上非常簡單,分別由SDA(序列資料線)和SCL(序列時鐘線)及上拉電阻組成。通訊原理是通過對SCL和SDA線高低電平時序的控制,來 產生I2C匯流排協議所需要的訊號進行資料的傳遞。在匯流排空閒狀態時,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平。

1.1.2  I2C匯流排特徵
    I2C總線上的每一個裝置都可以作為主裝置或者從裝置,而且每一個裝置都會對應一個唯一的地址(可以從I2C器件的資料手冊得知),主從裝置之間就通過這 個地址來確定與哪個器件進行通訊,在通常的應用中,我們把CPU帶I2C匯流排介面的模組作為主裝置,把掛接在總線上的其他裝置都作為從裝置。
    I2C總線上可掛接的裝置數量受匯流排的最大電容400pF 限制,如果所掛接的是相同型號的器件,則還受器件地址位的限制。
    I2C匯流排資料傳輸速率在標準模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達3.4Mbit/s。一般通過I2C匯流排介面可程式設計時鐘來實現傳輸速率的調整,同時也跟所接的上拉電阻的阻值有關。
    I2C總線上的主裝置與從裝置之間以位元組(8位)為單位進行雙向的資料傳輸。

1.1.3  I2C匯流排協議
    I2C協議規定,總線上資料的傳輸必須以一個起始訊號作為開始條件,以一個結束訊號作為傳輸的停止條件。起始和結束訊號總是由主裝置產生。匯流排在空閒狀態 時,SCL和SDA都保持著高電平,當SCL為高電平而SDA由高到低的跳變,表示產生一個起始條件;當SCL為高而SDA由低到高的跳變,表示產生一個 停止條件。在起始條件產生後,匯流排處於忙狀態,由本次資料傳輸的主從裝置獨佔,其他I2C器件無法訪問匯流排;而在停止條件產生後,本次資料傳輸的主從裝置 將釋放匯流排,匯流排再次處於空閒狀態。如圖所示:

    在瞭解起始條件和停止條件後,我們再來看看在這個過程中資料的傳輸是如何進行的。前面我們已經提到過,資料傳輸以位元組為單位。主裝置在SCL線上產生每個 時鐘脈衝的過程中將在SDA線上傳輸一個數據位,當一個位元組按資料位從高位到低位的順序傳輸完後,緊接著從裝置將拉低SDA線,回傳給主裝置一個應答位, 此時才認為一個位元組真正的被傳輸完成。當然,並不是所有的位元組傳輸都必須有一個應答位,比如:當從裝置不能再接收主裝置傳送的資料時,從裝置將回傳一個否 定應答位。資料傳輸的過程如圖所示:

 
    在前面我們還提到過,I2C總線上的每一個裝置都對應一個唯一的地址,主從裝置之間的資料傳輸是建立在地址的基礎上,也就是說,主裝置在傳輸有效資料之前 要先指定從裝置的地址,地址指定的過程和上面資料傳輸的過程一樣,只不過大多數從裝置的地址是7位的,然後協議規定再給地址新增一個最低位用來表示接下來 資料傳輸的方向,0表示主裝置向從裝置寫資料,1表示主裝置向從裝置讀資料。如圖所示:
 
1.1.4  I2C匯流排操作
    對I2C匯流排的操作實際就是主從裝置之間的讀寫操作。大致可分為以下三種操作情況:
    第一,主裝置往從裝置中寫資料。資料傳輸格式如下:
    


    第二,主裝置從從裝置中讀資料。資料傳輸格式如下:
    

    第三,主裝置往從裝置中寫資料,然後重啟起始條件,緊接著從從裝置中讀取資料;或者是主裝置從從裝置中讀資料,然後重啟起始條件,緊接著主裝置往從裝置中寫資料。資料傳輸格式如下:

    第三種操作在單個主裝置系統中,重複的開啟起始條件機制要比用STOP終止傳輸後又再次開啟匯流排更有效率。