I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可傳送信息。它結(jié)合了SPI和UART的優(yōu)點,您可以將多個從機連接到單個主機(如SPI那樣),也可以使用多個主機控制一個或多個從機。當您想讓多個微控制器將數(shù)據(jù)記錄到單個存儲卡或?qū)⑽谋撅@示到單個LCD時,這將非常有用。
*SDA * (Serial Data) – 數(shù)據(jù)線。
***SCL ***(Serial Clock) – 時鐘線。
I2C是串行通信協(xié)議,因此數(shù)據(jù)沿著SDA一點一點地傳輸。與SPI一樣,I2C也需要時鐘同步信號且時鐘始終由主機控制。
I2C的數(shù)據(jù)傳輸是以多個msg的形式進行,每個msg都包含從機的二進制 地址幀 ,以及一個或多個 數(shù)據(jù)幀 ,還包括開始條件和 停止條件 ,讀/寫位和數(shù)據(jù)幀之間的 ACK / NACK位 :
啟動條件 : 當SCL是高電平時,SDA從高電平向低電平切換。
停止條件 : 當SCL是高電平時,SDA由低電平向高電平切換。
地址幀 : 每個從屬設(shè)備唯一的7位或10位序列,用于主從設(shè)備之間的地址識別。
讀/寫位 : 一位,如果主機是向從機發(fā)送數(shù)據(jù)則為低電平,請求數(shù)據(jù)則為高電平。
ACK/NACK : 消息中的每個幀后均帶有一個ACK/NACK位。如果成功接收到地址幀或數(shù)據(jù)幀,接收設(shè)備會返回一個ACK位用于表示確認。
尋址
由于I2C沒有像SPI那樣的片選線,因此它需要使用另一種方式來確認某一個從設(shè)備,而這個方式就是 —— **尋址 **。
主機將要通信的從機地址發(fā)送給每個從機,然后每個從機將其與自己的地址進行比較。如果地址匹配,它將向主機發(fā)送一個低電平ACK位。如果不匹配,則不執(zhí)行任何操作,SDA線保持高電平。
讀/寫位
地址幀的末尾包含一個讀/寫位。如果主機要向從機發(fā)送數(shù)據(jù),則為低電平。如果是主機向從機請求數(shù)據(jù),則為高電平。
數(shù)據(jù)幀
當主機檢測到從機的ACK位后,就可以發(fā)送第一個數(shù)據(jù)幀了。數(shù)據(jù)幀始終為8位,每個數(shù)據(jù)幀后緊跟一個ACK / NACK位,來驗證接收狀態(tài)。當發(fā)送完所有數(shù)據(jù)幀后,主機可以向從機發(fā)送停止條件來終止通信。
傳輸步驟
- 在SCL線為高電平時,主機通過將SDA線從高電平切換到低電平來啟動總線通信。
- 主機向總線發(fā)送要與之通信的從機的7位或10位地址,以及讀/寫位:
- 每個從機將主機發(fā)送的地址與其自己的地址進行比較。如果地址匹配,則從機通過將SDA線拉低一位返回一個ACK位。如果主機的地址與從機的地址不匹配,則從機將SDA線拉高。
- 主機發(fā)送或接收數(shù)據(jù)幀:
- 傳輸完每個數(shù)據(jù)幀后,接收設(shè)備將另一個ACK位返回給發(fā)送方,以確認已成功接收到該幀:
- 隨后主機將SCL切換為高電平,然后再將SDA切換為高電平,從而向從機發(fā)送停止條件。
單個主機VS多個從機
由于I2C使用尋址功能,可以通過一個主機控制多個從機。使用7位地址時,最多可以使用128(2 ^7^ )個唯一地址。使用10位地址并不常見,但可以提供1,024(2 ^10^ )個唯一地址。如果要將多個從機連接到單個主機時,請使用4.7K歐的上拉電阻將它們連接,例如將SDA和SCL線連接到Vcc:
多個主機VS多個從機
I2C支持多個主機同時與多個從機相連,當兩個主機試圖通過SDA線路同時發(fā)送或接收數(shù)據(jù)時,就會出現(xiàn)問題。因此每個主機都需要在發(fā)送消息之前檢測SDA線是低電平還是高電平。如果SDA線為低電平,則意味著另一個主機正在控制總線。如果SDA線高,則可以安全地發(fā)送數(shù)據(jù)。如果要將多個主機連接到多個從機,請使用4.7K歐的上拉電阻將SDA和SCL線連接到Vcc:
優(yōu)劣
與其他協(xié)議相比,I2C可能聽起來很復(fù)雜。以下是一些利弊,可幫助您確定它們是否適合您的項目需求:
優(yōu)點
- 僅使用兩根電線
- 支持多個主機和多個從機
- ACK / NACK位用于確認每個幀都已成功傳輸
- 硬件比UART更簡單
- 眾所周知且被廣泛使用的協(xié)議
缺點
- 數(shù)據(jù)傳輸速率比SPI慢
- 數(shù)據(jù)幀的大小限制為8位
-
lcd
+關(guān)注
關(guān)注
34文章
4514瀏覽量
171210 -
SPI
+關(guān)注
關(guān)注
17文章
1793瀏覽量
95341 -
I2C總線
+關(guān)注
關(guān)注
8文章
408瀏覽量
62050
發(fā)布評論請先 登錄

i2c通信協(xié)議
SPI協(xié)議的特性是什么?具有哪些優(yōu)劣勢?
I2C總線通信協(xié)議的相關(guān)資料下載
I2C通信協(xié)議應(yīng)該如何學(xué)習(xí)

I2C通信協(xié)議:了解I2C Primer、 PMBus和SMBus

評論