RM新时代网站-首页

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

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

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

詳解I2C總線與SPI總線的區(qū)別

路科驗證 ? 來源:汽車電控知識 ? 2024-10-16 15:16 ? 次閱讀

以下文章來源于汽車電控知識,作者安己樂人

I2C(Inter-Integrated Circuit)表示集成電路互連,是一種用于線路板內(nèi)部芯片之間通信的總線。

I2C總線的引腳和導線的數(shù)量很少,簡化了布線空間,極大的方便了芯片設(shè)計和應用。

同樣可以用于板內(nèi)芯片間串行通信的還有SPI總線《為什么說SPI總線的數(shù)據(jù)傳輸與眾不同?》,它們之間有什么區(qū)別呢?

1.物理接口

1.1全雙工與半雙工

SPI總線有4根線,串行數(shù)據(jù)線MOSI和MISO、串行時鐘線SCK和從設(shè)備選擇SS。

wKgZomcPaJGAQyOUAAAnCO3Y4vo410.jpg

SPI總線接口1對1原理框圖

而I2C總線僅需要兩條線就可以實現(xiàn)芯片之間的互連通信,這兩根線分別為串行數(shù)據(jù)線SDA和串行時鐘線SCL。

wKgZomcPaLWAZWUNAAAinLmj3lE371.png

I2C總線接口1對1原理框圖

通過接口對比可以看出,SPI有2個數(shù)據(jù)線MOSI和MISO,而I2C只有1個數(shù)據(jù)線SDA。

SPI的2個數(shù)據(jù)線分別用于發(fā)送和接收,所以可以實現(xiàn)全雙工的通信,所謂的雙工就是指可以在發(fā)送與接收兩個方向上傳輸數(shù)據(jù),全雙工就是可以同時進行收發(fā)。

而I2C只用1根數(shù)據(jù)線,也可以實現(xiàn)兩個方向的傳輸,但是同一時刻只能進行收或發(fā),不能同時進行,因此I2C是一種半雙工的通信方式。

這里要說明一下,I2C的新版協(xié)議已經(jīng)將術(shù)語主機和從機更改為控制器和目標,我們這里為了方便理解它的原理,還是用主機和從機的描述。

1.2上拉電阻

SPI總線是信號直接相連,外部不需要上拉電阻。

而I2C總線中的SDA和SCL,都必須通過上拉電阻連接到電源電壓。這是因為I2C設(shè)備內(nèi)部輸出電路為開漏(OD)輸出或開集電極(OC)輸出,無法提供高電平輸出,所以要在總線上外接上拉電阻,目的就是用來給總線上的時鐘或數(shù)據(jù)提供高電平。

wKgZomcPaLyABUBFAADTfRRYyUg253.png

R1和R2為外部上拉電阻

1.3硬件尋址與軟件尋址

SPI的SS信號用于主設(shè)備選擇從設(shè)備,當有多個從設(shè)備時,主設(shè)備通過SS信號線來使能需要通信的從設(shè)備,通過硬線信號實現(xiàn)片選的功能,這稱為硬件尋址。

而I2C沒有類似SS這樣的硬線信號,它使用的是設(shè)備地址,設(shè)備地址是個7位的數(shù)據(jù),包括器件類型和地址碼,主設(shè)備通過數(shù)據(jù)線中的地址數(shù)據(jù)來實現(xiàn)片選功能,也就是軟件尋址。

此外,SPI的速率與SCK時鐘頻率有關(guān);I2C的傳輸速率不僅與SCL時鐘頻率有關(guān),還與工作模式有關(guān),8位的串行雙向數(shù)據(jù)傳輸速率在標準模式下最高可達100 kbit/s,在快速模式下最高可達400 kbit/s,在快速增強模式下最高可達1 Mbit/s,在高速模式下最高可達3.4 Mbit/s。8位的單向數(shù)據(jù)傳輸,在超快速模式下最高可達5 Mbit/s。

2.主從模式

SPI采用主從模式,主設(shè)備通過提供 SCK(Clock)和SS (SlaveSelect)來控制多個從設(shè)備,從設(shè)備的 Clock 由主設(shè)備通過 SCK 管腳提供。

當有多個從設(shè)備的時候,主設(shè)備會分配給每個從設(shè)備一個片選信號,當主設(shè)備和某個從設(shè)備進行通信時,需要將從設(shè)備對應的片選引腳電平拉低。

