91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C 為什么只要兩根線就能搞定通信?

信盈達(dá) ? 2026-01-04 09:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

到目前為止,我們已經(jīng)討論了 SPI 通信UART 通信的基礎(chǔ)知識,現(xiàn)在讓我們討論本系列的最后一個協(xié)議,即集成電路間協(xié)議(I2C)。

如果您曾經(jīng)構(gòu)建過使用 OLED 顯示器 、 氣壓傳感器陀螺儀/加速度計(jì)模塊的項(xiàng)目,您可能會發(fā)現(xiàn)自己正在使用 I2C。


I2C 通信簡介

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


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

c149eb64-e90a-11f0-8ce9-92fbcf53809c.jpg

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

SCL(串行時鐘) ——傳輸時鐘信號的線路。

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

與 SPI 類似,I2C 也是同步的,因此位的輸出與位的采樣通過主機(jī)和從機(jī)共享的時鐘信號同步。該時鐘信號始終由主機(jī)控制。

c161df58-e90a-11f0-8ce9-92fbcf53809c.jpg

I2C 的工作原理

使用 I2C 時,數(shù)據(jù)以消息形式傳輸。 消息被分解成數(shù)據(jù)幀 。每條消息包含一個地址幀(包含從設(shè)備的二進(jìn)制地址)以及一個或多個數(shù)據(jù)幀(包含正在傳輸?shù)臄?shù)據(jù))。消息還包含起始和停止條件、讀/寫位以及每個數(shù)據(jù)幀之間的 ACK/NACK 位:

c169641c-e90a-11f0-8ce9-92fbcf53809c.jpg

起始條件: 在 SCL 線從高電平切換為低電平之前, SDA 線從高電平切換為低電平。

停止條件: SCL 線從低電平變?yōu)楦唠娖胶螅?SDA 線也從低電平變?yōu)楦唠娖健?/strong>

地址幀: 每個從機(jī)獨(dú)有的 7 位或 10 位序列,用于在主機(jī)想要與從機(jī)對話時識別該從機(jī)。

讀/寫位: 單個位指定主機(jī)是否向從機(jī)發(fā)送數(shù)據(jù)(低電壓電平)或向從機(jī)請求數(shù)據(jù)(高電壓電平)。

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


尋址

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

主設(shè)備將其想要通信的從設(shè)備的地址發(fā)送給與其連接的每個從設(shè)備。然后,每個從設(shè)備將主設(shè)備發(fā)送的地址與其自身的地址進(jìn)行比較。如果地址匹配,則向主設(shè)備發(fā)送一個低電壓 ACK 位。如果地址不匹配,則從設(shè)備不執(zhí)行任何操作,SDA 線保持高電平。


讀/寫位

地址幀末尾包含一個位,用于告知從機(jī)主設(shè)備是要向其寫入數(shù)據(jù)還是從其接收數(shù)據(jù)。如果主設(shè)備要向從機(jī)發(fā)送數(shù)據(jù),則讀/寫位為低電平。如果主設(shè)備正在向從機(jī)請求數(shù)據(jù),則該位為高電平。


數(shù)據(jù)框

主機(jī)檢測到從機(jī)的 ACK 位后,即可準(zhǔn)備發(fā)送第一個數(shù)據(jù)幀。

數(shù)據(jù)幀始終為 8 位長,并以最高有效位優(yōu)先發(fā)送。每個數(shù)據(jù)幀后緊接著一個 ACK/NACK 位,用于驗(yàn)證該幀是否已成功接收。主設(shè)備或從設(shè)備(取決于發(fā)送數(shù)據(jù)的設(shè)備)必須接收到 ACK 位,才能發(fā)送下一個數(shù)據(jù)幀。

所有數(shù)據(jù)幀發(fā)送完畢后,主機(jī)可以向從機(jī)發(fā)送停止條件,以停止傳輸。停止條件是指 SCL 線電壓由低變高后,SDA 線電壓由低變高,而 SCL 線電壓保持高電平。


I2C 數(shù)據(jù)傳輸步驟

1、主機(jī)通過將 SDA 線從高電平切換到低電平, 然后將 SCL 線從高電平切換到低電平,向每個連接的從機(jī)發(fā)送啟動條件:c17cfe78-e90a-11f0-8ce9-92fbcf53809c.jpg
2、主設(shè)備向每個從設(shè)備發(fā)送其想要與之通信的從設(shè)備的 7 位或 10 位地址,以及讀/寫位:c195f8d8-e90a-11f0-8ce9-92fbcf53809c.jpg


