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