wKgZomcPaMaAPyCYAAA6p5T2OjY844.png

SPI總線1主3從原理框圖

與SPI總線相似,I2C采用的也是主從模式。從設(shè)備的 Clock 由主設(shè)備通過 SCL 管腳提供。

當有多個從設(shè)備的時候,每個設(shè)備,包括主設(shè)備都有一個唯一的設(shè)備地址,主設(shè)備在通信時通過SDA發(fā)送地址數(shù)據(jù)來選擇對應的從設(shè)備。

與SPI不同的是,I2C是一種多主總線,也就是在總線上可以連接多個主設(shè)備,這些主設(shè)備都可以發(fā)起對總線的控制。

wKgZomcPaOOAKFaBAAA7UJhhmPI441.png

I2C總線2主2從原理框圖

所以I2C的主從關(guān)系不是固定的,它會根據(jù)功能需要,在通信過程中動態(tài)變化。

I2C總線可以是多主模式,動態(tài)變化

2.1仲裁

主從模式中的一主多從在整個周期中都是由主設(shè)備來控制時序和進程,不會有控制權(quán)沖突的現(xiàn)象。

但是多主模式在多個設(shè)備同時控制發(fā)送時就會產(chǎn)生沖突,因為總線上同一個時刻,只能有一個主設(shè)備獲得控制權(quán),所以I2C總線必須還要有個發(fā)生沖突時的仲裁機制,以確定最終由哪個主機控制總線并完成其傳輸。

I2C的仲裁機制是如果兩個或多個主機同時發(fā)送數(shù)據(jù),一個主機發(fā)送“0”,另一個主機發(fā)送“1”時,發(fā)送“0”的主機獲得控制權(quán),發(fā)送“1”的主機將失去仲裁。

從總線電平來看,就是當總線上只要有一個設(shè)備輸出低電平,整條總線便處于低電平狀態(tài),這也稱為線與邏輯。

2.2時鐘同步

當總線為空閑狀態(tài)時,SDA和SCL兩條線路一定都是高電平。

在總線空閑時,兩個主機可以同時啟動傳輸,必須有一種方法來決定由哪一個主機來控制總線并完成傳輸。這是通過時鐘同步和仲裁兩個步驟來完成的。

wKgZomcPaPCAPeIDAAE4BAYIE0U766.png

I2C總線時鐘同步

如上圖所示,時鐘同步就是通過SCL接口和SCL總線之間的“線與”連接來執(zhí)行的。

主機一的SCL接口檢測到總線上由高電平到低電平的轉(zhuǎn)換時,便拉低自己的SCL,并開始倒計時應有的SCL低電平保持時間,直到應有的低電平時間結(jié)束,會把SCL時鐘拉到高電平狀態(tài)。

如果另一個主機二的SCL時鐘仍然處于低電平周期內(nèi),則主機一的SCL時鐘由低到高的轉(zhuǎn)換不會改變SCL總線為低電平的狀態(tài),主機一的SCL時鐘會進入高電平等待狀態(tài)。因此,SCL總線會被具有最長低電平周期的主機保持在低電平。

當所有的主機都已完成自身低電平周期的計時時,SCL時鐘總線會被釋放并變?yōu)楦唠娖?。主機SCL接口和SCL總線的狀態(tài)之間保持一致,都為高電平。所有主機開始計算它們的高電平周期。第一個完成高電平周期的主機再次將SCL線拉低。

這樣,就產(chǎn)生了同步的SCL總線時鐘,其低周期由具有最長時鐘低周期的主機確定,其高周期由具有最短時鐘高周期的主機確定,這樣大家就統(tǒng)一了時鐘的時序。

2.3 仲裁過程

I2C的端口內(nèi)部電路是可以支持回讀的,就是SCL和SDA端口每次輸出電平后,會立即回讀,用來判斷自己的輸出是否與總線一致。

具體的仲裁過程由SCL和SDA一起配合來完成,SCL負責完成時鐘同步。SDA負責數(shù)據(jù)仲裁。

仲裁是在SDA線上按位地進行的。當SCL為高電平時,每個主機各自判斷自己SDA線輸出的電平是否與SDA總線電平一致,如果不一致,則該主機仲裁失敗,失去對總線的控制權(quán),需要停止輸出。另一個主機贏得仲裁獲取對總線的控制權(quán),繼續(xù)完成它的數(shù)據(jù)傳輸。

