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 由低電平變為高電平的下降沿被...