日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【总线】一文看懂 I2C 通信协议

發(fā)布時(shí)間:2023/12/10 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【总线】一文看懂 I2C 通信协议 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

?

I2C 總線(xiàn)協(xié)議概述

參數(shù)總結(jié)

I2C 的工作原理

尋址

讀/寫(xiě)位

數(shù)據(jù)幀

I2C數(shù)據(jù)傳輸?shù)牟襟E

具有多個(gè)從機(jī)的單個(gè)主機(jī)

具有多個(gè)從機(jī)的多個(gè)主機(jī)

I2C的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)


?

I2C 總線(xiàn)協(xié)議概述

I2C 總線(xiàn)廣泛應(yīng)用在 OLED 顯示器、氣壓傳感器或陀螺儀/加速度計(jì)模塊的項(xiàng)目。

I2C結(jié)合了SPI和UART的最佳功能。使用I2C,可以將多個(gè)從機(jī)連接到單個(gè)主機(jī)(如SPI),并且可以讓多個(gè)主機(jī)控制單個(gè)或多個(gè)從機(jī)。當(dāng)希望有多個(gè)微控制器將數(shù)據(jù)記錄到單個(gè)存儲(chǔ)卡或?qū)⑽谋撅@示到單個(gè)LCD時(shí),這非常有用。

與UART通信一樣,I2C僅使用兩根線(xiàn)在設(shè)備之間傳輸數(shù)據(jù):

SDA(串行數(shù)據(jù)):主機(jī)和從機(jī)發(fā)送和接收數(shù)據(jù)的線(xiàn)路。

SCL(串行時(shí)鐘):傳輸時(shí)鐘信號(hào)的線(xiàn)路。

I2C是一種串行通信協(xié)議,因此數(shù)據(jù)沿著單線(xiàn)(SDA線(xiàn))逐位傳輸。

與SPI一樣,I2C是同步的,因此位的輸出通過(guò)主機(jī)和從機(jī)之間共享的時(shí)鐘信號(hào)與位采樣同步。時(shí)鐘信號(hào)始終由主站控制。

參數(shù)總結(jié)

所需的線(xiàn)數(shù)

2

最大的速率

標(biāo)準(zhǔn)模式:100kbps

快速模式:400kbps

高速模式:3.4Mbps

極速模式:5Mbps

同步或異步

同步

串行或并行

串行

主機(jī)的最大個(gè)數(shù)

沒(méi)有限制

從機(jī)的最大個(gè)數(shù)

1008

I2C 的工作原理

使用I2C,數(shù)據(jù)在消息中傳輸。?消息被分解為數(shù)據(jù)幀。每條消息都有一個(gè)地址幀,其中包含從機(jī)的二進(jìn)制地址,以及一個(gè)或多個(gè)包含正在傳輸?shù)臄?shù)據(jù)的數(shù)據(jù)幀。該消息還包括每個(gè)數(shù)據(jù)幀之間的開(kāi)始和停止條件、讀/寫(xiě)位和 ACK/NACK 位:

?

啟動(dòng)條件:SCL線(xiàn)路從高電平切換到低電平之前,SDA線(xiàn)路從高電平切換到低電平。

停止條件:SCL線(xiàn)路從低電平切換到高電平后,SDA線(xiàn)路從低電平切換到高電平。

地址幀:每個(gè)從機(jī)唯一的 7 位或 10 位序列,當(dāng)主機(jī)想要與其通信時(shí),該序列標(biāo)識(shí)從機(jī)。

讀/寫(xiě)位:?指定主機(jī)是向從機(jī)(低電平)發(fā)送數(shù)據(jù)還是從中請(qǐng)求數(shù)據(jù)(高電平)的單個(gè)位。

ACK/NACK 位:消息中的每個(gè)幀后跟一個(gè)確認(rèn)/不確認(rèn)位。如果成功接收地址幀或數(shù)據(jù)幀,則從接收方向發(fā)送方返回 ACK 位。

尋址

I2C沒(méi)有像SPI那樣的從屬選擇線(xiàn),因此它需要另一種方式讓從機(jī)知道數(shù)據(jù)正在發(fā)送給它,而不是另一個(gè)從機(jī)站。它通過(guò)尋址來(lái)做到這一點(diǎn)。地址幀始終是新消息中起始位之后的第一個(gè)幀。

主機(jī)將它想要與之通信的從機(jī)的地址發(fā)送給連接到它的每個(gè)從機(jī)。然后,每個(gè)從機(jī)將從主機(jī)發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,則將低電平ACK位發(fā)送回主機(jī)。如果地址不匹配,則從機(jī)不執(zhí)行任何操作,并且 SDA 線(xiàn)路保持高電平。

讀/寫(xiě)位

地址幀在末尾包含一個(gè)位,通知從機(jī)是要向其寫(xiě)入數(shù)據(jù)還是從中讀出數(shù)據(jù)。如果主機(jī)要向從機(jī)寫(xiě)數(shù)據(jù),讀/寫(xiě)位為低電平。如果主站從從站讀數(shù)據(jù),則該位為高電平。