wKgaomcPaP6ATvJvAAEMUFd4s3M122.png

I2C總線仲裁

仲裁失敗的主機可以在總線空閑時重新發(fā)起仲裁。但是如果一個主機也具有從機的功能,并且在尋址階段仲裁失敗,則該主機必須立即切換到從機模式,便于主機與其通信。

I2C總線的仲裁有點類似于CAN的沖突檢測機制,但是I2C總線的控制是由各個競爭主機發(fā)送的地址和數(shù)據(jù)決定,它并沒有CAN ID的優(yōu)先級概念。

3.I2C總線狀態(tài)

I2C總線有四種狀態(tài):空閑、啟動、忙碌、停止。

當總線為空閑狀態(tài)時,SDA和SCL兩條線路一定都是高電平。

所有的傳輸通信都是以啟動(Start)開始,以停止(Stop)結(jié)束。當SCL為高電平時,SDA線上的高電平到低電平轉(zhuǎn)換表示啟動條件S。當SCL為高電平時,SDA線上的低電平到高電平轉(zhuǎn)換表示停止條件P。

wKgaomcPaQmAbFgwAABsefupnzs191.png

啟動條件和停止條件

啟動和停止都是由主機發(fā)起。在啟動發(fā)起之后,總線被認為是忙碌的。在停止發(fā)起后總線被認為是空閑的。

4.SDA數(shù)據(jù)有效性

在串行時鐘SCL線的高電平期間,SDA線的“高電平”或者“低電平”狀態(tài)必須保持穩(wěn)定,此時SDA線上穩(wěn)定的“高電平”或“低電平”就是有效數(shù)據(jù)“1”或者“0”。

SDA的數(shù)據(jù)改變,也就是電平狀態(tài)改變,只能在SCL線的低電平期間進行。串行時鐘SCL每產(chǎn)生一個高電平脈沖,串行數(shù)據(jù)SDA線就傳輸一位有效數(shù)據(jù)。

wKgaomcPaROACs8SAACJoEuEHe8107.png

SDA數(shù)據(jù)在SCL高時有效

SDA線在SCL線的低電平期間改變數(shù)據(jù)(改變電平),更改完成后,SCL線由低電平變?yōu)楦唠娖讲⒈3址€(wěn)定,此時SDA線的穩(wěn)定電平就是有效數(shù)據(jù)。

5.數(shù)據(jù)傳輸格式

總線啟動后,串行數(shù)據(jù)SDA線上每次傳輸1個字節(jié)(8位),每個字節(jié)后必須跟隨1個應答位,可以連續(xù)傳輸多次,即多個字節(jié)。

數(shù)據(jù)首先從最高有效位(MSB)開始。如果從機由于內(nèi)部繁忙,無法立即接收或發(fā)送下一個字節(jié)的數(shù)據(jù),從機可以拉低時鐘線SCL,使主機進入等待狀態(tài),直到從機做好準備后,再釋放時鐘線SCL,繼續(xù)接收或發(fā)送數(shù)據(jù)。

wKgZomcPaRuAPfm_AADRWgtBsnY905.png

I2C總線數(shù)據(jù)傳輸格式

應答(ACK)發(fā)生在每個字節(jié)之后,是接收器向發(fā)送器發(fā)送的確認信號,表示該字節(jié)成功接收。

應答信號是在第9個應答時鐘脈沖SCL保持高電平期間,發(fā)送器釋放SDA線(高電平),接收器拉低SDA線。主機或從機收到ACK應答信號后,可以繼續(xù)進行接下來的傳輸,否則主機會中止傳輸或重新啟動傳輸。

5.1 從機地址和R/W位

主機在啟動后,發(fā)送從機地址,該地址為7位長度。后面第8位是數(shù)據(jù)傳輸方向位,邏輯“1”代表讀R,邏輯“0”代表寫W,讀表示接下來的數(shù)據(jù)由從機發(fā)送給主機,寫表示接下來的數(shù)據(jù)由主機發(fā)生給從機。

wKgZomcPaSiAVZWnAADJ2mMTau4280.png

數(shù)據(jù)傳輸示例

在傳輸中,讀/寫格式有不同的組合,比如寫數(shù)據(jù)時主機發(fā)送器向從機接收器發(fā)送信號。傳輸方向不變,從機接收器確認每個字節(jié)。

wKgZomcPaTGAIimcAAChwwOA_H8764.png

