I2C通信協議的基礎(轉)

原文網址
http://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

I2C通信協議的基礎

Posted by Circuit Basics | DIY Electronics | 39 

Basics of the I2C Communication Protocol

到目前為止,我們已經討論了SPI通信和UART通信的基礎知識,現在讓我們進入本系列的最終協議,即內部集成電路或I2C。

如果您構建使用OLED顯示器,氣壓傳感器或陀螺儀/加速度計模塊的項目,您可能會發現自己使用I2C。

INTRODUCTION TO I2C COMMUNICATION
I2C通信簡介

I2C結合了SPI和UART的最佳功能。使用I2C,您可以將多個從器件連接到單個主器件(如SPI),並且可以讓多個主器件控制單個或多個從器件。當您希望有多個微控制器將數據記錄到單個存儲卡或將文本顯示到單個LCD時,這非常有用。

與UART通信一樣,I2C僅使用兩條線在設備之間傳輸數據:

Introduction to I2C - Single Master Single Slave

SDA (Serial Data) – 主站和從站發送和接收數據的線。

SCL (Serial Clock) – 帶有時鐘信號的線路。

I2C是一種串行通信協議,因此數據沿著單線(SDA線)逐位傳輸。

與SPI一樣,I2C是同步的,因此位的輸出通過主機和從機之間共享的時鐘信號與位採樣同步。時鐘信號始終由主機控制。

Basics of the I2C Communication Protocol - Specifications Table

HOW I2C WORKS
I2C如何工作

使用I2C,數據在消息中傳輸。消息被分解為數據幀。每條消息都有一個地址幀,其中包含從站的二進制地址,以及一個或多個包含正在傳輸的數據的數據幀。該消息還包括每個數據幀之間的啟動和停止條件,讀/寫位和ACK / NACK位:

Introduction to I2C - Message, Frame, and Bit

Start Condition: 在SCL線路從高電平切換到低電平之前,SDA線路從高電壓電平切換到低電壓電平。

Stop Condition:  SCL線路從低電平切換到高電平後,SDA線路從低電壓電平切換到高電壓電平。

Address Frame:  每個從站唯一的7或10位序列,在主站想與之通信時識別從站。

Read/Write Bit:  一個位指定主機是否正在向從機發送數據(低電壓電平)或從其請求數據(高電壓電平)。

ACK/NACK Bit:  消息中的每個幀後跟一個確認/不應答位。如果成功接收到地址幀或數據幀,則從接收設備向發送方返回ACK位。

ADDRESSING 尋址

I2C沒有像SPI這樣的從選擇線,因此它需要另一種方法讓從器件知道數據正在發送給它,而不是另一個從器件。它通過解決來做到這一點。地址幀始終是新消息中起始位之後的第一幀。

主設備將與其通信的從設備的地址發送給與其連接的每個從設備。然後,每個從設備將從主設備發送的地址與其自己的地址進行比較。如果地址匹配,則將低電壓ACK位發送回主機。如果地址不匹配,則從器件不執行任何操作,SDA線保持高電平。

READ/WRITE BIT

地址幀在末尾包括一個位,用於通知從機主機是想要向其寫入數據還是從主機接收數據。如果主設備想要向從設備發送數據,則讀/寫位是低電壓電平。如果主設備從從設備請求數據,則該位是高電壓電平。

THE DATA FRAME

在主設備檢測到來自從設備的ACK位之後,準備好發送第一個數據幀。

數據幀始終為8位長,並以最高有效位先發送。緊接著每個數據幀的ACK / NACK位以驗證幀已被成功接收。在發送下一個數據幀之前,主機或從機必須接收ACK位(取決於發送數據的人)。

在發送了所有數據幀之後,主設備可以向從設備發送停止條件以停止傳輸。停止條件是SCL線上從低電平到高電平轉換後SDA線上從低電平變為高電平,SCL線保持高電平。

STEPS OF I2C DATA TRANSMISSION

1. 在將SCL線從高電平切換為低電平之前,主機通過將SDA線從高電平切換到低電壓電平,將啟動條件發送到每個連接的從機:

Introduction to I2C - Data Transmission Diagram START CONDITION

2.  主設備向每個從設備發送它想要與之通信的從設備的7或10位地址,以及讀/寫位:

Introduction to I2C - Data Transmission Diagram ADDRESS FRAME

3. 每個從站將從主站發送的地址與其自己的地址進行比較。如果地址匹配,則從器件通過將SDA線拉低一位來返回ACK位。如果主設備的地址與從設備的地址不匹配,則從設備將SDA線保持為高電平。

Introduction to I2C - Data Transmission Diagram ACK Bit Slave to Master

4. 主設備發送或接收數據幀:

Introduction to I2C - Data Transmission Diagram Data Frame

5. 在傳輸了每個數據幀之後,接收設備將另一個ACK位返回給發送方以確認成功接收到該幀:

Introduction to I2C - Data Transmission Diagram ACK Bit Slave to Master

6. 要停止數據傳輸,主機通過在將SDA切換為高電平之前將SCL置為高電平來向從機發送停止條件:

Introduction to I2C - Data Transmission Diagram Stop Condition

SINGLE MASTER WITH MULTIPLE SLAVES
一個主控端和多個被控端

由於I2C使用尋址,因此可以從單個主設備控制多個從設備。使用7位地址,可以使用128(27)個唯一地址。使用10位地址並不常見,但提供1,024(210)個唯一地址。要將多個從器件連接到單個主器件,請像這樣連接它們,使用4.7K歐姆上拉電阻將SDA和SCL線連接到Vcc:

Introduction to I2C - Single Master Multiple Slaves

MULTIPLE MASTERS WITH MULTIPLE SLAVES
多個主控和多個被控

多個主設備可以連接到單個從設備或多個從設備。當兩個主設備嘗試通過SDA線同時發送或接收數據時,同一系統中出現多個主設備的問題。為了解決這個問題,每個主設備需要在發送消息之前檢測SDA線路是低還是高。如果SDA線為低電平,則表示另一個主控制器已控制總線,主控制器應等待發送消息。如果SDA線路很高,那麼傳輸信息是安全的。要將多個主設備連接到多個從設備,請使用下圖,使用4.7K歐姆上拉電阻將SDA和SCL線路連接到Vcc:

Introduction to I2C - Multiple Masters Multiple Slaves 2

ADVANTAGES AND DISADVANTAGES OF I2C
I2C的優點和缺點

與其他協議相比,I2C有很多可能使它聽起來很複雜,但是有一些很好的理由可以解決為什麼你可能想要使用I2C連接到特定設備:

ADVANTAGES

  • 只使用兩根電線
  • 支持多個主服務器和多個從服務器
  • ACK / NACK位確認每個幀都已成功傳輸
  • 硬件沒有UART那麼複雜
  • 眾所周知且廣泛使用的協議

DISADVANTAGES

  • 數據傳輸速率比SPI慢
  • 數據幀的大小限制為8位
  • 實現比SPI更複雜的硬件

謝謝閱讀!希望您從這一系列關於電子通信協議的文章中學到一些東西。如果您還沒有閱讀過,第一部分介紹了SPI通信協議,第二部分介紹了UART驅動的通信。

發佈留言