I2C
什麼是I2C
I2C(Inter-Integrated Circuit)是飛利浦(現為恩智浦,NXP)開發的一種通訊介面,是與時鐘同步進行資料通訊的同步串列通訊方式之一。
I2C和SPI都經常被用於與EEPROM、感測器等進行資料通訊的應用。
I2C使用時鐘 (SCL) 和資料登錄輸出(SDA)兩條訊號線進行通訊。另外,每條訊號線都是開漏輸出,所以需要連接上拉電阻。
通訊時,有主機(Master)和從機(Slave)的分工,主機端對從機端發出發送和接收訊號的指示。另外,時鐘始終由主機輸出,並且輸入和輸出與時鐘同步進行。
一個主機可以連接多個從機。
主機與從機之間的連接示意圖如下:
通訊步驟
在I2C的情況下,透過以下步驟進行通訊:
①由主機發送開始通訊的訊號(開始條件)
②主機發送從機位址
③從機向主機返回就緒訊號(應答訊號)
④傳輸資料(必要時反覆)
⑤主機發送結束通訊的訊號(停止條件)
這些步驟可以用示意圖表示如下:
下面我們以從機位址為0xA0、由主機向從機發送1位元組資料(0x5A)為例進行說明。
從圖中可以看出,從機位址和資料透過MSB(從最高有效位到最低有效位的方向)與 SCL(時鐘)同步進行傳輸。另外,在發送從機位址後和每完成8位資料傳輸後,接收端會輸出應答訊號(=0)。
此外,當SCL為H電平時,SDA的下降沿成為開始條件;當SCL為H電平時,SDA的上升沿成為停止條件。通訊的開始和結束透過該訊號通知從機端。
主機向從機發送資料時
由於一個主機可以連接多個從機,因此主機需要通知從機端要與哪一個從機進行通訊。從機位址可以起到這個的作用。從機端的每個從機都有一個唯一的值。
在發出開始通訊的訊號(開始條件)後,主機會發送要與其通訊的從機端的從機位址,從機(多個)會接收該訊號。其中,與位址一致的從機進入就緒狀態,即處於能夠與主機之間發送和接收資料的狀態。從機位址不匹配的從機則進入待機狀態。
下圖為主機向從機傳輸1位元組資料時的通訊情況示意圖。
從機位址通訊時,如果最低有效位指定為W(=0),則主機將向從機發送資料。
主機接收從機的資料時
下圖為主機接收來自從機的1位元組資料時的通訊情況示意圖。
在從機位址通訊時,如果最低有效位指定為R(=1),則主機將接收來自從機的資料。
關於I2C的更多資訊,請參閱NXP官網上發佈的“I2C匯流排技術規範和使用者手冊”。