主機向從機寫數(shù)據(jù)

與寫對應的就是讀數(shù)據(jù),讀數(shù)據(jù)時主機在發(fā)送完第一個目標地址字節(jié)后立即讀取從機。在第1次應答(ACK)后,主機發(fā)送器變成主機接收器,從機接收器變成從機發(fā)送器。

wKgaomcPaUaAbtt6AACf1hC_8n4624.png

主機向從機讀數(shù)據(jù)

這里的第1應答是由從機產(chǎn)生,后續(xù)的應答是由主機產(chǎn)生。停止信號由主機產(chǎn)生,主機在發(fā)起停止信號之前先給從機發(fā)送一個不應答(NACK)信號。

還有一種方式,就是讀和寫的混合模式,在傳輸過程中改變讀寫方向時,啟動信號和從機地址都會重復,R/W位會反轉(zhuǎn)。如果主機接收器要發(fā)送重啟信號,它就在重啟之前發(fā)送不應答(NACK)。

wKgZomcPaVGAZmdKAAEJ-wh5iI8661.png

主機向從機讀、寫數(shù)據(jù)

大多數(shù)I2C總線的從機設(shè)備具有7位從機地址編碼,所以理論上總線可以連接128個從機設(shè)備;為連接更多設(shè)備,I2C規(guī)范又增加了10位地址編碼的從機設(shè)備,使從機設(shè)備可以擴展到1024個。

5.2 特殊保留地址

地址編碼中除了用于表示每個芯片的目標地址,還有8個特殊地址編碼,作為特殊保留地址。

wKgZomcPaVuAINSgAACnO_zp6e0442.png

特殊保留地址

我們主要介紹下其中的廣播地址,廣播呼叫地址(0000 0000)用于主機同時尋址連接到I2C總線的所有從機。

主機啟動I2C總線后,第一字節(jié)首先發(fā)送廣播呼叫地址(0000 0000),如果某些從機不需要被呼叫尋址,它可以通過不應答(NACK)來忽略這個地址。如果某些設(shè)備確實需要傳輸數(shù)據(jù),它就發(fā)送應答(ACK)信號來確認這個地址并作為一個從機接收器。如果一個或多個從機做出應答響應,主機實際上并不知道有多少從機進行了應答。第二個字節(jié)及以后的字節(jié)由每個能夠處理該數(shù)據(jù)的從機接收器接收并確認。不能處理這些字節(jié)的從機可以通過不應答(NACK)來忽略它。

wKgaomcPaWiAV6pwAADWp7J3VdY971.png

廣播呼叫地址格式

主機發(fā)送的第2個字節(jié)是控制地址,是表示呼叫目的和含義的字節(jié),其具體含義如下

當?shù)?字節(jié)第8位B=0時,常使用兩種控制地址:

1.控制地址=0000 0110(06h):從機復位和寫數(shù)據(jù)到從機內(nèi)部存儲空間。從機接收到第一字節(jié)和本字節(jié)后,被尋址的所有從機復位,并接收主機接下來發(fā)送的數(shù)據(jù),存入自己內(nèi)部存儲空間。

2.控制地址=0000 0100(04h):寫數(shù)據(jù)到從機內(nèi)部存儲空間。過程如上,但不會復位硬件。

當?shù)?字節(jié)的第8位B=1時,前7位表示主機自己的地址,這中廣播地址表示“硬件廣播”。

wKgZomcPaXSAfxfwAADYgz_oZpI907.png

廣播呼叫地址第2字節(jié)第8位B=1

從機接收到第1字節(jié)和控制地址后,被尋址的所有從機將第2字節(jié)的前7位標識備案為主機的地址。這個地址的作用就是向所有設(shè)備發(fā)送自身的設(shè)備地址。

6.小結(jié)

I2C是一種串行、高速的半雙工通信總線,它只用SCL和SDA兩根線就可以實現(xiàn)控制時鐘信號和數(shù)據(jù)信號的傳輸。I2C雖然與SPI都是主從模式,但它可以允許多主模式,通過時鐘同步、回讀檢測和仲裁可以防止總線錯誤和沖突!

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

    關(guān)注

    454

    文章

    50646

    瀏覽量

    422913
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8556

    瀏覽量

    150985
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2875

    瀏覽量

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

    關(guān)注

    28

    文章

    1483

    瀏覽量

    123546
  • SPI總線
    +關(guān)注

    關(guān)注

    4

    文章

    103

    瀏覽量

    27584

