吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

I2C協議的基礎知識

FPGA研究院 ? 來源:FPGA技術實戰 ? 2024-10-22 15:51 ? 次閱讀

引言:本文從I2C協議的概述開始,描述協議的歷史、不同速度模式、物理層和數據幀結構,最后介紹I2C混合電壓系統中電平兼容性以及上拉電阻大小計算。

1.概述

1.1 I2C協議歷史

I2C,通常被稱為I'two'C,代表集成電路間協議。I2C由飛利浦半導體公司(現為恩智浦半導體公司)于1982年開發,是一種低速通信協議,用于連接微控制器處理器等控制器設備與數據轉換器和其他外圍設備等目標設備。

I2C是使用串行數據線(SDA)和串行時鐘線(SCL)的雙線串行通信協議。該協議支持通信總線上的多個目標設備,還可以支持發送和接收命令和數據的多個控制器。

wKgZomcXWfqAeVbVAAFJQ7CfYLw393.png

圖1:I2C總線典型應用

由于該協議只需要兩條通信線路,I2C在很多工程中有廣泛的應用,如數據采集領域的串行ADC、DAC、攝像頭配置,X射線管配置等。除此之外,由于I2C協議占用引腳特別少,硬件實現簡單,可擴展型強,現在被廣泛地使用在系統內多個集成電路(IC)間的通信。

1.2 I2C的速度模式

I2C有5種速度模式,從標準模式(Sm),快速模式(Fm),快速模式+(Fm+)模式。這三種模式相對相似,使用相同的通信結構。然而,所有模式都具有不同的時序規范,并且設備中I2C的硬件實現方式不同以適應不同的速度。

I2C還具有用于更高數據速率的另外兩種模式。高速模式(Hs模式)和超快模式(UFm)是最快的操作模式。表1-1顯示了不同的I2C模式及其各自的數據速率。

表1:不同I2C模式的最大傳輸速率

wKgaomcXWfqAPblfAACS35yP_I4482.png

2. 物理層

2.12線通信

I2C系統的特點是為總線上的所有設備提供兩條共享通信線路。這兩條線路用于雙向半雙工通信。I2C允許多個控制器和多個目標設備。這兩條線路上都需要上拉電阻器。圖2顯示了I2C物理層的典型實現。

wKgZomcXWfqAP9FNAAEfTq72eGc267.png

圖2:典型的I2C實現

第一條線是SCL,它是主要由控制器設備控制的串行時鐘。SCL用于將數據同步地時鐘輸入或輸出目標設備。

第二條線是SDA,它是串行數據線。SDA用于將數據傳輸到目標設備或從目標設備傳輸數據。

I2C控制器設備啟動和停止通信,這消除了總線爭用的潛在問題。通過總線上的唯一地址發送與目標設備的通信。這允許I2C總線上的多個控制器和多個目標設備。

SDA和SCL線路具有到總線上所有設備的開漏連接。這需要一個上拉電阻到一個公共電壓源。

2.2 漏極開路連接

漏極開路連接用于SDA和SCL線路,并連接到NMOS晶體管。該漏極開路連接控制I2C通信線路并將線路拉低或釋放線路高。漏極開路指的是NMOS關閉時的NMOS總線連接。圖3顯示了NMOS打開時的漏極開路連接。

wKgaomcXWfqAU7jRAADmazvLJJs360.png

圖3:當NMOS導通時,開路漏極連接將線路拉低

要設置SDA或SCL線的電壓電平,需將NMOS設置為打開或關閉。當NMOS打開時,設備通過電阻器將電流拉到地。這將打開的NMOS拉低。通常,當NMOS在SDA或SCL上下拉時,I2C從高到低的轉變是快速轉變。轉變的速度由NMOS驅動強度和SDA或SCL上的任何總線電容決定。

當NMOS關閉時,器件停止拉電流,上拉電阻器將SDA或SCL線拉至VDD。圖2-3顯示了NMOS關閉時漏極開路。上拉電阻器將線路拉高。開路漏極線的轉變較慢,因為線是相對于總線電容上拉的,并且不是主動驅動的。

wKgaomcXWfqAHjpmAAEvjsPg3zA313.png

圖4:NMOS關斷時上拉電阻器將線路拉高

通過控制該漏極開路連接,SDA和SCL都可以設置為高電平和低電平,從而實現I2C通信。

