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