數(shù)據(jù)幀

在主機(jī)檢測(cè)到來(lái)自從機(jī)的ACK位后,第一個(gè)數(shù)據(jù)幀就可以發(fā)送了。

數(shù)據(jù)幀的長(zhǎng)度始終為 8 位,并且首先發(fā)送最高有效位。每個(gè)數(shù)據(jù)幀后緊跟一個(gè) ACK/NACK 位,以驗(yàn)證是否已成功接收該幀。在發(fā)送下一個(gè)數(shù)據(jù)幀之前,ACK位必須由主機(jī)或從機(jī)接收(取決于發(fā)送數(shù)據(jù)的人)。

發(fā)送完所有數(shù)據(jù)幀后,主機(jī)可以向從機(jī)發(fā)送停止條件以停止傳輸。停止條件是 SCL 線(xiàn)路上的電平從低到高的電壓轉(zhuǎn)換之后,在 SDA 線(xiàn)路上的電平從低到高的轉(zhuǎn)換,而SCL 線(xiàn)路保持高電平。

I2C數(shù)據(jù)傳輸?shù)牟襟E

1. 主機(jī)將啟動(dòng)條件從高電平切換至低電平,將SDA線(xiàn)路從高電平切換至低電平,將啟動(dòng)條件發(fā)送到每個(gè)連接的從機(jī):

?

?

2. 主機(jī)向每個(gè)從機(jī)發(fā)送它想要與之通信的從機(jī)的7位或10位地址,以及讀/寫(xiě)位:

?

3. 每個(gè)從機(jī)將主機(jī)發(fā)送的地址與自己的地址進(jìn)行比較。如果地址匹配,則從機(jī)通過(guò)將SDA線(xiàn)拉低一位來(lái)返回ACK位。如果來(lái)自主機(jī)的地址與從機(jī)自己的地址不匹配,則從機(jī)將 SDA 線(xiàn)路保持不變維持在高電平。

?

4. 主機(jī)發(fā)送或接收數(shù)據(jù)幀:

?

5. 傳輸完每個(gè)數(shù)據(jù)幀后,接收方向發(fā)送方返回另一個(gè)ACK位,以確認(rèn)成功接收幀:

?

6.為了停止數(shù)據(jù)傳輸,主機(jī)通過(guò)在將SDA切換為高電平之前將SCL切換為高電平向從站發(fā)送停止條件:

具有多個(gè)從機(jī)的單個(gè)主機(jī)

由于I2C使用尋址,因此可以從單個(gè)主機(jī)控制多個(gè)從機(jī)。對(duì)于 7 位地址,可以使用 128 (2^7) 個(gè)唯一地址。使用 10 位地址的情況不常見(jiàn),但提供 1,024 (2^10) 個(gè)唯一地址。要將多個(gè)從站連接到單個(gè)主站,要像圖中這樣連接它們,使用4.7KΩ上拉電阻器將SDA和SCL線(xiàn)路連接到Vcc:

?

具有多個(gè)從機(jī)的多個(gè)主機(jī)

多個(gè)主站可以連接到單個(gè)從機(jī)或多個(gè)從機(jī)。當(dāng)兩個(gè)主機(jī)嘗試通過(guò)SDA線(xiàn)路同時(shí)發(fā)送或接收數(shù)據(jù)時(shí),同一系統(tǒng)中多個(gè)主機(jī)的問(wèn)題就出現(xiàn)了。為了解決這個(gè)問(wèn)題,每個(gè)主機(jī)都需要在傳輸消息之前檢測(cè)SDA線(xiàn)是低還是高。如果 SDA 線(xiàn)路較低,則意味著另一個(gè)主機(jī)控制總線(xiàn),主機(jī)應(yīng)等待發(fā)送消息。如果 SDA 線(xiàn)路較高,則傳輸消息是安全的。要將多個(gè)主機(jī)連接到多個(gè)從機(jī),要像圖中這樣連接它們,使用4.7KΩ上拉電阻器將SDA和SCL線(xiàn)路連接到Vcc:

?

I2C的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 僅使用兩根電線(xiàn)
  • 支持多個(gè)主機(jī)和多個(gè)從機(jī)
  • ACK/NACK 位確認(rèn)每幀都已成功傳輸
  • 硬件比 UART 更簡(jiǎn)單
  • 眾所周知且廣泛使用的協(xié)議

缺點(diǎn)

  • 數(shù)據(jù)傳輸速率比 SPI 慢
  • 數(shù)據(jù)幀的大小限制為8位
  • 需要實(shí)現(xiàn)比SPI更復(fù)雜的硬件

?常見(jiàn)總線(xiàn)匯總

【總線(xiàn)】一文看懂 UART 通信協(xié)議

?

總結(jié)

以上是生活随笔為你收集整理的【总线】一文看懂 I2C 通信协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。