由于I2C通信線路上的電容,SDA和SCL線路以指數穩定RC時間常數放電,這取決于上拉電阻器的大小和I2C總線上的電容。更高的電容限制了I2C通信的速度、設備的數量以及總線上設備之間的物理距離。較小的上拉電阻器具有更快的上升時間,但需要更多的功率用于通信。較大的上拉電阻器具有較慢的上升時間,導致較慢的通信,但需要較少的功率。

2.3 非破壞性總線競爭

使用開放漏極的I2C的好處之一是總線爭用不會使總線進入破壞狀態。通過開漏輸出,許多設備可以連接在一起,而不會發生破壞性爭用。對于該連接上的任何輸出,如果任何輸出將線路拉低,則線路為低。這種連接被稱為有線AND連接。當連接在一起時,輸出是所有輸出的邏輯AND。

wKgZomcXWfqAIWnjAAEmcggWHxM456.png

圖5:推挽式與開漏輸出的比較

如果輸出是推挽式的,那么在沒有破壞狀態的可能性的情況下,輸出就不能連接在一起。推挽輸出(通常用于SPI通信)具有互補的NMOS和PMOS晶體管,它們驅動輸出為高或低。圖5顯示了在爭用中開漏和推挽輸出之間的比較。

采用開放式漏極連接,任何設備都可以隨時將連接拉低。每當任何設備將線路拉低時,線路都會顯示為低電平,但不會顯示為破壞性爭用。

在推挽輸出中,輸出也被連接在一起。如果總線上有兩個設備處于活動狀態,并且一個輸出為高,另一個輸出低,則此總線爭用具有未確定的狀態,可能在中間供電點處解決。此外,一個器件具有NMOS導通電流,而另一個器件則具有PMOS導通電流。這些器件通過非常低的阻抗路徑將電流從VDD供應到GND,傳導晶體管允許的盡可能多的電流。這種爭用的結果可能是大量的電流,可能會損壞設備。

3. I2C協議

3.1 I2C起始和停止協議

I2C通信是在I2C啟動條件下從控制器設備啟動的。如果總線開路,I2C控制器通過發送I2C START來請求總線進行通信。為此,控制器設備首先將SDA拉低,然后將SCL拉低。此序列表示控制器設備正在請求I2C總線進行通信,從而迫使總線上的其他控制器設備保持其通信。

wKgaomcXWfqAWidgAAB9RGmXd6Y598.png

圖6:I2C啟動和停止協議

當控制器設備已經完成通信時,SCL釋放高電平,然后SDA釋放高電平。這表示I2C停機狀態。這釋放了總線以允許其他控制器通信或允許同一控制器與另一設備通信。圖6顯示了I2C啟動和停止的協議。

3.2 邏輯“1”和邏輯“0”

I2C使用1和0的序列進行串行通信。SDA用于數據位,而SCL是對位序列進行計時的串行時鐘。當SDA釋放線路時,發送一個邏輯1,允許上拉電阻器將線路拉至高電平。當SDA在線路上下拉時,將發送一個邏輯零,在接地附近設置一個低電平。圖7顯示了I2C通信的數字1和0的表示。

wKgZomcXWfqATfBYAABRUCQJqkg470.png

圖7:I2C數據邏輯“1”和邏輯“0”

當SCL被脈沖化時,1和0被接收。對于有效位,SDA不會在該位的SCK的上升沿和下降沿之間變化。SDA在SCL的上升沿與下降沿之間的變化可以解釋為I2C總線上的START或STOP條件。

3.3 I2C通信幀格式

I2C協議被分解為多個幀。通信開始于控制器設備在START之后發送地址幀。地址幀后面跟著一個或多個數據幀,每個數據幀由一個字節組成。每個幀還具有一個確認比特(ACK),以提醒控制器目標設備或控制器設備已經接收到通信。圖8顯示了兩個I2C通信幀的示意圖。

wKgZomcXWfqAeE60AACjKPLimQA591.png

圖8:I2C地址和數據幀

在地址幀的開始,控制器設備啟動START條件。控制器設備首先將SDA拉低,然后將SCL拉低用于START。這允許控制器設備在沒有來自總線上的其他控制器設備的爭用的情況下請求總線。每個I2C目標設備都具有相關聯的I2C地址。當開始與特定目標設備通信時,控制器使用目標設備地址在I2C幀中發送或接收數據。I2C地址由I2C總線上的7個位和R/Wn組成,每個設備在總線上都有一個唯一的地址。

