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