spi與i2c總線有什麼區別

2020-12-01 電子發燒友

  什麼是SPI

  SPI是串行外設接口(Serial Peripheral Interface)的縮寫。SPI,是一種高速的,全雙工,同步的通信總線,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今越來越多的晶片集成了這種通信協議,比如AT91RM9200。

  SPI協議概括

  SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的設備共有的,它們是SDI(數據輸入)、SDO(數據輸出)、SCLK(時鐘)、CS(片選)。

  (1)SDI – SerialData In,串行數據輸入;

  (2)SDO – SerialDataOut,串行數據輸出;

  (3)SCLK – Serial Clock,時鐘信號,由主設備產生;

  (4)CS – 從設備使能信號,由主設備控制。

  什麼是I2C總線

  I2C--INTER-IC串行總線的縮寫,是PHILIPS公司推出的晶片間串行傳輸總線。它以1根串行數據線(SDA)和1根串行時鐘線(SCL)實 現了雙工的同步數據傳輸。具有接口線少,控制方式簡化,器件封裝形式小,通信速率較高等優點。在主從通信中,可以有多個I2C總線器件同時接到I2C總線 上,通過地址來識別通信對象。

  I2C 接口的協議裡面包括設備地址信息,可以同一總線上連接多個從設備,通過應答來互通數據及命令。但是傳輸速率有限,標準模式下可達到100Kbps,快速模式下可達到400Kbps(我們開發板一般在130Kbps),高速模式下達到4Mbps,不能實現全雙工,不適合傳輸很多的數據。

  I2C總線是一個真正的多主機總線,總線上多個主機初始化傳輸,可以通過傳輸檢測和仲裁來防止數據被破壞 。

  下來詳細了解I2C總線時序:

  1.1 總線數據有效性

  I2C總線是單工,因此同一時刻數據只有一個流向,因此採樣有效時鐘也是單一的,是在SCL時鐘的高電平採樣數據。

  I2C總線上SDA數據在SCL時鐘低電平是可以發生變化,但是在時鐘高電平時必須穩定,以便主從設備根據時鐘採樣數據,如下圖:

  

  1.2 總線空閒條件

  I2C總線上設備都釋放總線(發出傳輸停止)後,I2C總線根據上拉電阻變成高電平,SDA SCL都是高電平。

  1.3 總線數據傳輸起始和結束條件

  I2C總線SCL高電平時SDA出現由高到低的跳變,標誌總線上數據傳輸的開始條件

  I2C總線SCL高電平時SDA出現由低到高的跳變,標誌總線上數據傳輸的結束條件

  

  1.4 總線數據傳輸順序以及ACK應答

  I2C總線上數據傳輸室MSB在前,LSB在後,從示波器上看,從左向右依次讀出數據即可

  I2C總線傳輸的數據不收限制,但是每次發到SDA上的必須是8位,並且主機發送8位後釋放總線,從機收到數據後必須拉低SDA一個時鐘,回應ACK表示數據接收成功,我們如果示波器上看到的波形就是每次9位數據,8bit+1bit ack。如下:

  

  從機收到一字節數據後,如果需要一些時間處理,則會拉低SCL,讓傳輸進入等待狀態,處理完成,釋放SCL,繼續傳輸,如下:

  

  1.5 總線讀寫時序

  數據的傳輸在起始條件之後,發送一個7位的從機地址,緊接著第8位是數據方向(R/ W),0-表示發送數據(寫),1-表示接收數據(讀)。數據傳輸一般由主機產生的停止位(P)終止。但是如果主機仍希望在總線上通訊,它可以產生重複起始條件(Sr),和尋址另一個從機,而不是首先產生一個停止條件。在這種傳輸中,可能有不同的讀/寫格式結合。

  I2C總線主設備讀寫從設備,一般都是與從設備的寄存器打交道,這個可以通過閱讀從設備的datasheet獲取。總線寫時序如下:

  master start + master addr|w + slave ack + master reg|w + slave ack + master data + slave ack + master restart。。master data + slave nack + master stop

  總線讀時序如下:

  master start + master addr|w + slave ack + master reg|w + slave ack + master restart + master addr|r + slave ack + slave data + master nack + master stop

  總線讀時序與寫的不同之處在於讀需要2次傳輸才能完成一次讀取,首先要寫寄存器地址到從設備,其實是寫到了從設備的控制寄存器或者命令寄存器,從設備內部會根據這個地址來尋址所要操作的寄存器。

  我在讀我們的bios和內核時發現,2者在總線讀時序上的實現不太一樣,在於第一次寄存器地址寫入後,一個發的是restart,一個發的是stop,然後再start開始讀取數據,示波器抓波形發現讀取數據都正確,說明這2種時序都是正確的。

  I2C總線的讀寫時序比較固定,設備通信嚴格遵循協議,因此I2C總線設備驅動程序的編寫也就相對簡單一些。

  主要應用的I2C總線設備有touchscreen rtc 外擴io等

  SPI總線

  SPI--Serial Peripheral Interface,串行外圍設備接口,是Motorola公司推出的一種同步串行通訊方式,是一種三線同步總線,因其硬體功能很強,與SPI有關的軟體就相當簡單,使CPU有更多的時間處理其他事務。

  SPI通常有SCK時鐘,STB片選,DATA數據信號三個信號。 I2C通常有 SDA數據和SCL時鐘兩個信號。

  SPI總線真正實現了全雙工數據傳輸,SPI 有3線跟4線兩種,4線的話,就是多了一條叫SDC的線,用來告知從設備現在傳輸的是數據還是指令。這個接口較快,可以傳輸較連續的數據。SPI要想連接多個從設備,就需要給每個從設備配備一根片選信號。如果要可以實現全雙工,也是需要多加一根數據線(MOSI MISO)。

  也就是說SPI總線是通過片選來選擇從設備。

  spi總線速度要比I2C要快,我們開發板最快能達到30MHZ。

  spi總線特點:

  1. 採用主-從模式(Master-Slave) 的控制方式

  SPI 規定了兩個 SPI 設備之間通信必須由主設備 (Master) 來控制次設備 (Slave)。 一個 Master 設備可以通過提供 Clock 以及對 Slave 設備進行片選 (Slave Select) 來控制多個 Slave 設備, SPI 協議還規定 Slave 設備的 Clock 由 Master 設備通過 SCK 管腳提供給 Slave 設備, Slave 設備本身不能產生或控制 Clock, 沒有 Clock 則 Slave 設備不能正常工作。

  2. 採用同步方式(Synchronous)傳輸數據

  Master 設備會根據將要交換的數據來產生相應的時鐘脈衝(Clock Pulse), 時鐘脈衝組成了時鐘信號(Clock Signal) , 時鐘信號通過時鐘極性 (CPOL) 和 時鐘相位 (CPHA) 控制著兩個 SPI 設備間何時數據交換以及何時對接收到的數據進行採樣, 來保證數據在兩個設備之間是同步傳輸的。

  3. 數據交換(Data Exchanges)

  SPI 設備間的數據傳輸之所以又被稱為數據交換, 是因為 SPI 協議規定一個 SPI 設備不能在數據通信過程中僅僅只充當一個 「發送者(Transmitter)」 或者 「接收者(Receiver)」。 也就是說是全雙工的,在每個 Clock 周期內, SPI 設備都會發送並接收一個 bit 大小的數據, 相當於該設備有一個 bit 大小的數據被交換了。

  一個 Slave 設備要想能夠接收到 Master 發過來的控制信號, 必須在此之前能夠被 Master 設備進行訪問 (Access)。 所以, Master 設備必須首先通過 SS/CS pin 對 Slave 設備進行片選, 把想要訪問的 Slave 設備選上。

  在數據傳輸的過程中, 每次接收到的數據必須在下一次數據傳輸之前被採樣。 如果之前接收到的數據沒有被讀取, 那麼這些已經接收完成的數據將有可能會被丟棄, 導致 SPI 物理模塊最終失效。 因此, 在程序中一般都會在 SPI 傳輸完數據後, 去讀取 SPI 設備裡的數據, 即使這些數據(Dummy Data)在我們的程序裡是無用的。

  具體spi工作原理可以看博客另外一篇文章

  SPI和I2C是2種不同的通信協議,現在已經廣泛的應用在IC之間的通信中。並且不少單片機已經整和了SPI和I2C的藉口。但像51這種不支持SPI和I2C的單片機,也可以用模擬時鐘的工作方式進行SPI和I2C的通信的。

  下面主要總結一下2種總線的異同點:

  1 I2C總線不是全雙工,2根線SCL SDA。spi總線實現全雙工,4根線SCK CS MOSI MISO

  2 I2C總線是多主機總線,通過SDA上的地址信息來鎖定從設備。spi總線只有一個主設備,主設備通過CS片選來確定從設備

  3 I2C總線傳輸速度在100kbps-4Mbps。spi總線傳輸速度更快,可以達到30MHZ以上。

  4 I2C總線空閒狀態下SDA SCL都是高電平。spi總線空閒狀態MOSI MISO也都是 SCK是有CPOL決定的

  5 I2C總線scl高電平時sda下降沿標誌傳輸開始,上升沿標誌傳輸結束。spi總線cs拉低標誌傳輸開始,cs拉高標誌傳輸結束

  6 I2C總線是SCL高電平採樣。spi總線因為是全雙工,因此是沿採樣,具體要根據CPHA決定。一般情況下master device是SCK的上升沿發送,下降沿採集

  7 I2C總線和spi總線數據傳輸都是MSB在前,LSB在後(串口是LSB在前)

  8 I2C總線和spi總線時鐘都是由主設備產生,並且只在數據傳輸時發出時鐘

  9 I2C總線讀寫時序比較固定統一,設備驅動編寫方便。spi總線不同從設備讀寫時序差別比較大,因此必須根據具體的設備datasheet來實現讀寫,相對複雜一些。