7位地址意味著128個唯一地址。然而,有幾個保留的I2C地址限制了可能的設備的數量。發送地址時,SDA作為數據,SCL作為串行時鐘。

該幀地址后面的第8位是讀寫(R/W)位。如果該位為1,則控制器要求從目標設備讀取數據。如果該位為0,則控制器要求將數據寫入目標設備。

在任何通信字節之后,額外的第9位用于驗證通信是否成功。在地址字節通信結束時,目標設備在SCL脈沖期間下拉SDA,以向控制器指示地址已被接收。這被稱為確認(ACK)比特。如果該比特為高,則沒有目標設備接收到該地址,并且通信不成功。如果比特是高的,這被稱為NACK,并且沒有ACK。

地址幀后面跟著一個或多個數據幀。這些幀一次發送一個字節。在每個數據字節被傳輸之后,會有另一個ACK。如果數據字節是對設備的寫入,則目標設備將SDA拉低以確認傳輸。如果數據字節是從設備讀取的,則控制器將SDA拉低以確認數據已被接收。ACK是一個有用的調試工具。該位的缺失可以指示目標外圍設備沒有接收到用于通信的適當I2C地址,或者控制器外圍設備沒有收到期望的數據。

通信完成后,控制器發出I2C STOP條件。首先釋放SCL,然后釋放SDA??刂破魇褂肧TOP指示通信已完成,I2C總線已釋放。

這是控制器設備和目標設備之間的任何I2C通信的基本協議。通信可以由多個字節的數據組成。在目標設備具有多個數據和配置寄存器的某些情況下,從設備的讀取可以從對設備的寫入開始,以指示要讀取哪個寄存器。

4. I2C高級議題

4.1 電壓電平轉換

設計大型系統的一個常見問題是系統內不同電壓電平的混合。這些不同的電壓可以為不同的I2C控制器和目標設備供電。電源中不匹配的電壓可能會中斷通信,甚至損壞設備。

wKgaomcXWfqAbrQ_AAFq48tGCIM525.png

圖9:PCA3906 I2C電壓電平轉換器

對于不匹配的電源電壓,最好的選擇是使用特殊設備橋接兩個電源電壓。圖9顯示了使用I2C電壓電平轉換器橋接兩個不同電源電壓之間通信的示例。有兩組上拉,每個電壓電平一組。作為一個通用的電壓轉換器,PCA9306允許不同電源電平之間的通信。

4.2 上拉電阻大小計算

為了設計系統,使總線速度足夠快,以滿足協議總線速度,本節介紹如何計算上拉電阻的值。

對于SDA和SCL的漏極開路連接,從這些線路從高到低以及從低到高的轉換取決于器件漏極開路的電流吸收、總線電容和上拉電阻值?;谶@些不同的參數,可以計算I2C總線速度的最小和最大電阻。

wKgZomcXWfqAG47oAADCXvSeR-I670.png

圖10:影響上拉電阻大小的因素

推薦的正常上拉電阻為1kΩ至10kΩ。電阻越高,I2C通信越慢。由于電阻較低,I2C通信需要更多的功率?;趲讉€不同的參數,可以計算I2C總線速度的最小和最大電阻。

表2列出了I2C總線的比特率、總線的最大上升時間以及總線上的最大電容負載。所有這些參數都用于確定最小和最大上拉電阻值。

表2:I2C總線參數特性

wKgaomcXWfqAQHfWAACUJkeRnGo536.png

除了這些參數外,還考慮了I2C輸入和輸出電壓的最小值和最大值。表3描述了這些電壓。
表3:I2C總線參數特性

wKgaomcXWfuAfT0aAADCx_vtmnk631.png

(1)最小上拉電阻計算

圖11顯示了I2C總線的漏極開路連接以及SDA或SCL的輸出波形。SDA和SCL總線從設備的電流拉低轉換為低電平。

wKgaomcXWfuAKGLuAACF_AUoHEg681.png

圖11:基于下拉電流的最小上拉電阻

當設備釋放SDA或SCL時,總線連接到VCC電壓。當激活時,器件漏極將總線輸出拉到接近接地的位置。輸出必須下降到輸出低電平電壓VOL。該設備用電流IOL將總線拉低。VOL和IOL(3mA電流匯點)如表3所示。根據該電流,計算上拉所需的最小電阻。如果電阻較小,則輸出電流不能將總線的輸出電壓拉低到足以被識別為數字低。這如下公式所示。

