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