1、基本概念
主機 初始化發送,產生時鍾信號和終止發送的器件
從機 被主機尋址的器件
發送器 發送數據到總線的器件
接收器 從總線接收數據的器件
多主機 同時有多於一個主機嘗試控制總線 但不破壞報文
仲裁 是一個在有多個主機同時嘗試控制總線,但只允許其中一個控制總線並使報文不被破壞的過程
同步 兩個或多個器件同步時鍾信號的過程
2、硬件結構
每一個I2C總線器件內部的SDA、SCL引腳電路結構都是一樣的,引腳的輸出驅動與輸入緩沖連在一起。其中輸出為漏極開路的場效應管、輸入緩沖為一只高輸入阻抗的同相器。這種電路具有兩個特點:

(1)由於 SDA、SCL 為漏極開路結構,借助於外部的上拉電阻實現了信號的“線與”邏輯;
(2)引腳在輸出信號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致。為 “時鍾同步”和“總線仲裁”提供硬件基礎。
3、時鍾同步
如果從機希望主機降低傳送速度可以通過將SCL主動拉低延長其低電平時間的方法來通知主機,當主機在准備下一次傳送發現SCL的電平被拉低時就進行等待,直至從機完成操作並釋放SCL線的控制控制權。這樣以來,主機實際上受到從機的時鍾同步控制。可見SCL線上的低電平是由時鍾低電平最長的器件決定;高電平的時間由高電平時間最短的器件決定。這就是時鍾同步,它解決了I2C總線的速度同步問題。
4、主機發送數據流程
(1)主機在檢測到總線為“空閑狀態”(即 SDA、SCL 線均為高電平)時,發送一個啟動信號“S”,開始一次通信的開始
(2)主機接着發送一個命令字節。該字節由 7 位的外圍器件地址(設備地址)和 1 位讀寫控制位 R/W組成(此時 R/W=0)
通常最低一位就是R/W位,,“0”表示寫,“1”表示讀(通常讀寫信號中寫上面有一橫線,表示低電平)
(3)相對應的從機收到命令字節后向主機回饋應答信號 ACK(ACK=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
