歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux驅動子系統之I2C

[概述]

I2C總線是由Philips公司開發的兩線式串行總線,這兩根線為時鐘線(SCL)和雙向數據線(SDA)。由於I2C總線僅需要兩根線,因此在電路板上占用的空間更少,帶來的問題是帶寬較窄。I2C在標准模式下傳輸速率最高100Kb/s,在快速模式下最高可達400kb/s。屬於半雙工。

在嵌入式系統中,I2C應用非常廣泛,大多數微控制器中集成了I2C總線,一般用於和RTC,EEPROM,智能電池電路,傳感器,LCD以及其他類似設備之間的通信。 

[I2C總線傳輸時序]

 

[I2C總線的信號狀態]

1、  空閒狀態:SDA和SCL都是高電平;

2、  開始條件(S):SCL為高電平時,SDA由高電平向低電平跳變,開始傳輸數據;

3、  結束條件(P):SCL為高電平時,SDA由低電平向高電平跳變,結束傳輸數據;

4、  數據有效:在SCL的高電平期間,SDA保持穩定,數據有效。SDA的改變只能發生在SCL的低電平期間;

5、  ACK信號:數據傳輸的過程中,接收器件每接收一個字節數據要產生一個ACK信號,向發送器件發出特定的低電平脈沖,表示已經收到數據。

 

[從設備地址]


I2C總線從設備使用7位地址,最後一個為讀寫控制位。下圖是eeprom的原理圖,我們可以計算出它的地址為0x50。

 

[I2C讀寫方式]

多字節寫的時序


多字節讀的時序


具體可參考datasheet

Copyright © Linux教程網 All Rights Reserved