I2C總線是一種同步、雙向、半雙工的兩線式串行接口總線。這里,半雙工的含義是指在任意給定的時刻,只有一個方向上是可以通信的。
I2C總線最早由Philips半導體公司于20世紀80年代研發面市。I2C最初的設計目標是為微處理器/微控制器系統與電視機外圍芯片之間的連接提供簡單的方法。 I2C總線由兩條總線組成:串行時鐘線SCL和串行數據線SDA。 SCL線——負責產生同步時鐘脈沖。 SDA線——負責在設備間傳輸串行數據。 I2C總線是共享的總線系統,因此可以將多個I2C設備連接到該系統上。連接到I2C總線上的設備既可以用作主設備,也可以用作從設備。 主設備負責控制通信,通過對數據傳輸進行初始化/終止化,來發送數據并產生所需的同步時鐘脈沖。 從設備則是等待來自主設備的命令,并響應命令接收。主設備和從設備都可以作為發送設備或接收設備。無論主設備是作為發送設備還是接收設備,同步時鐘信號都只能由主設備產生。 在相同的總線上,I2C支持多個主設備的同時存在。圖1-1顯示了I2C總線上主設備和從設備的連接關系。 當總線空閑時,SDA 和SCL 都處于高電平狀態,當主機要和某個從機通訊時,會先發送一個開始條件,然后發送從機地址和讀寫控制位,接下來傳輸數據(主機發送或者接收數據),數據傳輸結束時主機會發送停止條件。傳輸的每個字節為8 位,高位在前,低位在后。
開始條件:SCL 為高電平時,主機將SDA 拉低,表示數據傳輸即將開始。
從機地址:主機發送的第一個字節為從機地址,高7 位為地址,最低位為R/W 讀寫控制位,1 表示讀操作,0 表示寫操作。
一般從機地址有7 位地址模式和10 位地址模式兩種,如果是10 位地址模式,第一個字節的頭7 位是11110XX 的組合,其中最后兩位(XX)是10 位地址的兩個最高位,第二個字節為10 位從機地址的剩下8 位,如下圖所示:
應答信號:每傳輸完成一個字節的數據,接收方就需要回復一個ACK(acknowledge)。寫數據時由從機發送ACK,讀數據時由主機發送ACK。當主機讀到最后一個字節數據時,可發送NACK(Notacknowledge)然后跟停止條件。
數據:從機地址發送完后可能會發送一些指令,依從機而定,然后開始傳輸數據,由主機或者從機發送,每個數據為8 位,數據的字節數沒有限制。
重復開始條件:在一次通信過程中,主機可能需要和不同的從機傳輸數據或者需要切換讀寫操作時,主機可以再發送一個開始條件。
停止條件:在SDA 為低電平時,主機將SCL 拉高并保持高電平,然后在將SDA 拉高,表示傳輸結束。
-
數據
+關注
關注
8文章
7139瀏覽量
89575 -
主機
+關注
關注
0文章
1010瀏覽量
35308 -
I2C總線
+關注
關注
8文章
406瀏覽量
61164
原文標題:I2C總線
文章出處:【微信號:ARM與嵌入式,微信公眾號:ARM與嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
飛凌嵌入式ElfBoard ELF 1板卡-i2c與從設備通訊編程示例之i2c硬件原理
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-i2c與從設備通訊編程示例之i2c硬件原理
arduino讀取I2C總線上連接設備的地址
嵌入式內核及驅動開發-09IIC子系統框架使用(I2C協議和時序,I2C驅動框架,I2C從設備驅動開發,MPU6050硬件連接
![嵌入式內核及驅動開發-09IIC子系統框架使用(<b class='flag-5'>I2C</b>協議和時序,<b class='flag-5'>I2C</b>驅動框架,<b class='flag-5'>I2C</b><b class='flag-5'>從</b><b class='flag-5'>設備</b>驅動開發,MPU6050硬件<b class='flag-5'>連接</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
傳感器i2c與arduino連接_Nodemcu I2C接口連接Arduino
![傳感器<b class='flag-5'>i2c</b>與arduino<b class='flag-5'>連接</b>_Nodemcu <b class='flag-5'>I2C</b>接口<b class='flag-5'>連接</b>Arduino](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論