I2C總線在嵌入式系統(tǒng)中很常見,但最近在一個(gè)群(可能是初學(xué)者群)交流的信息,讓我比較吃驚,很多人連I2C總線基本的知識(shí)都不清楚。今天就來(lái)給大家講講I2C總線的時(shí)序。 很多電子工程師都應(yīng)該從 EEPROM通信了解到的I2C總線,其實(shí),I2C總線遠(yuǎn)不止于EEPROM存儲(chǔ)器,它也有類似485、SPI等應(yīng)用場(chǎng)景。
EEPROM存儲(chǔ)器系統(tǒng)架構(gòu)圖
位傳輸
I2C總線是由飛利浦(Philips)公司開發(fā)的一種雙向二線制同步串行總線,實(shí)現(xiàn)有效的IC間的控制,它只需要兩根線(SDA和SCL)即可在連接于總線上的器件之間傳送信息。 I2C總線在傳輸數(shù)據(jù)都是按照bit來(lái)傳送。SCL為時(shí)鐘線,SDA為數(shù)據(jù)線;在SCL時(shí)鐘線為高電平時(shí),SDA數(shù)據(jù)線上的電平不允許被修改,SCL時(shí)鐘線為低電平時(shí),SDA數(shù)據(jù)線上的電平可為高/低。
I2C總線的位傳輸 起始條件:SCL為高電平時(shí),SDA由高電平向低電平切換;表示開始傳送數(shù)據(jù)。 停止條件:SCL為高電平時(shí),SDA由低電平向高電平跳變;表示結(jié)束傳送數(shù)據(jù)。 空閑條件:I2C總線的SDA和SCL兩條信號(hào)線同時(shí)處于高電平時(shí);表示空閑狀態(tài)。
?起始和停止條件 ?
數(shù)據(jù)傳輸
字節(jié)傳輸
發(fā)送數(shù)據(jù)時(shí),由主機(jī)先發(fā)送一個(gè)起始信號(hào),再將SDA信號(hào)切換為輸出模式,然后將8位數(shù)據(jù)依次由高到低發(fā)送出去; 發(fā)送完成后,主機(jī)將SDA信號(hào)切換為輸入模式,等待叢機(jī)回應(yīng)ACK或NAK;再發(fā)下一筆數(shù)據(jù)
I2C總線數(shù)據(jù)傳輸 叢機(jī)地址在I2C總線系統(tǒng)中,每個(gè)設(shè)備都有它的固定地址,一般由芯片的A0,A1和A2決定。叢機(jī)地址字節(jié)由七位地址位(D7-D1位)和一位方向位(為D0位)組成。 器件地址的D7-D4一般都是被廠家固定了為1111,余下的D3,D2和D1連接到芯片的A2,A1和A0決定;D0為0x00表示寫,D0為0x01表示讀。大家看例程都是些0xA0和0xA1就是這個(gè)原因。
EEPROM的器件地址
讀寫過(guò)程
1.寫數(shù)據(jù)過(guò)程1.主機(jī)發(fā)送I2C總線停止信號(hào),防止總線忙寫數(shù)據(jù)失敗 2.主機(jī)發(fā)送I2C總線復(fù)位信號(hào),確保寫數(shù)據(jù)之前總線處于空閑狀態(tài) 3.主機(jī)發(fā)送I2C總線開始信號(hào),啟動(dòng)一次數(shù)據(jù)的寫入 4.主機(jī)發(fā)送I2C叢機(jī)地址和寫模式(W/R=0)信號(hào),并且等待一個(gè)叢機(jī)的應(yīng)答信號(hào) 5.主機(jī)接收到ACK的應(yīng)答信號(hào)后,開始多個(gè)字節(jié)的寫入,每寫完一個(gè)字節(jié)需要等待一個(gè)叢機(jī)的應(yīng)答信號(hào) 6.主機(jī)接收到ACK的應(yīng)答信號(hào)后,發(fā)送2IC總線停止信號(hào),確??偩€處于空閑狀態(tài) 2.讀數(shù)據(jù)過(guò)程1.主機(jī)發(fā)送I2C總線停止信號(hào),防止總線忙寫數(shù)據(jù)失敗 2.主機(jī)發(fā)送I2C總線復(fù)位信號(hào),確保讀數(shù)據(jù)之前總線處于空閑狀態(tài) 3.主機(jī)發(fā)送I2C總線開始信號(hào),啟動(dòng)一次數(shù)據(jù)讀取 4.主機(jī)發(fā)送I2C叢機(jī)地址和讀模式(W/R=1)信號(hào),并且等待一個(gè)叢機(jī)的應(yīng)答信號(hào) 5.主機(jī)接收到ACK的應(yīng)答信號(hào)后,開始多個(gè)字節(jié)的讀取,每讀完一個(gè)字節(jié)需要給叢機(jī)發(fā)送一個(gè)ACK應(yīng)答信號(hào) 6.主機(jī)接收到ACK的應(yīng)答信號(hào)后,發(fā)送I2C總線停止信號(hào),確??偩€處于空閑狀態(tài)
主機(jī)讀/寫數(shù)據(jù)過(guò)程
結(jié)語(yǔ)
I2C總線在嵌入式應(yīng)用中非常廣泛,基本上所有的電力電子設(shè)備都會(huì)用到這個(gè)總線;
審核編輯 黃宇
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7529瀏覽量
164372 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4358瀏覽量
86195 -
EEPROM
+關(guān)注
關(guān)注
9文章
1033瀏覽量
81983 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
17182 -
I2C總線
+關(guān)注
關(guān)注
0文章
14瀏覽量
2164
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
為什么有這么多編程語(yǔ)言呢
i2c總線ppt(I2C總線器件應(yīng)用)
i2c總線的特點(diǎn)
并口模擬I2C總線的設(shè)計(jì)
基于CPLD的I2C總線接口設(shè)計(jì)
![基于CPLD的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口設(shè)計(jì)](https://file.elecfans.com/web2/M00/48/D4/pYYBAGKhtCeAG-9WAAARMiSSqA4093.jpg)
I2C總線的基本通信總結(jié)
![<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的基本通信總結(jié)](https://file.elecfans.com/web2/M00/12/47/pYYBAGEnMfaACT1zAAAOklqCJ7Y988.jpg)
什么是I2C總線 I2C總線開發(fā)設(shè)計(jì)需要注意點(diǎn)
![什么是<b class='flag-5'>I2C</b><b class='flag-5'>總線</b> <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>開發(fā)設(shè)計(jì)需要注意點(diǎn)](https://file.elecfans.com/web2/M00/1A/B0/poYBAGF_U9CAYC9YAAATjqJzE9Q255.png)
I2C總線的驗(yàn)證及實(shí)現(xiàn)
![<b class='flag-5'>I</b>2<b class='flag-5'>C</b><b class='flag-5'>總線</b>的驗(yàn)證及實(shí)現(xiàn)](https://file1.elecfans.com//web2/M00/89/84/wKgaomSG1FGAJhPQAAAOIrKq3t8191.gif)
評(píng)論