1、基本概念 主機 初始化發送,產生時鐘信號和終止發送的器件 從機 被主機定址的器件 發送器 發送數據到匯流排的器件 接收器 從匯流排接收數據的器件 多主機 同時有多於一個主機嘗試控制匯流排 但不破壞報文 仲裁 是一個在有多個主機同時嘗試控制匯流排,但只允許其中一個控制匯流排並使報文不被破壞的過程 同步 兩個 ...
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)
(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由低電平向高電平跳變,結束傳送數據。