在生活中,經(jīng)常會(huì)碰到設(shè)備掉電的情況,像手機(jī),智能手環(huán),電腦等等;但是存儲(chǔ)的東西不會(huì)丟失,比如電話號(hào)碼,短信消息,記事本,微信,QQ信息等等均會(huì)被保存下來(lái);恢復(fù)出廠設(shè)置后,這些東西才會(huì)消失;
這是因?yàn)檫@些設(shè)備中都有一個(gè)“掉電保存”的器件,比如硬盤(pán),U盤(pán)等等,他們的特點(diǎn)就是沒(méi)電了之后,存在他們上面的信息不會(huì)丟失,就像人的大腦,有記憶功能。 在工業(yè)領(lǐng)域也非常常見(jiàn)這種器件,一般有EEPROM和FLASH。它倆共同點(diǎn)是可讀可寫(xiě),斷電保存; 不同點(diǎn)是EEPROM寫(xiě)之前不用擦除,而FLASH寫(xiě)之前一定要擦除,否則寫(xiě)不成功;EEPROM一般都使用I2C總線來(lái)通信,而FLASH一般是使用SPI總線。
EEPROM存儲(chǔ)器系統(tǒng)架構(gòu)圖 今天就和大家聊一聊I2C總線:
位傳輸
I2C總線是由飛利浦(Philips)公司開(kāi)發(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由高電平向低電平切換;表示開(kāi)始傳送數(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表示寫(xiě),D0為0x01表示讀。大家看例程都是些0xA0和0xA1就是這個(gè)原因。
EEPROM的器件地址
讀寫(xiě)過(guò)程
1.寫(xiě)數(shù)據(jù)過(guò)程1.主機(jī)發(fā)送I2C總線停止信號(hào),防止總線忙寫(xiě)數(shù)據(jù)失敗 2.主機(jī)發(fā)送I2C總線復(fù)位信號(hào),確保寫(xiě)數(shù)據(jù)之前總線處于空閑狀態(tài) 3.主機(jī)發(fā)送I2C總線開(kāi)始信號(hào),啟動(dòng)一次數(shù)據(jù)的寫(xiě)入 4.主機(jī)發(fā)送I2C叢機(jī)地址和寫(xiě)模式(W/R=0)信號(hào),并且等待一個(gè)叢機(jī)的應(yīng)答信號(hào) 5.主機(jī)接收到ACK的應(yīng)答信號(hào)后,開(kāi)始多個(gè)字節(jié)的寫(xiě)入,每寫(xiě)完一個(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),防止總線忙寫(xiě)數(shù)據(jù)失敗 2.主機(jī)發(fā)送I2C總線復(fù)位信號(hào),確保讀數(shù)據(jù)之前總線處于空閑狀態(tài) 3.主機(jī)發(fā)送I2C總線開(kāi)始信號(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)后,開(kāi)始多個(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ī)讀/寫(xiě)數(shù)據(jù)過(guò)程
結(jié)語(yǔ)
I2C總線在嵌入式應(yīng)用中非常廣泛,基本上所有的電力電子設(shè)備都會(huì)用到這個(gè)總線;
文章出處:【微信公眾號(hào):strongerHuang】
責(zé)任編輯:gt
-
電腦
+關(guān)注
關(guān)注
16文章
1769瀏覽量
69932 -
總線
+關(guān)注
關(guān)注
10文章
2952瀏覽量
89380 -
智能手環(huán)
+關(guān)注
關(guān)注
47文章
798瀏覽量
73604
原文標(biāo)題:詳述I2C總線協(xié)議、時(shí)序,入門不再是難事
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動(dòng)之Linux下的I2C驅(qū)動(dòng)簡(jiǎn)介
飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動(dòng)之Linux下的I2C驅(qū)動(dòng)簡(jiǎn)介
是德DSOX4034A示波器I2C總線信號(hào)分析

iic協(xié)議在嵌入式系統(tǒng)中的功能
I2C總線的優(yōu)缺點(diǎn)分析
I2C總線的工作模式介紹
I2C總線在嵌入式系統(tǒng)中的應(yīng)用
I2C總線協(xié)議詳細(xì)解析
I2C總線故障排除技巧
I2C總線與單片機(jī)的連接
I2C總線應(yīng)用實(shí)例分析
I2C總線與SPI總線的比較
物聯(lián)網(wǎng)嵌入式軟件中的I2C總線設(shè)計(jì)詳解

評(píng)論