I2C匯流排學習

2021-08-28 19:48:24 字數 978 閱讀 6081

i2c的時序圖,如下所示:

匯流排應當時序圖:

i2c時序要求:

空閒狀態

scl和sda都是處於高電平。

起始訊號

在scl時鐘線為高電平期間,sda輸出下降沿。

停止訊號

在scl時鐘線為高電平期間,sda輸出上公升沿。

應答訊號

傳送器每傳送乙個位元組,就在時鐘scl第9個脈衝釋放資料線,由接收器反饋乙個應答訊號,有效電平為低電平,有效應答(ack應答);為高電平時,無效應答(nack應答)

模擬i2c匯流排的**,如下:

1.初始化匯流排——空閒狀態。

void init(void)

2.起始訊號

void start(void)

3.停止訊號

void stop(void)

4.等待應答訊號

void ack(void)

5.寫乙個位元組資料

void write_one_byte(uint8 value)

scl = 0;

delay();

sda = 1;/ 釋放sda匯流排,由從裝置應答 /

delay();

}6.讀乙個位元組資料

uint8 read_one_byte(void)

return value;

}7.向任意位址寫乙個位元組資料

void write_addr_one_byte(uint8 addr, uint8 value)

8.向任意位址讀乙個位元組資料

uint8 read_addr_one_byte(uint8 addr)

以上便是i2c時序的**實現。

i2c匯流排時序

一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...

I2C匯流排死鎖

原文 現象 最近發現訪問i2c裝置時,主裝置復位可能會引起i2c死鎖,表現為scl為高,sda一直為低,後發現是從裝置拉死i2c匯流排,從裝置斷電之後,sda變高,上電後通訊正常。後來通過拉低scl訊號線,sda就會自動變成高電平,i2c匯流排恢復。原因 在正常情況下,i2c匯流排協議能夠保證匯流排...

I 2C匯流排簡介

總共有五種工作狀態 a 匯流排非忙狀態 該狀態時資料線 sda 和時鐘線 scl 都保持高電平。b 啟動狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由高電平變為低電平的下降沿被認為是 啟動 訊號。c 停止狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由低電平變為高電平的下降沿被...