原文標題:I2C與SPI總線有什么區(qū)別?

文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    I2C總線原理詳解

    I2C兩線式串行總線通訊協(xié)議,它是由飛利浦開發(fā)的,主要用于連接微控制器及其外圍設(shè)備之間,它是由數(shù)據(jù)線SDA和信號線SCL構(gòu)成的,可發(fā)送和接收數(shù)據(jù)即在MUC和I2C設(shè)備之間,I2C
    發(fā)表于 10-18 17:20 ?2330次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>原理<b class='flag-5'>詳解</b>

    i2c總線ppt(I2C總線器件應用)

    I2C總線器件應用第一節(jié) I2C總線器件應用概述I2C總線工作原理
    發(fā)表于 08-13 17:34 ?0次下載

    i2c總線的特點

    i2c總線的特點:2 I2C 總線使設(shè)計人員和廠商都得益.. 3 2.1 設(shè)計人員的得益.. 4 2.2 廠商的得益. 5
    發(fā)表于 08-05 09:05 ?26次下載

    什么是i2c總線

    什么是i2c總線  下載請點擊: i2c總線協(xié)議中文版 
    發(fā)表于 11-05 09:26 ?2919次閱讀

    I2C總線詳解

    I2C總線定義  I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控
    發(fā)表于 06-30 11:09 ?3836次閱讀

    基于CPLD的I2C總線接口設(shè)計

    在電路設(shè)計中,I2C總線是比較常用的兩線式串行通信方式,大多數(shù)的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備I2C
    發(fā)表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口設(shè)計

    SPI總線I2C總線工作原理

    SPI總線I2C總線工作原理,本內(nèi)容詳細介紹了SPI總線
    發(fā)表于 12-08 16:55 ?0次下載

    基于51的I2c總線

    I2c總線,基于51的I2c總線,程序?qū)W習。快來下載學習吧
    發(fā)表于 01-13 11:49 ?34次下載

    CAN、I2S、I2C、SPI、SSP總線的介紹和比較

    CAN、I2S、I2CSPI、SSP總線的介紹和比較。
    發(fā)表于 07-14 16:20 ?53次下載

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別
    發(fā)表于 07-17 17:23 ?0次下載

    spii2c總線有什么區(qū)別

    SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫。I2C總線是一個真正的多主機總線,總線上多個主機初始化
    發(fā)表于 12-06 11:39 ?4.1w次閱讀
    <b class='flag-5'>spi</b>與<b class='flag-5'>i2c</b><b class='flag-5'>總線</b>有什么<b class='flag-5'>區(qū)別</b>

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

    SDA 和 SCL 都是雙向的。SPI 總線有兩根單獨的線,分別用于兩個方向的通信,而 I2C 總線不同,它使用同一根線來完成主機發(fā)送數(shù)據(jù)和接收從機響應。另外,與
    的頭像 發(fā)表于 03-21 10:24 ?2.5w次閱讀
    淺談<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>,<b class='flag-5'>I2C</b>接口和<b class='flag-5'>SPI</b>接口的作用相同

    I2C串行總線協(xié)議是什么?I2C總線有哪些優(yōu)點?

    I2C串行總線協(xié)議是什么?I2C總線有哪些優(yōu)點? I2C(Inter-Integrated Circuit)是一種串行
    的頭像 發(fā)表于 09-12 11:18 ?1629次閱讀

    I2CSPI與UART:如何布局這些通用總線

    ,UART等協(xié)議與下游MCU或可編程IC進行接口。I2C總線,SPI總線和UART總線之間的區(qū)別
    的頭像 發(fā)表于 11-08 17:33 ?1091次閱讀
    <b class='flag-5'>I2C</b>與<b class='flag-5'>SPI</b>與UART:如何布局這些通用<b class='flag-5'>總線</b>

    藍牙串口通訊總線——I2C/SPI/UART

    嵌入式工程師在做串口通信調(diào)試工作的時候,會經(jīng)常用到I2C、SPI、UART這3條總線,I2CSPI、UART這三種通信
    的頭像 發(fā)表于 01-22 09:41 ?1576次閱讀
    藍牙串口通訊<b class='flag-5'>總線</b>——<b class='flag-5'>I2C</b>/<b class='flag-5'>SPI</b>/UART
    RM新时代网站-首页