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

2021-01-06 電子發燒友
打開APP
淺談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閱讀更多精彩內容

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

相關焦點

  • i2c總線用來做什麼_i2c總線數據傳輸過程
    i2c總線用來做什麼   I2C總線控制器為微控制器或微處理器提供控制I2C總線的接口,它控制所有I2C總線的特殊序列、協議、仲裁、時序,這裡指MPC8250提供的I2C總線控制接口。
  • i2c的設備樹和驅動是如何匹配以及何時調用probe的?
    要搞懂這個問題,我們需要有一些基礎知識:1.內核如何維護i2c總線Linux內核維護很多總線,platform、usb、i2c、spi、;= &i2c_device_pm_ops,};其中:i2c_device_match(),匹配總線維護的驅動鍊表和設備信息鍊表,如果其中名字完全相同,則返回true,否則false;
  • 單總線、IIC、SPI接口詳解(一)
    下面就給大家說說這些接口。一.單總線1、採用單總線的設備有非常具有代表性的溫度傳感器DS18B20以及溫溼度傳感器DHT11。顧以名思義單總線即只有單根信號線,該線即傳輸數據也傳輸時鐘,並且數據傳輸也為雙向。此處與spi、i2c以及串口不同。採用這種形式可以節省io口,並且簡單。
  • 《rt-thread驅動框架分析》-i2c驅動
    驅動層:分為硬體I2C驅動和軟體I2C驅動。核心層: ①其中bit_ops是RTT為軟體I2C提供的中間層,它的作用:為底層模擬I2C驅動提供回調接口,為核心層提供統一I2C通信接口。②而硬體I2C則直接對接核心層,提供統一I2C通信接口。③RTT在核心層上,也像pin驅動那樣,封裝了一套API(虛線箭頭),供用戶直接使用。
  • I2C總線驅動程序
    >\n\r"); } switch (s3c2440_i2c_xfer_data.state) { case STATE_START : // 發出S和設備地址後,產生中斷 // // 發出START信號和發出設備地址 // s3c2440_i2c_start();
  • I2C總線協議分析
    I2C的兩根線SDA(串行數據線)和SCL(串行時鐘線)都是雙向I/O線,接口電路為開漏輸出,需通過上拉電阻接電源VCC,當總線空閒時,兩根線都是高電平。常見的硬體結構圖(一個適配器,兩根線,若干設備而已)I2C總線通信時序使用I2C通信時,必須指定主從設備,一般包含有I2C控制器的處理器被配置成主設備,掛接在i2c總線上的外設作為從設備。
  • 關於調試stm32和stm8(51單片機)的i2c和spi協議的之間的區別
    在調試STM32的i2c和io口模擬spi協議時發現時序是很關鍵的。stm32在72M運行下可以實現i2c或者spi協議,但並不代表把相同的代碼移植到51單片機上就會成功的跑起來,因為51單片機的速讀最塊8M,所以在時序上會產生很多大的區別。經過測試,在stm32上的spi協議時鐘線可達到20Khz,移植到51後,頻率會降到<10hz。
  • 基於I2C總線性能問答集錦
    [答:Alex] 我想這是存儲晶片的問題,和什麼接口並無關係,除非你沒有寫進去,若你能確定數據已經寫入,我建議你接觸你的晶片供應商請求協助測試解決該問題。[問:mocan] 1、I2C是否支持熱拔插。[問:khadgar02] 請問一家ic公司如何獲得i2c控制器的生產授權?繳納license?直接向philips購買硬核?可以自行研製然後通過測試嗎?
  • spi與i2c總線有什麼區別
    什麼是I2C總線   I2C--INTER-IC串行總線的縮寫,是PHILIPS公司推出的晶片間串行傳輸總線。它以1根串行數據線(SDA)和1根串行時鐘線(SCL)實 現了雙工的同步數據傳輸。具有接口線少,控制方式簡化,器件封裝形式小,通信速率較高等優點。在主從通信中,可以有多個I2C總線器件同時接到I2C總線 上,通過地址來識別通信對象。
  • i2c的設備樹是如何匹配以及何時調用probe的?
    ov5640_i2c_driver要搞懂這個問題,我們需要有一些基礎知識:1.內核如何維護i2c總線Linux內核維護很多總線,platform、usb、i2c、spi、pci, .shutdown = i2c_device_shutdown, .pm  = &i2c_device_pm_ops,};其中:i2c_device_match(),匹配總線維護的驅動鍊表和設備信息鍊表,如果其中名字完全相同,則返回true,否則false;i2c_device_probe(),當我們註冊一個i2c_drive或者i2c_client
  • 常用的器件外設接口 - SPI、I2C、UART、GPIO(PWM)
    硬禾實戰營研究生技能培訓戰鬥到第三周就是FPGA編程了,編程中重要的環節就是通過FPGA邏輯來深入了解幾種常用的串行接口總線的組成及差異,之所以要熟悉這幾種總線
  • SPI、I2C、UART三種串行總線協議的區別和SPI接口介紹,以及SPI接口...
    I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經常性的數據通信。在它的協議體系中,傳輸數據時都會帶上目的設備的設備地址,因此可以實現設備組網。
  • SPI、I2C、UART三種串行總線協議的區別和SPI接口介紹
    I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經常性的數據通信。在它的協議體系中,傳輸數據時都會帶上目的設備的設備地址,因此可以實現設備組網。
  • 「正點原子Linux連載」第六十一章Linux I2C驅動實驗
    61.1 Linux I2C驅動框架簡介回想一下我們在裸機篇中是怎麼編寫AP3216C驅動的,我們編寫了四個文件:bsp_i2c.c、bsp_i2c.h、bsp_ap3216c.c和bsp_ap3216c.h。其中前兩個是I.MX6U的IIC接口驅動,後兩個文件是AP3216C這個I2C設備驅動文件。
  • STM32F103編程學習——I2C通信
    記錄中年男人的編程學習之路I2C的定義全稱Inter IC Bus,即串行總線。該總線是Phlips公司推出的一種串行總線,只有兩根雙向信號線,一根是數據線SDA,另一根是時鐘線SCL。這兩條信號線都需要上拉至電源,確保總線空閒時,兩者電平都是高電平。
  • 程序猿眼中的華為海思晶片之I2C配置
    I2C總線簡介首先按照慣例俗套的說一下I2C總線的定義,I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要兩根分別命名為SDA(串行數據線)和SCL(串行時鐘線)的信號線連接不同的器件即可傳輸信息。I2C總線上的器件有主從之分,在嵌入式系統上的主器件一般是嵌入式主晶片(MCU),主器件負責啟動、終止數據傳送,產生時鐘信號。
  • 敏矽微電子Cortex-M0學習筆記17-I2C從機通信實例
    在從機模式下,I2C硬體時刻監視總線上是否出現4個已定義的從機地址。如地址被檢測到,就會發出中斷請求。在中斷程序中回應主機的請求。1-1 從機接收模式在從機接收模式下,從主機接收數據字節。要初始化從接收模式,對任一從機地址寄存器(ADR0-3) 和從屏蔽寄存器(MASK0-3)。
  • 關於I2C和SPI總線協議
    [主從設備]必須使用相同的工作參數——SCLK、CPOL 和 CPHA,才能正常工作。如果有多個[從設備],並且它們使用了不同的工作參數,那麼[主設備]必須在讀寫不同[從設備]間重新配置這些參數。以上SPI總線協議的主要內容。SPI不規定最大傳輸速率,沒有地址方案;SPI也沒規定通信應答機制,沒有規定流控制規則。事實上,SPI[主設備]甚至並不知道指定的[從設備]是否存在。這些通信控制都得通過SPI協議以外自行實現。例如,要用SPI連接一支[命令-響應控制型]解碼晶片,則必須在SPI的基礎上實現更高級的通信協議。SPI並不關心物理接口的電氣特性,例如信號的標準電壓。
  • SPI、I2C、UART三種串行總線的區別
    外圍設置FLASHRAM、網絡控制器、LCD顯示驅動器、A/D轉換器和MCU等。SPI總線系統可直接與各個廠家生產的多種標準外圍器件直接接口,該接口一般使用4條線:串行時鐘線(SCK)、主機輸入/從機輸出數據線MISO、主機輸出/從機輸入數據線MOST和低電平有效的從機選擇線SS(有的SPI接口晶片帶有中斷信號線INT或INT、有的SPI接口晶片沒有主機輸出/從機輸入數據線MOSI)。