I2C通訊協議


1、基本概念

  主機            初始化發送,產生時鍾信號和終止發送的器件

      從機             被主機尋址的器件

  發送器          發送數據到總線的器件

      接收器         從總線接收數據的器件

      多主機         同時有多於一個主機嘗試控制總線 但不破壞報文

      仲裁           是一個在有多個主機同時嘗試控制總線,但只允許其中一個控制總線並使報文不被破壞的過程

      同步           兩個或多個器件同步時鍾信號的過程

2、硬件結構

每一個I2C總線器件內部的SDASCL引腳電路結構都是一樣的,引腳的輸出驅動與輸入緩沖連在一起。其中輸出為漏極開路的場效應管、輸入緩沖為一只高輸入阻抗的同相器。這種電路具有兩個特點:

(1)由於 SDASCL 為漏極開路結構,借助於外部的上拉電阻實現了信號的線與邏輯; 
2)引腳在輸出信號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致。為 時鍾同步總線仲裁提供硬件基礎。

3、時鍾同步

如果從機希望主機降低傳送速度可以通過將SCL主動拉低延長其低電平時間的方法來通知主機,當主機在准備下一次傳送發現SCL的電平被拉低時就進行等待,直至從機完成操作並釋放SCL線的控制控制權。這樣以來,主機實際上受到從機的時鍾同步控制。可見SCL線上的低電平是由時鍾低電平最長的器件決定;高電平的時間由高電平時間最短的器件決定。這就是時鍾同步,它解決了I2C總線的速度同步問題。

4、主機發送數據流程

1)主機在檢測到總線為空閑狀態(即 SDASCL 線均為高電平)時,發送一個啟動信號“S”,開始一次通信的開始

2)主機接着發送一個命令字節。該字節由 7 位的外圍器件地址(設備地址)和 1 位讀寫控制位 R/W組成(此時 R/W=0

通常最低一位就是R/W位,,“0”表示寫,“1”表示讀(通常讀寫信號中寫上面有一橫線,表示低電平)

3)相對應的從機收到命令字節后向主機回饋應答信號 ACKACK=0

4)主機收到從機的應答信號后開始發送第一個字節的數據

5)從機收到數據后返回一個應答信號 ACK

6)主機收到應答信號后再發送下一個數據字節

7)當主機發送最后一個數據字節並收到從機的 ACK 后,通過向從機發送一個停止信號P結束本次通信並釋放總線。從機收到P信號后也退出與主機之間的通信。

注意:主機所接收數據的數量是由主機自身決定,當發送非應答信號/A”時從機便結束傳送並釋放總線(非應答信號的兩個作用:前一個數據接收成功,停止從機的再次發送)。

I2C位傳輸
   數據傳輸:SCL為高電平時,SDA線若保持穩定,那么SDA上是在傳輸數據bit
   SDA發生跳變,則用來表示一個會話的開始或結束(后面講)
   數據改變:SCL為低電平時,SDA線才能改變傳輸的bit

 

 

I2C開始和結束信號
   開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。
   結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數據。

 另外I2C的通信速率為100Kb,快速為400Kb

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM