(1)概述
I2C(Inter-Integrated Circuit BUS) 積體電路匯流排,該匯流排由NXP(原PHILIPS)公司設計,多用於主控制器和從器件間的主從通訊,在小資料量場合使用,傳輸距離短,任意時刻只能有一個主機等特性。
經常IIC和SPI介面被認為指定是一種硬體裝置,但其實這樣的說法是不盡準確的,嚴格的說他們都是人們所定義的軟硬結合體,分為物理層(四線結構)和協議層(主機,從機,時鐘極性,時鐘相位)。
IIC,SPI的區別不僅在與物理層,IIC比SPI有著一套更為複雜的協議層定義。下面來分別說明一下IIC的物理層和協議層。
(2)IIC的物理層
a.只要求兩條匯流排線路,一條是序列資料線SDA,一條是序列時鐘線SCL。(IIC是半雙工,而不是全雙工)。
b.每個連線到匯流排的器件都可以通過唯一的地址和其它器件通訊,主機/從機角色和地址可配置,主機可以作為主機發送器和主機接收器。
c.IIC是真正的多主機匯流排,(而這個SPI在每次通訊前都需要把主機定死,而IIC可以在通訊過程中,改變主機),如果兩個或更多的主機同時請求匯流排,可以通過沖突檢測和仲裁防止匯流排資料被破壞。
d.傳輸速率在標準模式下可以達到100kb/s,快速模式下可以達到400kb/s。
e.連線到匯流排的IC數量只是受到匯流排的最大負載電容400pf限制。
一個典型的IIC介面如下圖(1)所示
圖(1)
(3)IIC的協議層
IIC的協議層才是掌握IIC的關鍵。現在簡單概括如下:
a.資料的有效性
在時鐘的高電平週期內,SDA線上的資料必須保持穩定,資料線僅可以在時鐘SCL為低電平時改變。
如圖(2)所示:
圖(2)
b.起始和結束條件
起始條件:當SCL為高電平的時候,SDA線上由高到低的跳變被定義為起始條件,結束條件:當SCL為高電平的時候,SDA線上由低到高的跳變被定義為停止條件,要注意起始和終止訊號都是由主機發出的,連線到I2C總線上的器件,若具有I2C匯流排的硬體介面,則很容易檢測到起始和終止訊號。匯流排在起始條件之後,視為忙狀態,在停止條件之後被視為空閒狀態,對起始條件和結束條件的描述如下圖(3)所示。
圖(3)
c.應答
每當主機向從機發送完一個位元組的資料,主機總是需要等待從機給出一個應答訊號,以確認從機是否成功接收到了資料,從機應答主機所需要的時鐘仍是主機提供的,應答出現在每一次主機完成8個數據位傳輸後緊跟著的時鐘週期,低電平0表示應答,1表示非應答,如圖(4)所示。
圖(4)
d.資料幀格式



一般情況下,[3]是比較常見的,比如MPU6050模組,