wKgZomcXWfuAeoi6AAAYzRibzYg285.png

求出最小上拉電阻,從3.3 V的電源電壓中減去0.4 V的輸出低電壓。然后除以3 mA的總線所拉的電流。這導致最小電阻為967Ω。

(2)最大上拉電阻計算

漏極開路連接釋放輸出電流后,上拉電阻將總線連接拉高。總線輸出波形具有指數穩定。當電阻器將電壓從地上拉時,電壓穩定時間基于總線電容(CB)。由于I2C標準上升時間規范,最大上拉電阻受到總線電容的限制。對于更高的電阻,上拉輸出上升得太慢,并且沒有足夠快地達到邏輯高位。

wKgZomcXWfuAUMM0AADjH29gQ1w165.png

圖12:最大上拉電阻計算

隨時間的指數方程如下公式所示:

wKgZomcXWfuAPmoKAAAVuzfHnog033.png

上升時間基于從電源電壓的0.3倍的數字輸入低電壓(VIL)到電源電壓的0.7倍的數字輸出高電壓(VIH)的轉變。上升時間如表2所示,而VIL和VIH如表3所示。

wKgZomcXWfuASI7RAABLjZAA0eU385.png

根據上述方程,可以根據最大上拉電阻和總線電容來求解上升時間。在這個例子中,計算是針對400pF的總線電容(針對最大總線電容)和3.3V的電源電壓。根據上升時間,然后求解最大上拉電阻。

wKgaomcXWfuAAp5DAAArlrtbEr0709.png

上升時間取決于I2C模式。對于此示例,可以使用標準模式。取1000ns的上升時間,除以0.8473乘以400pF的量。這給出了2.95kΩ的最大電阻。

最小電阻為967Ω,最大電阻為2.95kΩ,這些值的電阻范圍似乎很窄。然而,這個小范圍是因為上拉電阻器的大小是在最大標準模式總線電容為400pF的情況下計算的。總線電容量異常大,尤其是對于板上的寄生電容而言。如果設計具有較低的總線電容(很可能),則可以增加最大電阻,從而減少I2C總線上的功耗。

5. 小結

I2C是一種常見的通信協議,本文對I2C協議的歷史、速度模式、物理層、數據幀結構以及混合電壓系統中電平兼容性以及上拉電阻大小計算均進行了詳細介紹。

本文轉載自FPGA技術實戰公眾號

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7649

    瀏覽量

    152103
  • 集成電路
    +關注

    關注

    5392

    文章

    11622

    瀏覽量

    363168
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151911
  • I2C協議
    +關注

    關注

    0

    文章

    26

    瀏覽量

    8526

原文標題:FPGA入門基礎之I2C接口設計(一)

