I2C通信協議介紹

I2C總線是PHLIPS公司在20世紀80年代推出的一種串行總線。具備引腳少,硬件實現簡單,可擴展性強的優勢。I2C總線的另外一優勢是支持多主控,總線上任何可以進行發送/接收數據的設備均可以佔領總線。固然,任意時間點上只能存在一個主控。函數

  I2C便是一種總線,也是一種通信協議。在嵌入式開發中,通信協議可分爲兩層:物理層和協議層。物理層是數據在物理媒介傳輸的保障;協議層主要是規定通信邏輯,同一收發雙方的數據打包、解包標準。打個比方,物理層至關於現實中的公路,而協議層則是交通規則,汽車能夠在路上行駛,可是須要交通規則對行駛規則進行約束,否則將出現危險,也就是數據傳輸紊亂、丟包。blog

1. 物理層
I2C通信系統接線圖以下: 開發

这里写图片描述
(1) 在I2C通信總線上,可鏈接多個I2C通信設備,支持多個通信主機和多個通信從機 
(2) I2C通信只須要兩條雙向總線:串行數據線(SDA),串行時鐘線(SCL)。數據線用於傳輸數據,時鐘線用於同步數據收發 
(3) 每一個鏈接到總線的設備都有一個獨立的地址,主機正是利用該地址對設備進行訪問 
(4) SDA和SCL總線都須要接上上拉電阻,當總線空閒時,兩根線均爲高電平。鏈接到總線上的任意器件輸出低電平都會將總線信號拉低。即各器件的SDA和SCL都是線與的關係 
(5) 多個主機同時使用總線時,須要用仲裁方式決定哪一個設備佔用總線,否則數據將會產生衝突 
(6) 串行的8位雙向數據傳輸位速率在標準模式下可達100kbps,快速模式下可達400kbps,高速模式下可達3.4Mbps(目前大多數I2C設備還不支持高速)同步

2. 協議層
協議層規約了通信的起始、中止信號,數據有效性、響應、衝裁同步、地址廣播等。擴展

2.1 通信的起始信號/結束信號
在SCL線爲高電平期間,SDA線由高電平向低電平轉換表是起始信號。 打包


在SCL線爲高電平期間,SDA線由低電平向高電平轉換表是結束信號。 配置

这里写图片描述
  起始/結束信號都是由主機發出的,在起始信號產生後,總線就處於被佔用的狀態;在結束信號產生後,總線就處於空閒狀態。硬件

須要注意的兩點: 
(1) 接收器件接收到一個完整的數據字節後,可能須要完成一些其餘工做,如處理內部接收中斷服務函數等,這就沒法當即接收下一字節的數據,這時接收器件可將SCL線拉成低電平,從而使得主機處於等待狀態。直至接收器件準備好接收下一字節數據時再釋放SCL線使之爲高電平。 
(2) 鏈接到I2C總線上的器件,若具備I2C總線控制器那麼很硬件會自動檢測到起始、結束信號,而對於不具有I2C總線控制器的器件(單片機)來講,須要在每一個時鐘週期內保證對數據線SDA採樣兩次,捕獲是否接收到起始/結束信號。im

2.2 數據傳輸
 
(1) 起始信號後,總線上全部的從機開始等待主機緊接下來的從機地址廣播。由於總線上每一個設備的地址都是惟一的,當主機廣播的地址與某個設備地址相同時,該設備就被選中,並向主機發出應答(ACK)或者非應答(NACK),主機只有在接收到應答信號後繼續發送/接收數據,沒選中的設備將會忽略以後的數據信號。根據I2C協議,從機地址能夠是7位或者10位。數據

(2) I2C總線上傳輸的數據包括上述的地址信號,又包括真正的數據信號。在起始信號後需傳送一個從機地址(7位),第8位是數據的傳輸方向(接收/發送),「0」表示主機發送數據,「1」表示主機接收數據。每次數據的傳輸老是由主機產生結束信號以結束傳輸,但若主機但願繼續佔用總線進行新的數據傳輸時,則能夠不產生結束信號,而是再次發送起始信號對另外一從機地址尋址。

(3) 若配置爲寫數據方向,主機開始向從機傳輸數據,數據包大小爲8位,主機每發送完1字節數據都有等到從機的應答信號(ACK),多字節數據發送時重複此過程。傳輸結束後,主機向從機發送一箇中止信號表再也不傳輸數據。

(4) 若配置爲讀方向,從機開始向主機返回數據,數據包大小仍是8位。同理,從機每發送完一字節數據都要等到主機的應答信號(ACK),重複此過程能夠返回多個數據。當主機但願中止接收數據時就向返回一個非應答信號(NACK),數據傳輸將結束。

(5) 實際I2C通信採用的是讀寫複合的格式。傳輸過程當中主機須要發出2次起始信號:第一次傳輸主機經過從機地址找到從機設備,發送一段數據,這個數據是從設備內部寄存器或者存儲器地址;第二次傳輸是對該地址進行讀/寫。主機要讀取從機數據時,主機會釋放對SDA總線的控制,由從機控制SDA總線,主機負責接收信號;主機要向從機設備寫數據時,SDA由主機控制,從機負責接收信號。  

相關文章
相關標籤/搜索