3、每個從機(jī)將主機(jī)發(fā)送的地址與自身地址進(jìn)行比較。如果地址匹配,從機(jī)將 SDA 線拉低一位,返回 ACK 位。如果主機(jī)發(fā)送的地址與從機(jī)自身的地址不匹配,從機(jī)將 SDA 線保持高電平。c1b28534-e90a-11f0-8ce9-92fbcf53809c.jpg

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

c1c1ee52-e90a-11f0-8ce9-92fbcf53809c.jpg


5、每個數(shù)據(jù)幀傳輸完成后,接收設(shè)備都會向發(fā)送方返回另一個 ACK 位,以確認(rèn)成功接收該幀:c1dd2ae6-e90a-11f0-8ce9-92fbcf53809c.jpg


6、要停止數(shù)據(jù)傳輸,主機(jī)在切換 SDA 為高之前,通過將 SCL 切換為高來向從機(jī)發(fā)送停止條件:c1e6cb8c-e90a-11f0-8ce9-92fbcf53809c.jpg


單主多從

由于 I2C 使用尋址技術(shù),因此一個主設(shè)備可以控制多個從設(shè)備。使用 7 位地址,可以提供 128(2 ^7 )個唯一地址。使用 10 位地址并不常見,但可以提供 1,024(2 ^10 )個唯一地址。要將多個從設(shè)備連接到一個主設(shè)備,請按如下方式連接它們,并使用 4.7K 歐姆上拉電阻將 SDA 和 SCL 線連接到 Vcc:

c1ffc07e-e90a-11f0-8ce9-92fbcf53809c.jpg

多主多從

多個主設(shè)備可以連接到一個或多個從設(shè)備。同一系統(tǒng)中多個主設(shè)備的問題在于,當(dāng)兩個主設(shè)備嘗試同時通過 SDA 線發(fā)送或接收數(shù)據(jù)時。為了解決這個問題,每個主設(shè)備在發(fā)送消息之前都需要檢測 SDA 線是低電平還是高電平。如果 SDA 線為低電平,則表示另一個主設(shè)備已控制總線,該主設(shè)備應(yīng)等待發(fā)送消息。如果 SDA 線為高電平,則表示可以安全發(fā)送消息。要將多個主設(shè)備連接到多個從設(shè)備,請使用下圖,并使用 4.7K 歐姆上拉電阻將 SDA 和 SCL 線連接到 Vcc:

c208460e-e90a-11f0-8ce9-92fbcf53809c.jpg

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

與其他協(xié)議相比,I2C 有很多方面可能聽起來比較復(fù)雜,但有一些很好的理由可以解釋為什么您可能想或不想使用 I2C 來連接特定設(shè)備:

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

僅使用兩根電線

支持多主多從

ACK/NACK 位確認(rèn)每個幀已成功傳輸

硬件比 UART 簡單

著名且廣泛使用的協(xié)議


缺點(diǎn)

數(shù)據(jù)傳輸速率比 SPI 慢

數(shù)據(jù)幀的大小限制為8位

