普通IO模擬i2c匯流排

2021-08-08 11:18:07 字數 1540 閱讀 2349

一 .   i2c匯流排協議

二.   普通io模擬i2c匯流排

三.   簡單i2c裝置驅動例項

下面簡單的微控制器程式,理解之後會讓你對i2c匯流排有更深的認識,

思路

1.向eeprom中通過i2c匯流排寫入乙個位元組

2.通過i2c匯流排讀出寫入的位元組

3.如果寫入和讀出成功點亮發光二極體

執行結果:d1亮,

程式:

1 #include 2 

3 #define uchar unsigned char

4 #define uint unsigned int

5 6 void init();

7 void start();

8 void stop();

9 void write(uchar byte);

10 void write_add(uchar byte,uchar address);//向指定位址中寫入位元組

11 void delay1(uchar x);

12 uchar read_add(uchar address);

13 uchar read();//從指定位址中讀出位元組

14 15 void delay()

16 17

18 sbit led = p0^0;

19 sbit sck = p2^0;

20 sbit sad = p2^1;

21 22 void main()

23 34

35 void init()

36 43 //起始訊號

44 void start()

45 53 //停止訊號

54 void stop()

55 63 //等待回應

64 void response()

65 74 //向指定位址寫入乙個位元組

75 void write(uchar byte)

76

90 sck = 0;

91 delay();//這樣就不會產生開始訊號或結束訊號

92 sad = 1;

93 delay();

94 }

95 //從指定位址讀取乙個字元

96 uchar read()

97

111 return k;

112 }

113 //寫入乙個位元組

114 void write_add(uchar byte,uchar address)

115

125 //讀出寫入的位元組

126 uchar read_add(uchar address)

127

141 void delay1(uchar x)

142

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