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

2020-11-25 電子發燒友

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

李倩 發表於 2018-03-21 10:24:24

I2C(Inter Integrated Circuit,內部集成電路)總線是價格低廉卻很有效的用以互連小規模嵌入式系統內的外設的網絡。I2C 總線有時候也叫作 IIC,它已有20多年的歷史了。I2C 接口和 SPI 接口的作用相同,但二者的使用方法有些不同。 

I2C 總線用兩根線來連接多支路總線中的多個設備。這種總線是雙向、低速的,並與公共時鐘同步。可以直接將一個設備接到 I2C 總線上或是從該總線上取下,而不會影響其他設備。一些生產商比如 Microchip 公司、Philips 公司、Intel 公司等生產的小型微處理器都內置了 I2C 接口。I2C 總線的數據傳輸率比 SPI 總線要慢一些,在標準模式下的傳輸速度為 100kbps,在快速模式下為 400kbps。    利用 I2C 接口在設備之間進行連接使用的兩根線是 SDA(串行數據)和 SCL(串行時鐘),它們都是開漏,通過一個上拉電阻接到正電源,因此在不使用的時候扔保持高電平。使用 I2C 總線進行通信的設備驅動這兩根線變為低電平,在不使用的時候就讓它們保持高電平。每個連到 I2C 的設備都有一個唯一地址,這個設備可以是數據發送者(總線主機)、接收者(總線從機),也可以二者都是。I2C 是多主機總線,這意味著可以有多個設備充當總線主機的角色。 

圖1. I2C總線連線圖

SDA 和 SCL 都是雙向的。SPI 總線有兩根單獨的線,分別用於兩個方向的通信,而 I2C 總線不同,它使用同一根線來完成主機發送數據和接收從機響應。另外,與 SPI 總線具有多個工作模式不同,I2C 總線只有一個工作模式,時鐘線 SCL 和數據線 SDA 之間的時序關係很簡單直觀:當空閒的時候,SDA 和 SCL 都是高電平,只有 SDA 變為低電平,接著 SCL 也變為低電平時,才開始 I2C 總線的數據傳輸。當 SDA 和 SCL 都變為低電平時,就是告訴總線上的所有接收設備數據包的傳輸開始了,在 SCL 變為低電平後,SDA 才發送第一個有效數據位,這稱為開始條件。    對於被傳輸的每一位,當 SCL 為低電平時在 SDA 上必須變為有效,該位是在 SCL 的上升沿對 SDA 上的數據位進行採樣的,也必須一直保持有效直到 SCL 再次變為低電平,然後 SDA 就在 SCL 再次變為高電平之前傳輸下一位。    最後,SCL 變為高電平,接著 SDA 也變為高電平,數據傳輸結束。這被稱為結束條件。 

圖2. I2C總線傳輸的開始條件和結束條件

無論多大的數據包都可以通過 I2C 總線進行傳輸。像 SPI 總線一樣,I2C 也是高位先傳輸。如果數據接收者無法再接收更多的數據,它可以通過將SCL保持低電平來中斷傳輸,這樣可以迫使數據發送者等待,直到 SCL 被重新釋放。    發送方發出的每個字節都必須經過接收方確認,每個字節的第8位數據一旦傳送結束,發送方就釋放數據線 SDA,然後主機在 SCL 上產生一個額外的時鐘脈衝,這會觸發接收方通過將 SDA 置為低電平來表示接收到的字節進行確認。如果接收方沒有能將 SDA 置為低電平,發送方就會中斷傳輸,並且採取適當的錯誤處理措施。 

圖3. 帶有接收方確認的I2C數據包

由於 I2C 是多主機總線,因此存在同一時刻會有多個主機試圖開始數據傳輸的可能。SPI 總線使用一個獨立的片選端來使接收從機有效,每個 SPI 從機都有一個單獨的片選端,由主機驅動。I2C 沒有這樣的選擇機制,不過總線上的每個設備都有一個唯一的地址,數據包傳輸時先發送地址位,接著才是數據。一個地址字節由7個地址位和1個指示位組成。如果指示位是0,意味著這個傳輸是一個寫操作,被選中的從機將接收數據並將其作為輸入;如果指示位是1,就要求從機將數據發送回主機。