實(shí)現(xiàn)所需的硬件比 SPI 更復(fù)雜

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6389

    瀏覽量

    140036
  • 主機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    1053

    瀏覽量

    36740
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1556

    瀏覽量

    131201
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    i2c總線是什么意思 i2c通信咋樣 i2c通信的詳細(xì)講解

    I2C總線是由Philips公司開發(fā)的一種簡單、雙向二制同步串行總線。它只需要兩根即可在連接于總線上的器件之間傳送信息。
    發(fā)表于 07-27 14:23 ?2319次閱讀
    <b class='flag-5'>i2c</b>總線是什么意思 <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>咋樣 <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>的詳細(xì)講解

    【NuMaker-M2354試用】I2C測試分享

    I2C( Inter Integrated Circuit)總線是 PHILIPS 公司開發(fā)的一種半雙工、雙向二制同步串行總線。I2C 總線傳輸數(shù)據(jù)時只需兩根信號
    發(fā)表于 07-27 15:38 ?1045次閱讀
    【NuMaker-M2354試用】<b class='flag-5'>I2C</b>測試分享

    基于MM32F0140的I2C與24C02通信

    I2C(Inter-Integrated Circuit)是一種通用的總線協(xié)議,實(shí)現(xiàn)I2C需要兩根信號完成信息交換
    的頭像 發(fā)表于 09-28 16:52 ?3874次閱讀
    基于MM32F0140的<b class='flag-5'>I2C</b>與24<b class='flag-5'>C</b>02<b class='flag-5'>通信</b>

    I2C的簡介

    的外部收發(fā)設(shè)備,現(xiàn)在被廣泛地使用在系統(tǒng)內(nèi)多個集成電路(IC)間的通訊。I2C是半雙工通信I2C只有兩根雙向通信
    發(fā)表于 08-20 06:58

    I2C總線的原理是什么

    采用串行總線技術(shù)可以大大簡化硬件的設(shè)計(jì),體積減少,可靠性高。常見的總線,I2C(inter IC bus),單總線,SPI總線。I2C串行總線:(1)進(jìn)行多主機(jī)通信2
    發(fā)表于 01-18 07:36

    i2c總線相關(guān)知識

    I2C總線在物理連接上非常簡單,分別由SDA(串行數(shù)據(jù))和SCL(串行時鐘)及上拉電阻組成。通信原理是通過對SCL和SDA高低電平時序
    發(fā)表于 12-06 10:48 ?4382次閱讀
    <b class='flag-5'>i2c</b>總線相關(guān)知識

    淺談I2C總線,I2C接口和SPI接口的作用相同

    SDA 和 SCL 都是雙向的。SPI 總線有兩根單獨(dú)的,分別用于個方向的通信,而 I2C 總線不同,它使用同一
    的頭像 發(fā)表于 03-21 10:24 ?2.6w次閱讀
    淺談<b class='flag-5'>I2C</b>總線,<b class='flag-5'>I2C</b>接口和SPI接口的作用相同

    如何使用示波器解決I2C通信開發(fā)中遇到的問題

    I2C總線僅需采用兩根通信(一為串行數(shù)據(jù)“SDA”,一
    發(fā)表于 09-26 16:16 ?8620次閱讀
    如何使用示波器解決<b class='flag-5'>I2C</b><b class='flag-5'>通信</b>開發(fā)中遇到的問題

    I2C總線控制系統(tǒng)的構(gòu)成_I2C總線控制系統(tǒng)的特點(diǎn)

    I2C總線是由Philips公司開發(fā)的一種簡單、雙向二制同步串行總線。它只需要兩根即可在連接于總線上的器件之間傳送信息。
    發(fā)表于 01-06 14:48 ?2022次閱讀
    <b class='flag-5'>I2C</b>總線控制系統(tǒng)的構(gòu)成_<b class='flag-5'>I2C</b>總線控制系統(tǒng)的特點(diǎn)

    I2C總線物理拓?fù)浣Y(jié)構(gòu)_I2C總線協(xié)議解析

    I2C 總線在物理連接上非常簡單,分別由SDA(串行數(shù)據(jù))和SCL(串行時鐘)及上拉電阻組成。通信原理是通過對SCL和SDA高低電平時
    的頭像 發(fā)表于 09-24 14:12 ?7220次閱讀
    <b class='flag-5'>I2C</b>總線物理拓?fù)浣Y(jié)構(gòu)_<b class='flag-5'>I2C</b>總線協(xié)議解析

    你不能不知的I2C總線

    4.8 I2C總線I2C總線(Inter-Integrated Circuit Bus)是由Philips公司開發(fā)的一種簡單、雙向二制同步串行總線。它只需要兩根
    發(fā)表于 12-05 12:36 ?14次下載
    你不能不知的<b class='flag-5'>I2C</b>總線

    簡述I2C總線協(xié)議

    I2C 總線在物理連接上非常簡單,分別由SDA(串行數(shù)據(jù))和SCL(串行時鐘)及上拉電阻組成。通信原理是通過對SCL和SDA高低電平時
    的頭像 發(fā)表于 02-13 10:14 ?2320次閱讀
    簡述<b class='flag-5'>I2C</b>總線協(xié)議

    I2C模塊的用法干貨分享

    I2C總線是一種雙向二制同步串行總線。它只需要兩根即可在連接于總線上的器件之間傳送信息。
    發(fā)表于 06-06 15:10 ?1598次閱讀
    <b class='flag-5'>I2C</b>模塊的用法干貨分享

    I2C通信時序應(yīng)用案例解析

    I2C總線是一種十分流行并且強(qiáng)大的總線,其多用于一個主機(jī)(或多個)與單個或多個從設(shè)備通訊的場景。圖1表明了多種不同的外設(shè)可以共享這種只需要兩根便可以連接到處理器的總線,相對于其他接口來說,這也是
    發(fā)表于 06-09 10:05 ?1804次閱讀
    <b class='flag-5'>I2C</b>的<b class='flag-5'>通信</b>時序應(yīng)用案例解析

    I2C通訊為什么要用開漏輸出和上拉電阻?

    一、I2C總線簡介I2C(Inter-IntegratedCircuit)總線是一種雙向串行通信總線,由兩根組成:SDA(數(shù)據(jù)
    的頭像 發(fā)表于 05-16 08:10 ?1.1w次閱讀
    <b class='flag-5'>I2C</b>通訊為什么要用開漏輸出和上拉電阻?