1. 程式人生 > >Linux-IIC驅動(1)-IIC匯流排介紹

Linux-IIC驅動(1)-IIC匯流排介紹

IIC我在很久之前就接觸並使用過了,現在來回顧一下它的硬體結構和時序

硬體結構

I2C(Inter-Integrated Circuit)匯流排是由PHILIPS公司開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。硬體結構如下:


I2C匯流排只有兩根雙向訊號線。
SDA: Serial Data Line-資料線
SCL :Serial Clock-時鐘線

I2C匯流排協議規定:從裝置採用7位的地址。D7~D1:從裝置地址。D0位:資料傳送方向位,為“0”時表示主裝置向從裝置寫資料,為“1”時表示主機由從裝置讀資料。主裝置傳送地址時,總線上的每個從裝置都將這7位地址碼與自己的地址進行比較,如果相同,則認為自己正被主裝置定址,根據R/W位將自己確定為傳送器或接收器。


從裝置的地址由固定部分和使用者自定義部分組成。


1.固定部分:D7-D4 共4位決定的。這是由從裝置的生產廠商生產時就已確定的值。
2.使用者自定義部分:D3-D1  共3 位。這3位通常對應裝置的3個引腳(A0~A2)。把3個引腳接到不同的電平上,就可以形成一個3位的數值。

時序

空閒狀態

I2C匯流排匯流排的SDA和SCL兩條訊號線同時處於高電平時,規定為匯流排的空閒狀態。

起始狀態

在時鐘線SCL保持高電平期間,資料線SDA上的電平被拉低(即負跳變),定義為I2C匯流排匯流排的啟動訊號,它標誌著一次資料傳輸的開始

結束狀態

在時鐘線SCL保持高電平時,資料線SDA被釋放,使得SDA返回高電平(即正跳變),稱為I2C匯流排的停止訊號

資料位傳送

I2C總線上的所有資料(地址和資料)都是以8位一個位元組為單位傳送的。

應答位

傳送器每傳送一個位元組,就在時鐘脈衝第9位釋放資料線,由接收器反饋一個應答訊號。 應答訊號為低電平時,定為有效應答位ACK,表示接收器已經成功地接收了該位元組;應答訊號為高電平時,定為非應答位(NACK),表示接收器沒有成功接收該位元組