I2C 總線還支持一個擴展的10位尋址模式,可連接的外設數量可達1024個,使用7位尋址模式的設備和10位尋址模式的設備可以在同一個系統中混合使用。10位尋址時,使用2個字節來保存地址。如果第1個地址字節以0b11110xx_開始,就會產生一個10位地址,第1個字節的第1、2位(第0位是讀寫指示位)和第2個字節的8位合起來構成10位的地址。而7位設備將會忽略這個過程。 

圖4. I2C普通的和帶重複開始條件的7位地址格式

圖5. I2C總線10位地址格式

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • Linux下I2C總線EEPROM驅動程序設計方法
    而對於I2C總線  控制器,各種總線控制器在進行數據傳輸時採用的算法有好多種,使用相同算法的控制器提供的控制接口也可能不同。在I2C總線驅動程序體系結構中,用數據結構Algorithm來表示算法,用數據結構Adapter來表示不同的總線控制器。Linux內核的I2C總線驅動程序體系結構如圖5所示。
  • 樹莓派怎樣連接多個I2C設備
    i2c總線可以處理多個設備,但是它們應具有不同的i2c地址。有些i2c設備具有用於設置其他i2c地址的跳線,但許多設備卻沒有。在這種情況下,您可以使用i2c多路復用器(硬體)來旋轉i2c SDA(數據)和SCL(時鐘),也可以創建其他i2c總線或更多。
  • spi與i2c總線有什麼區別
    什麼是I2C總線   I2C--INTER-IC串行總線的縮寫,是PHILIPS公司推出的晶片間串行傳輸總線。它以1根串行數據線(SDA)和1根串行時鐘線(SCL)實 現了雙工的同步數據傳輸。具有接口線少,控制方式簡化,器件封裝形式小,通信速率較高等優點。
  • 救活你的I2C總線故障方案出爐了!
    如果這麼一個簡單的東西,有時候想要的結果死活不出來,反覆的檢查問題的原因,查詢解決辦法,核查設備的數據手冊,甚至發送和接收的每一條命令與數據都知道是什麼意思,仍然無法解決問題,那該怎麼辦呢? 一、i2c 基本用法 i2c 總線是一種簡單、雙向二線制同步串行總線。所有主機在 SCL 線上產生它們自己的時鐘來傳輸總線上的報文,SDA 線傳輸每個字節必須為 8 位,每次傳輸可以發送的字節數量不受限制,每個字節後必須跟一個響應位。在空閒狀態時,SCL 與 SDA 均為高電平。
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    它是同步通信的一種特殊形式,具有接口線少、控制方式簡單、器件封裝形式小、通信速率較高等優點。在主從通信中,可有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。
  • 飛利浦推出業界首款快速模式I2C總線控制器
    控制器擴展了計算、通信和聯網應用中I2C總線的用途皇家飛利浦電子集團推出全球首款在400 kHz頻率和2.5-3.3V低壓下運行的並行到串行接口I2C總線控制器。PCA9564優化了多重I2C設備或SMus組件與微處理器、微控制器、數位訊號處理器(DSP)之間的連接。
  • PCA9685--16路 PWM模塊舵機驅動板--STM32 IIC接口模塊
    目錄一、概述和硬體1、概述2、硬體1、電壓2、i2c地址3、使能腳二、寄存器功能MODE1寄存器外面調用的接口PCA9685是一款基於IIC總線通信的12位精度16通道PWM波輸出的晶片,該晶片最初由NXP推出時主要面向LED
  • UART/I2C/SPI/1-wire四大通信接口的神解釋
    空閒時SDA和SCL上的電平都為高電平。起始和停止起始條件S:當SCL高電平時,SDA由高電平向低電平轉換;停止條件P:當SCL高電平時,SDA由低電平向高電平轉換。起始和停止條件一般由主機產生,總線在起始條件後處於busy的狀態,在停止條件的某段時間後,總線才再次處於空閒狀態。
  • 單片機 arm 常用的接口總結
    常用的接口有spi,I2c,uart等,他們都有自己的協議規定,下面談談它們之間的聯繫與區別:1 I2C總線本文引用地址:http://www.eepw.com.cn/article/201611/321770.htm涉及到I2C的編程主要涉及到兩種情況:有專用控制器的arm晶片
  • 示波器和I2C時序波形圖的關係分析
    打開APP 示波器和I2C時序波形圖的關係分析 周碧俊 發表於 2018-08-03 16:57:53 I2C簡介 I2C總線只需要兩條線,一條SDA數據線,一條SCL時鐘線;根據這兩條線的高低電平、上升沿、下降沿就可以實現主機與I2C設備的通訊 I2C與示波器 對於I2C總線的數據,我們要用到示波器,這樣我們才能抓取到信號,而且必須同時採集SDA和SCL的數據;該如何抓取呢?
  • I2C/SPI/UART/1-Wire/並行接口這幾種常用嵌入式通信協議,你都了解嗎
    主設備和從設備都可以作為發送設備或接收設備。無論主設備是作為發送設備還是接收設備,同步時鐘信號都只能由主設備產生。在相同的總線上,I2C支持多個主設備的同時存在。圖2-26顯示了I2C總線上主設備和從設備的連接關係。
  • 帶I2C接口的數字溫度傳感器TMP101及其應用
    TMP101可通過串行總線接口方便地與數字系統相連,同時還具有關閉模式和報警輸出。文中介紹了TMP101的內部結構和主要特性,並給出了與PrPMC800模塊的接口應用。TMP101內部帶有數字溫度傳感器、溫度窗口比較器和I2C串行總線接口。
  • I2C總線設計注意事項
    當時在使用avr CPU設計數據採集器產品的CPU主板,外掛了Silicon lab的溫溼度傳感器Si7013,實時時鐘,主要實現溫溼度、時鐘及電流電壓等信號通過I²C總線到達CPU進行處理,並且由MCU EFM32WG290F64控制在液晶上和上位機界面上的CPU自帶的I²C總線外掛的六個I²C從設備,如下圖1所示。
  • 淺談Zynq實現SPI接口設計
    打開APP 淺談Zynq實現SPI接口設計 工程師3 發表於 2018-04-22 11:46:00 在這個例子中,我將把SPI信號連接到Digilent ARTY Z7開發板的SPI接口,這需要通過PL I/O使用EMIO。
  • TI推出 I2C 接口雙向電流、電壓與電源監控器
    日前,德州儀器 (TI) 宣布推出一款具備 I2C 接口的高側測量雙向電流∕電源監控 IC —— INA209,藉助零漂移與自動調零 (auto-zeroing
  • 詳解I2C總線鍵盤電路以及驅動程序設計
    I2C 需要連線少,僅需一條串行時鐘線和一條串行數據線。允許多主機控制,具有裁決和同步功能,可隨意添加或摘除總線上的子器件等諸多優點,所以已經被廣泛應用。二、MAX7348MAX7348 是美國MAXIM 公司生產的2 線接口、低EMI 鍵盤開關和發聲控制器,可監控多達40 個按鍵,可對按鍵去抖並保存在FIFO 中,去抖時間用戶可在9 ~ 40ms 之間任意設置,MAX7348 自帶的音調發生器在控制器的作用下可自動發出按鍵聲和報警聲,在發聲期間,輸出還可以設置為高電平或低電平,以驅動電子發聲器、繼電器或指示燈。
  • I2C總線驅動在嵌入式系統中的兩種實現
    他通過串行數據線(Serial Data Lines,SDL)及串行時鐘線(Serial ClockLine,SCL)兩線在連接到總線上的器件之間傳送信息,並根據地址識別每個器件。一個或多個微控制器以及外圍器件可以通過I2C總線接口非常方便的連接在一起構成系統。這種總線結構的連線和連接引腳少,器件間總線簡單。
  • 基於CPCI總線接口和LVDS接口的接收和傳輸測試數據實驗設計
    基於CPCI總線接口和LVDS接口的接收和傳輸測試數據實驗設計 李金焦新泉劉東海 發表於 2020-01-26 16:08:00 0 引言 隨著科學技術的迅猛發展
  • 嵌入式硬體通信接口協議中的串行通信接口-SPI
    SPI,是一種高速的,全雙工,同步的通信總線,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今越來越多的晶片集成了這種通信協議,比如AT91RM9200。  --from 百度百科  該接口由摩託羅拉在20世紀80年代中期開發,並已成為事實標準。