I2C(Inter-Integrated Circuit),有時也稱為IIC或TWI(Two-Wire Interface),是一種用于低速度串行通信的總線協(xié)議,主要用于連接微控制器與其外圍設(shè)備,如傳感器、EEPROM、RTC(實時時鐘)等。I2C 由飛利浦半導(dǎo)體(現(xiàn)今的恩智浦半導(dǎo)體)在1980年代初期開發(fā)。
I2C 通信僅需兩根線:
SDA(Serial Data):數(shù)據(jù)線,用于數(shù)據(jù)的雙向傳輸。
I2C 協(xié)議的特點包括:
主從架構(gòu):
在I2C總線上,任何設(shè)備都可以是主設(shè)備或從設(shè)備。主設(shè)備負責(zé)生成時鐘信號和控制總線,而從設(shè)備接收主設(shè)備的指令。通常,微控制器充當主設(shè)備的角色。
支持多主設(shè)備和多從設(shè)備:
I2C 總線允許多個主設(shè)備和多個從設(shè)備共存,每個設(shè)備都有唯一的地址。在多主模式下,各主設(shè)備需要通過一定的仲裁機制來協(xié)調(diào)對總線的訪問。
地址和數(shù)據(jù)傳輸:
在I2C通信中,數(shù)據(jù)傳輸是通過發(fā)送設(shè)備地址加讀寫位開始的,隨后跟隨的是數(shù)據(jù)傳輸。如果有多個從設(shè)備,主設(shè)備通過地址來指定與之通信的從設(shè)備。
同步:
I2C是一種同步協(xié)議,意味著數(shù)據(jù)的傳輸是由時鐘信號(SCL線)來控制的。
I2C 協(xié)議的優(yōu)點是簡單、成本低且靈活,只需兩根線就能連接多個設(shè)備。不足之處是速度相比SPI和UART較慢,且總線長度有限制,隨著連接的設(shè)備數(shù)量增加,可能會影響通信速度和可靠性。
一、IIC的通信流程
啟動信號:
通信開始時,主設(shè)備發(fā)出啟動信號。這通過將數(shù)據(jù)線(SDA)從高電平拉低,而時鐘線(SCL)保持在高電平來實現(xiàn)。這個動作通知所有從設(shè)備主設(shè)備即將開始通信。
發(fā)送設(shè)備地址及讀寫位:
緊接著啟動信號,主設(shè)備發(fā)送從設(shè)備的地址以及操作位(讀/寫)到數(shù)據(jù)線上。每個從設(shè)備都有一個唯一的地址。讀寫位決定了操作是讀數(shù)據(jù)(通常設(shè)為1)還是寫數(shù)據(jù)(通常設(shè)為0)。
從設(shè)備應(yīng)答:
地址和讀寫位發(fā)送完畢后,被尋址的從設(shè)備需要通過發(fā)送一個應(yīng)答信號(ACK)來響應(yīng)。應(yīng)答信號是在數(shù)據(jù)線(SDA)上產(chǎn)生一個低電平信號,同時時鐘線(SCL)為高電平。
數(shù)據(jù)傳輸:
成功建立連接和從設(shè)備應(yīng)答之后,數(shù)據(jù)可以開始傳輸。數(shù)據(jù)是按字節(jié)傳輸?shù)?,每傳輸完一個字節(jié)后,接收方(無論是主設(shè)備還是從設(shè)備)都需要發(fā)送一個應(yīng)答信號(ACK)。
停止信號:
數(shù)據(jù)傳輸完成后,主設(shè)備發(fā)出一個停止信號來終止通信。這通過將數(shù)據(jù)線(SDA)從低電平拉高,而時鐘線(SCL)保持在高電平來實現(xiàn),標志著一次I2C交流的結(jié)束。
二、發(fā)送1bit數(shù)據(jù)的流程
主設(shè)備首先確保時鐘線SCL處于高電平狀態(tài)。
然后,主設(shè)備會將要發(fā)送的比特數(shù)據(jù)設(shè)置在數(shù)據(jù)線SDA上。如果發(fā)送的是‘1’比特,SDA線會被設(shè)置為高電平;如果發(fā)送的是‘0’比特,SDA線會被設(shè)置為低電平。SDA線上的數(shù)據(jù)必須在SCL線的一個時鐘脈沖開始之前穩(wěn)定。
在數(shù)據(jù)線SDA穩(wěn)定后,主設(shè)備通過將時鐘線SCL從高電平拉低到低電平,來通知從設(shè)備數(shù)據(jù)線上的數(shù)據(jù)可以被讀取。從設(shè)備在SCL線為高電平的時候讀取SDA線上的數(shù)據(jù)。
完成這個數(shù)據(jù)位的傳輸后,主設(shè)備通常會將時鐘線SCL恢復(fù)到高電平,準備發(fā)送下一個比特或產(chǎn)生一個停止條件以結(jié)束通信。
重要的是,在SCL線為高電平期間,數(shù)據(jù)線SDA上的數(shù)據(jù)必須保持穩(wěn)定,因為任何在SCL高電平時的SDA變化都可能被視為控制信號(例如啟動或停止條件)。
三、IIC需要外接上拉電阻
I2C總線的設(shè)計是開漏(open-drain)或開集(open-collector)輸出,這意味著連接到總線的設(shè)備能夠?qū)⒖偩€拉低到地(GND),但是不能將總線推高至電源電壓(Vcc)。
上拉電阻的作用主要包括以下幾點:
提供拉高電平:
設(shè)備將總線釋放時,上拉電阻將SDA和SCL線拉高到正邏輯電平(通常是Vcc),確保線路在非驅(qū)動狀態(tài)時為高電平。
限制電流:
當總線設(shè)備將SDA或SCL線拉低時,上拉電阻起到限流的作用,防止電流過大導(dǎo)致設(shè)備損壞。
防止總線沖突:
多個設(shè)備可能會同時嘗試控制總線。由于開漏設(shè)計,任何設(shè)備都可以安全地將總線拉低而不會對其他設(shè)備造成傷害。上拉電阻確保了在這種情況下不會出現(xiàn)短路。
增強信號完整性:
上拉電阻也有助于維護信號的完整性,減少因為長線路或者其他電氣特性引起的信號退化。
選擇合適的上拉電阻值是很重要的。電阻值太大,電流太小,導(dǎo)致總線拉高速度變慢,影響通信速率;電阻值太小,可能導(dǎo)致電流過大,浪費功率,且拉低總線時可能會對設(shè)備造成損害。通常,上拉電阻的選擇取決于總線容量(總線上設(shè)備的數(shù)量和總線長度)和系統(tǒng)工作的電源電壓。常見的電阻值范圍從1.8kΩ到10kΩ不等。
-
控制器
+關(guān)注
關(guān)注
114文章
17100瀏覽量
184224 -
I2C
+關(guān)注
關(guān)注
28文章
1541瀏覽量
127802 -
IIC協(xié)議
+關(guān)注
關(guān)注
0文章
31瀏覽量
4096
發(fā)布評論請先 登錄
FPGA實現(xiàn)IIC協(xié)議的設(shè)計

STM32的IIC協(xié)議
什么是IIC和SPI總線協(xié)議?
STM32的IIC協(xié)議簡介
IIC協(xié)議軟件模擬方法
IIC協(xié)議的相關(guān)資料下載
如何使用代碼實現(xiàn)的IIC協(xié)議
IIC和SPI總線協(xié)議的區(qū)別

支付寶宣布電子結(jié)婚證,出門辦事忘帶證件也不怕了
IIC協(xié)議超詳細解釋(適合小白入門)

振弦采集模塊的通訊協(xié)議( IIC)

什么是IIC協(xié)議

評論