文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    I2C總線協議及其應用(圖)

    I2C總線協議及其應用
    發表于 06-01 20:22 ?7044次閱讀

    什么是i2c總線

    什么是i2c總線  下載請點擊: i2c總線協議中文版 
    發表于 11-05 09:26 ?2944次閱讀

    I2C總線協議及其應用

    I2C總線協議及其應用 一、I2C總線介紹: ---- 由于大規模集成電路技術的發展,在單個芯片集成CPU以及組成一個單獨工作系統
    發表于 02-08 11:23 ?1582次閱讀
    <b class='flag-5'>I2C</b>總線<b class='flag-5'>協議</b>及其應用

    I2C最新協議標準

    I2C最新協議標準,詳細介紹了IIC信號要求,供大家參考,
    發表于 12-22 17:59 ?13次下載

    I2C通信協議應該如何學習

    我最近剛做完I2C通信協議的編寫與調試,下面介紹一下我從一開始理解夏老師的程序,修改程序,直到下板調試整個的學習過程,希望對大家學習 I2C 有一定的幫助。一、 分析源代碼學習 I2C
    發表于 04-28 08:00 ?22次下載
    <b class='flag-5'>I2C</b>通信<b class='flag-5'>協議</b>應該如何學習

    I2C系列的合集,可以系統學習I2C協議

    這篇文章給大家帶來了I2C系列的合集,可以系統學習I2C協議。大家趕緊看看吧! 1、I2C總線:何時使用I2C緩沖器 本文討論了使用
    的頭像 發表于 09-23 15:28 ?3192次閱讀

    I2C基礎知識入門簡單介紹

    廢話 I2C其實肝的我挺難受的,通訊協議這種規范往往可以摳出很多的細節,看了波叔的文章《萬變不離其宗之I2C總線要點總結》,很詳細。我打賭我還不會I2C,因為涉及到很多技術細節,在實際
    的頭像 發表于 12-02 14:29 ?4704次閱讀

    I2C總線協議英文資料

    I2C總線協議英文資料
    發表于 11-24 10:00 ?13次下載

    STM32學習之I2C協議(讀寫EEPROM)

    關于STM32學習分享第七章 I2C協議(讀寫EEPROM)文章目錄關于STM32學習分享前言二、代碼1.i2c.c2.i2c.h3.main.c總結前言開始!開始!單片機的I2C
    發表于 11-30 15:21 ?32次下載
    STM32學習之<b class='flag-5'>I2C</b><b class='flag-5'>協議</b>(讀寫EEPROM)

    MPU6050的I2C通信協議

    不同硬件有不同的I2C協議
    發表于 12-06 12:21 ?3次下載
    MPU6050的<b class='flag-5'>I2C</b>通信<b class='flag-5'>協議</b>

    硬件I2C與模擬I2C

    配置;而軟件I2C是沒有寄存器這個概念的。 軟件I2C一般是使用GPIO管腳,用軟件控制SCL,SDA線輸出高低電平,模擬i2c協議的時序。例如下面這段
    發表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    一文看懂I2C協議

    電子行業最常用的3種串行通訊協議:UART、SPI和I2C。前面介紹了串口通訊協議及其FPGA實現,SPI協議。本篇文章介紹I2C通訊
    發表于 01-25 18:32 ?40次下載
    一文看懂<b class='flag-5'>I2C</b><b class='flag-5'>協議</b>

    I2C通信協議:了解I2C Primer、 PMBus和SMBus

    I2C,即Inter-Integrated Circuit,是一種常用的串行通信協議,用于在器件之間——特別是兩個或兩個以上不同電路之間建立通信。I2C Primer是最常用的I2C。
    的頭像 發表于 06-15 15:29 ?6067次閱讀
    <b class='flag-5'>I2C</b>通信<b class='flag-5'>協議</b>:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus

    使用I2C協議點亮OLED

    你好,我是愛吃魚香ROS的小魚。本節我們就嘗試直接使用I2C協議來點亮OLED,因為主要測試I2C協議,所以對于復雜的顯示處理部分小魚就略過了,畢竟有方便的開源庫使用,我們也不用那么糾
    的頭像 發表于 07-15 16:47 ?2073次閱讀
    使用<b class='flag-5'>I2C</b><b class='flag-5'>協議</b>點亮OLED

    I2C串行總線協議是什么?I2C總線有哪些優點?

    I2C串行總線協議是什么?I2C總線有哪些優點? I2C(Inter-Integrated Circuit)是一種串行總線協議,由Phili
    的頭像 發表于 09-12 11:18 ?1809次閱讀
    网上赌百家乐官网被抓应该怎么处理| 百家乐官网技巧和规律| 百家乐桌布9人| 澳门百家乐官网新濠天地| 永利线上娱乐| 真人百家乐游戏网| 百家乐游戏合法吗| 圣安娜百家乐官网包杀合作| 葡京百家乐官网技巧| 利澳娱乐城官方网| 大发888开户即送58| 皇冠百家乐官网赢钱皇冠| 八大胜娱乐城| 大发888娱乐城在线客服| 澳门百家乐的玩法技巧和规则| 24山水口决阳宅| 网上百家乐官网破战| 百家乐官网投注方法投资法| 德兴市| 六合彩报| 大发888娱乐成| 正品百家乐官网的玩法技巧和规则 | 百家乐娱乐真人娱乐| 百家乐赌法| 百家乐三号的赢法| 百家乐庄家抽水| 属羊的和属猪的做生意| 首席百家乐官网的玩法技巧和规则| 赌场百家乐官网试玩| 皇冠网上开户| 六合彩号码| 棋牌室高尔夫娱乐场| 德州扑克官网| 大发888注册送28| 六合彩图库| 正网皇冠开户| 百家乐技巧| 阿鲁科尔沁旗| 澳门百家乐官网才能| 澳门百家乐官网小游戏| E乐博百家乐官网现金网|