<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 為什么I2C總線(xiàn)會(huì )難住這么多人?

為什么I2C總線(xiàn)會(huì )難住這么多人?

作者: 時(shí)間:2025-05-06 來(lái)源:硬件筆記本 收藏

中很常見(jiàn),但最近在一個(gè)群(可能是初學(xué)者群)交流的信息,讓我比較吃驚,很多人連基本的知識都不清楚。今天就來(lái)給大家講講的時(shí)序。

本文引用地址:http://dyxdggzs.com/article/202505/470076.htm


很多電子工程師都應該從 EEPROM 通信了解到的I2C總線(xiàn),其實(shí),I2C總線(xiàn)遠不止于 EEPROM 存儲器,它也有類(lèi)似485、SPI等應用場(chǎng)景。


EEPROM存儲器系統架構圖


位傳輸

I2C總線(xiàn)是由飛利浦(Philips)公司開(kāi)發(fā)的一種雙向二線(xiàn)制同步串行總線(xiàn),實(shí)現有效的IC間的控制,它只需要兩根線(xiàn)(SDA和SCL)即可在連接于總線(xiàn)上的器件之間傳送信息。


I2C總線(xiàn)在傳輸數據都是按照bit來(lái)傳送。SCL為時(shí)鐘線(xiàn),SDA為數據線(xiàn);在SCL時(shí)鐘線(xiàn)為高電平時(shí),SDA數據線(xiàn)上的電平不允許被修改,SCL時(shí)鐘線(xiàn)為低電平時(shí),SDA數據線(xiàn)上的電平可為高/低。


I2C總線(xiàn)的位傳輸


起始條件:SCL為高電平時(shí),SDA由高電平向低電平切換;表示開(kāi)始傳送數據。


停止條件:SCL為高電平時(shí),SDA由低電平向高電平跳變;表示結束傳送數據。


空閑條件:I2C總線(xiàn)的SDA和SCL兩條信號線(xiàn)同時(shí)處于高電平時(shí);表示空閑狀態(tài)。


起始和停止條件

數據傳輸


字節傳輸

發(fā)送數據時(shí),由主機先發(fā)送一個(gè)起始信號,再將SDA信號切換為輸出模式,然后將8位數據依次由高到低發(fā)送出去;


發(fā)送完成后,主機將SDA信號切換為輸入模式,等待叢機回應ACK或NAK;再發(fā)下一筆數據


I2C總線(xiàn)數據傳輸


叢機地址

在I2C總線(xiàn)系統中,每個(gè)設備都有它的固定地址,一般由芯片的A0,A1和A2決定。叢機地址字節由七位地址位(D7-D1位)和一位方向位(為D0位)組成。


器件地址的D7-D4一般都是被廠(chǎng)家固定了為1111,余下的D3,D2和D1連接到芯片的A2,A1和A0決定;D0為0x00表示寫(xiě),D0為0x01表示讀。大家看例程都是些0xA0和0xA1就是這個(gè)原因。


EEPROM的器件地址


讀寫(xiě)過(guò)程

1.寫(xiě)數據過(guò)程

1.主機發(fā)送I2C總線(xiàn)停止信號,防止總線(xiàn)忙寫(xiě)數據失敗

2.主機發(fā)送I2C總線(xiàn)復位信號,確保寫(xiě)數據之前總線(xiàn)處于空閑狀態(tài)

3.主機發(fā)送I2C總線(xiàn)開(kāi)始信號,啟動(dòng)一次數據的寫(xiě)入

4.主機發(fā)送I2C叢機地址和寫(xiě)模式(W/R=0)信號,并且等待一個(gè)叢機的應答信號

5.主機接收到ACK的應答信號后,開(kāi)始多個(gè)字節的寫(xiě)入,每寫(xiě)完一個(gè)字節需要等待一個(gè)叢機的應答信號

6.主機接收到ACK的應答信號后,發(fā)送2IC總線(xiàn)停止信號,確??偩€(xiàn)處于空閑狀態(tài)


2.讀數據過(guò)程

1.主機發(fā)送I2C總線(xiàn)停止信號,防止總線(xiàn)忙寫(xiě)數據失敗

2.主機發(fā)送I2C總線(xiàn)復位信號,確保讀數據之前總線(xiàn)處于空閑狀態(tài)

3.主機發(fā)送I2C總線(xiàn)開(kāi)始信號,啟動(dòng)一次數據讀取

4.主機發(fā)送I2C叢機地址和讀模式(W/R=1)信號,并且等待一個(gè)叢機的應答信號

5.主機接收到ACK的應答信號后,開(kāi)始多個(gè)字節的讀取,每讀完一個(gè)字節需要給叢機發(fā)送一個(gè)ACK應答信號

6.主機接收到ACK的應答信號后,發(fā)送I2C總線(xiàn)停止信號,確??偩€(xiàn)處于空閑狀態(tài)


主機讀/寫(xiě)數據過(guò)程


結語(yǔ)

I2C總線(xiàn)在嵌入式應用中非常廣泛,基本上所有的電力電子設備都會(huì )用到這個(gè)總線(xiàn);


筆者根據自身多年的工作經(jīng)驗,記錄下了我對它的理解,如果有寫(xiě)的不對,希望大家能多多指出,今天的I2C總線(xiàn)就先寫(xiě)到這里,希望對大家有幫助。




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>