I2C總線協議詳解

發布日期:2017-06-06首頁 > 安全資(zī)訊

1.1 I2C總線知(zhī)識

1.1.1  I2C總線物(wù)理拓撲結構


1.png 
    

I2C 總線在物(wù)理連接上非常簡單,分(fēn)别由SDA(串行數據線)和SCL(串行時鍾線)及上拉電(diàn)阻組成。通信原理是通過對SCL和SDA線高低電(diàn)平時序的控制,來 産生(shēng)I2C總線協議所需要的信号進行數據的傳遞。在總線空閑狀态時,這兩根線一(yī)般被上面所接的上拉電(diàn)阻拉高,保持着高電(diàn)平。

1.1.2  I2C總線特征
    I2C總線上的每一(yī)個設備都可以作爲主設備或者從設備,而且每一(yī)個設備都會對應一(yī)個唯一(yī)的地址(可以從I2C器件的數據手冊得知(zhī)),主從設備之間就通過這 個地址來确定與哪個器件進行通信,在通常的應用中(zhōng),我(wǒ)們把CPU帶I2C總線接口的模塊作爲主設備,把挂接在總線上的其他設備都作爲從設備。
    I2C總線上可挂接的設備數量受總線的最大(dà)電(diàn)容400pF 限制,如果所挂接的是相同型号的器件,則還受器件地址位的限制。
    I2C總線數據傳輸速率在标準模式下(xià)可達100kbit/s,快速模式下(xià)可達400kbit/s,高速模式下(xià)可達3.4Mbit/s。一(yī)般通過I2C總線接口可編程時鍾來實現傳輸速率的調整,同時也跟所接的上拉電(diàn)阻的阻值有關。
    I2C總線上的主設備與從設備之間以字節(8位)爲單位進行雙向的數據傳輸。

1.1.3  I2C總線協議
    I2C協議規定,總線上數據的傳輸必須以一(yī)個起始信号作爲開(kāi)始條件,以一(yī)個結束信号作爲傳輸的停止條件。起始和結束信号總是由主設備産生(shēng)。總線在空閑狀态 時,SCL和SDA都保持着高電(diàn)平,當SCL爲高電(diàn)平而SDA由高到低的跳變,表示産生(shēng)一(yī)個起始條件;當SCL爲高而SDA由低到高的跳變,表示産生(shēng)一(yī)個 停止條件。在起始條件産生(shēng)後,總線處于忙狀态,由本次數據傳輸的主從設備獨占,其他I2C器件無法訪問總線;而在停止條件産生(shēng)後,本次數據傳輸的主從設備 将釋放(fàng)總線,總線再次處于空閑狀态。如圖所示:


2.png


    在了解起始條件和停止條件後,我(wǒ)們再來看看在這個過程中(zhōng)數據的傳輸是如何進行的。前面我(wǒ)們已經提到過,數據傳輸以字節爲單位。主設備在SCL線上産生(shēng)每個 時鍾脈沖的過程中(zhōng)将在SDA線上傳輸一(yī)個數據位,當一(yī)個字節按數據位從高位到低位的順序傳輸完後,緊接着從設備将拉低SDA線,回傳給主設備一(yī)個應答位, 此時才認爲一(yī)個字節真正的被傳輸完成。當然,并不是所有的字節傳輸都必須有一(yī)個應答位,比如:當從設備不能再接收主設備發送的數據時,從設備将回傳一(yī)個否 定應答位。數據傳輸的過程如圖所示:
 

3.png


    在前面我(wǒ)們還提到過,I2C總線上的每一(yī)個設備都對應一(yī)個唯一(yī)的地址,主從設備之間的數據傳輸是建立在地址的基礎上,也就是說,主設備在傳輸有效數據之前 要先指定從設備的地址,地址指定的過程和上面數據傳輸的過程一(yī)樣,隻不過大(dà)多數從設備的地址是7位的,然後協議規定再給地址添加一(yī)個最低位用來表示接下(xià)來 數據傳輸的方向,0表示主設備向從設備寫數據,1表示主設備向從設備讀數據。如圖所示:
 

4.png


1.1.4  I2C總線操作
    對I2C總線的操作實際就是主從設備之間的讀寫操作。大(dà)緻可分(fēn)爲以下(xià)三種操作情況:
    第一(yī),主設備往從設備中(zhōng)寫數據。數據傳輸格式如下(xià):
  

5.png
 


    第二,主設備從從設備中(zhōng)讀數據。數據傳輸格式如下(xià):
   

6.png


    第三,主設備往從設備中(zhōng)寫數據,然後重啓起始條件,緊接着從從設備中(zhōng)讀取數據;或者是主設備從從設備中(zhōng)讀數據,然後重啓起始條件,緊接着主設備往從設備中(zhōng)寫數據。數據傳輸格式如下(xià):

7.png


    第三種操作在單個主設備系統中(zhōng),重複的開(kāi)啓起始條件機制要比用STOP終止傳輸後又(yòu)再次開(kāi)啓總線更有效率。