打開APP閱讀更多精彩內容

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

相關焦點

  • 樹莓派怎樣連接多個I2C設備
    步驟2:案例1:I2c設備具有相同的地址 這始終是有問題的情況。i2c總線可以處理多個設備,但是它們應具有不同的i2c地址。有些i2c設備具有用於設置其他i2c地址的跳線,但許多設備卻沒有。在這種情況下,您可以使用i2c多路復用器(硬體)來旋轉i2c SDA(數據)和SCL(時鐘),也可以創建其他i2c總線或更多。
  • 救活你的I2C總線故障方案出爐了!
    如果這麼一個簡單的東西,有時候想要的結果死活不出來,反覆的檢查問題的原因,查詢解決辦法,核查設備的數據手冊,甚至發送和接收的每一條命令與數據都知道是什麼意思,仍然無法解決問題,那該怎麼辦呢? 一、i2c 基本用法 i2c 總線是一種簡單、雙向二線制同步串行總線。所有主機在 SCL 線上產生它們自己的時鐘來傳輸總線上的報文,SDA 線傳輸每個字節必須為 8 位,每次傳輸可以發送的字節數量不受限制,每個字節後必須跟一個響應位。在空閒狀態時,SCL 與 SDA 均為高電平。
  • Linux下I2C總線EEPROM驅動程序設計方法
    而一個具體的總線控制器驅動要使用某一種算法。例如,Linux內核中提供的算法i2e-algo-8260可以用在MPC82xx系列處理器提供的I2C總線控制器上。Linux內核中提供了一些常見處理器如MPC82xx系列的算法驅動。對於I2C設備,基本上每種具體設備都有自己的基本特性。其驅動程序一般都需要特別設計。  在I2C總線驅動程序體系結構中。
  • 淺談I2C總線,I2C接口和SPI接口的作用相同
    I2C 總線有時候也叫作 IIC,它已有20多年的歷史了。I2C 接口和 SPI 接口的作用相同,但二者的使用方法有些不同。  I2C 總線用兩根線來連接多支路總線中的多個設備。這種總線是雙向、低速的,並與公共時鐘同步。可以直接將一個設備接到 I2C 總線上或是從該總線上取下,而不會影響其他設備。
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    在主從通信中,可有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。與I2C總線相連的從設備主要有微控制器、EEPROM、實時時鐘、A/D轉換器等。
  • 飛利浦推出業界首款快速模式I2C總線控制器
    飛利浦半導體專用邏輯產品線總經理Pierre-Yves Lesaicherre說:「從計算應用到聯網和通信領域的大多數電子平臺中,I2C及SMBus已經成為維護、控制和配置的實際標準串行總線。我們新推出的PCA9564 I2C總線控制器產品在成熟的技術中有重大創新,能夠使電子製造商通過任何處理器或微控制器與I2C或SMBus連接,達到比以往更高的速度和更低的電壓。」
  • 示波器和I2C時序波形圖的關係分析
    示波器和I2C時序波形圖的關係分析 周碧俊 發表於 2018-08-03 16:57:53 I2C簡介 I2C總線只需要兩條線
  • I2C總線概述及時序總結
    其中輸出為漏極開路的場效應管,輸入緩衝為一隻高輸入阻抗的同相器,這種電路具有兩個特點:1)由於SDA、SCL為漏極開路結構(OD),因此它們必須接有上拉電阻,阻值的大小常為 1k8, 4k7 and 10k ,但1k8 時性能最好;當總線空閒時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線與關係。
  • I2C總線是如何工作的
    打開APP I2C總線是如何工作的 發表於 2019-09-13 15:46:00   I2C總線簡介   I2C結合了SPI和UART的優點。
  • I2C總線設計注意事項
    當時在使用avr CPU設計數據採集器產品的CPU主板,外掛了Silicon lab的溫溼度傳感器Si7013,實時時鐘,主要實現溫溼度、時鐘及電流電壓等信號通過I²C總線到達CPU進行處理,並且由MCU EFM32WG290F64控制在液晶上和上位機界面上的CPU自帶的I²C總線外掛的六個I²C從設備,如下圖1所示。
  • 串口、COM口、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1...
    電子產品,如電腦,滑鼠,充電器,包括汽車等,在我們的身邊有很多接口,帶你認識這些接口,知道長什麼樣子,用在什麼地方,怎麼用,原理是什麼?這篇文章僅僅作為簡單描述,入門級。 2、公頭和母頭   有公頭和母頭之分,大家可以自行記憶,左邊有孔的為母頭,另外一個就為公頭。
  • SPI簡介:SPI有幾根線?SPI通信原理是什麼?
    從字面意思看就是串行外部設備接口,是一種全雙工、高速、同步的通信總線。SPI最早是摩託羅拉公司開發的全雙工同步串行總線,用於微控制器(MCU)連接外部設備之間的同步串行通信,主要應用於Flash、數模轉換器、信號處理器、控制器、EEPROM存儲器等外設中。
  • I2C總線中上拉電阻、電源電壓、總線電容三者之間的
    連接到正的電源電壓+VDD,當總線空閒時這兩條線路都是高電平。連接到總線的器件輸出級必須是漏極開路或集電極開路才能執行線與的功能。I2C 總線上數據的傳輸位速率,在標準模式下可達100kbit/s,快速模式(F/S)下可達400kbit/s,高速模式(Hs)下可達3.4Mbit /s。2、連接到相同總線的IC數量只受到總線的最大電容400pF限制。如果總線線路的負載電容升高,位速率將逐漸下降。
  • I2C總線驅動在嵌入式系統中的兩種實現
    他通過串行數據線(Serial Data Lines,SDL)及串行時鐘線(Serial ClockLine,SCL)兩線在連接到總線上的器件之間傳送信息,並根據地址識別每個器件。一個或多個微控制器以及外圍器件可以通過I2C總線接口非常方便的連接在一起構成系統。這種總線結構的連線和連接引腳少,器件間總線簡單。
  • UART/I2C/SPI/1-wire四大通信接口的神解釋
    因為沒有時鐘控制,什麼時機開始發數據,且保證對方正確接收?如A發數據到B,平時空閒時A.TX和B.RX.保持1,當A.TX先發0作為起始位,告訴B請注意,我要發數據了。然後就開始發數據,數據位可配置,通常是5位,6位,7位,8位,一幀數據發完後,A.TX給個高電平告訴B.RX我發完了一幀。
  • 基於VHDL/CPLD的I2C串行總線控制器設計及實現
    常見的串行總線有USB、IEEE1394、I2C等,其中I2C總線具有使用簡單的特點,在單片機、串行E2PROM、LCD等器件中具有廣泛的應用。  I2C(Inter IC BUS)是Philips公司開發的用於晶片之間連接的總線。
  • 詳解I2C總線鍵盤電路以及驅動程序設計
    一、概述本文引用地址:http://www.eepw.com.cn/article/201808/385782.htm本文介紹一種採用MAX7348 的串行I2C 總線的鍵盤電路
  • PROFIBUS–DP與PROFIBUS-PA總線的區別解析
    打開APP PROFIBUS–DP與PROFIBUS-PA總線的區別解析 發表於 2018-01-25 16:50:02 總線循環時間必須要比主站(PLC)程序循環時間短。除周期性用戶數據傳輸外,PROFIBUS-DP還提供智能化設備所需的非周期性通信以進行組態。診斷和報警處理。
  • 什麼叫總線?總線可分為哪幾種?採用總線結構有什麼好處?
    總線是用於傳送信息的公共途徑。總線可以分為數據總線DB(Data Bus)、地址總線AB(Address Bus)和控制總線CB(Control Bus)。總線把微處理器(CPU)、存儲器、I/O接口連接在一起。採用總線結構,可以減少信啟傳輸線的根數,提高系統的可靠性,增加系統的靈活性。