I2C总线传输协议
一、I2C總線是一種雙向的同步串行總線,它支持設備之間的短距離通信,經常用于處理器和一些外圍設備之間的接口通信。I2C總線的標準通信速率是100Kbps,快速模式是400Kbps,高速模式支持3.4Mbps。I2C總線支持多設備的通信,而且各個設備之間的SCL和SDA線都是線與關系。I2C總線上擴展的器件的數量主要由電容負載來決定,其負載能力為400pF。I2C總線具有極低的電流消耗。
二、I2C總線的物理層:
I2C總線物理層由兩根線組成:串行時鐘線SCL、串行數據線SDA。由于這兩根線都是開漏輸出結構,因此必須都接上拉電阻到高電平,因此當總線處于空閑狀態時,兩根線都處于高電平狀態。下圖為I2C總線的物理層示意圖。
三、I2C總線的協議層:
I2C總線上的每一個設備都可以作為主設備或者從設備,而且每一個設備都會對應一個唯一的設備地址。通常的我們將CPU模塊作為主設備,而掛接在總線上的其他設備作為從設備。I2C總線上的主設備與從設備之間以8字節為單位進行雙向數據傳輸,并且每個單位后還須跟著一位ACK位。其中數據在SCL處于低電平時被放到SDA數據線上,在SCL處于高電平時進行數據的采樣。下圖是I2C總線的數據傳輸協議時序圖。
由圖可知,I2C總線的傳輸時序包括:開始條件、地址幀、數據幀、停止條件、重復開始條件。
開始條件:標識傳輸正式開始,當SCL處于高電平時,SDA由高電平變為低電平。這樣所有Slave設備都會知道傳輸已經開始。
地址幀:地址幀總是在一次通信的最開始出現,通常包括7位的設備地址(MSB)和最后1位的讀寫控制位(1表示讀,0表示寫)。接下來是1位的NACK/ACK,當這8位地址發送完成后,Slave設備獲得SDA的控制權,此時Slave設備應該在第9個時鐘脈沖之前回復一個ACK(將SDA拉低)以表示數據接收正常,否則表示數據接受失敗,控制權交由Master設備處理。
數據幀:在地址幀發送之后,就可以開始傳送數據了。每個數據幀8位,數據幀的數量可以是任意的,直到產生停止條件。每一個8位數據傳輸完成之后,接收方就需要回復一個ACK/NACK。
停止條件:當所有數據都發送完成時,當SCL處于高電平時,SDA由低電平變為高電平。除了開始條件和停止條件,在正常的數據傳輸過程中,當SCL處于高電平時,SDA上的值不能變化,否則會意外產生停止條件。
重復開始條件:有時Master設備需要在一次通信中進行多次消息交換(例如切換讀寫操作等),并且不希望其他Master設備干擾,這時可以使用重復開始條件。再一次通信中,Master設備可以產生多次開始條件來完成多次信息交換,最后在產生一個停止條件結束整個通信過程。
注1:上面都是以8位為一個單元進行的數據傳輸,其實I2C也是支持10位地址空間的。對于10位地址的傳輸時序,需要2個地址幀完成地址的傳輸,其他和8位的傳輸協議相同。下圖為10位地址傳輸時序圖。
注2:I2C總線的上拉電阻的阻值要精心考慮,如果上拉電阻的阻值太大,則由于I2C設備輸入端的輸入電容的存在,會造成信號上升沿和下降沿變緩,以至于不能滿足I2C設備的建立時間和保持時間,造成通信的錯誤發生;如果上拉電阻的阻值過小,則會造成較大的功率損耗。因此I2C通信的上拉電阻的阻值要滿足設備上升沿和下降沿要求的同時盡量選擇較大的阻值,以降低消耗的功耗問題。
?
?
?
?
總結
- 上一篇: Sesame 2.7.0 发布,Java
- 下一篇: 转使用jQuery Ajax的内存回收