1. 程式人生 > >i2c和spi通訊協議的特點及區別

i2c和spi通訊協議的特點及區別

一、i2c匯流排

i2c是由Philips公司提出的雙線多主機、同步、半雙工、序列低速率、非差分訊號的通訊匯流排。廣泛應用於傳輸速率要求不高、傳輸距離短的場合,最大優勢是可以在總線上擴充套件多個外圍裝置的支援。如soc外部的各外圍裝置與soc之間的通訊,常見的各種物聯網感測器晶片(如gsensor、溫度、溼度、光強度、酸鹼度、煙霧濃度、壓力等)均使用I2C介面和主SoC進行連線。

雙線多主機:i2c由SCL同步時鐘線以及SDA資料傳輸線兩天通訊線構成(不算地線的話),其通訊雙方有主從之分,且通訊由主機主導,從機只是被動響應。SCL匯流排提供同步時鐘,由通訊主機發起,SDA線為資料匯流排,用以傳輸資料,這兩條匯流排在空閒狀態下都是高電平(這是因為其電路結構為開漏輸出的漏極通過上拉電阻接電源,因此空閒時均為高電平)。一個i2c匯流排結構中可以同時掛接多個機器,每個機器都並聯在SCL和SDA上,每一個機器都可以成為主機/從機,但匯流排在同一個時間點上只能被通訊的兩個主、從機器所佔用,其他機器就處於等待狀態。

同步:主從機通訊是要在SCL訊號下保持同步的,因此為同步通訊。

半雙工:通訊時主機既可以向從機寫,也可以從從機讀,但是由於只有一條資料線,所以讀寫操作不可能同時進行,只能通過分時複用的方式,因此不是全雙工,而是半雙工。

序列低速率:SDA資料線上每次允許傳送的資料長度為8位1位元組,每傳送一位元組資料,資料是依次一位傳輸的,一個位元組資料中高位在前,低位在後,為序列通訊,通訊速率較慢,一般為幾百kbps,高速模式下也只能達到3.4Mbps。

非差分訊號:因為I2C通訊速率不高,而且通訊雙方距離很近,所以使用電平訊號通訊。

通訊的一些機制:

1、唯一地址標識

每一個接入i2c匯流排的裝置都有唯一地址識別符號,由7位二進位制數表示。當主機要與目標裝置通訊時就會廣播目標地址,其他裝置會將目標地址與自身地址相比較,匹配者需要傳送應答訊號以告知主機,其他裝置則處於等待狀態。

2.有效訊號機制

i2c通訊協議規定,當SCL訊號處於高電平時,SDA資料線上的資料是有效資料,此時不允許更改SDA上的資料訊號,當SCL訊號處於低電平時,才允許改變SDA上的資料訊號。

3.起始、停止訊號與應答機制

主機負責傳送通訊起始與停止訊號以啟動、停止本次通訊。起始訊號為:SCL處於高電平時,SDA上的訊號經歷一個由高到低的跳變,這標識著本次通訊開始;SCL處於低電平時,SDA上的訊號經歷一個由低到高的跳變,這標識著本次通訊停止。在主機發出通訊開始訊號後,緊接著會發送由7位目標地址與一位讀寫(0為寫,1為讀)控制位組成的8位資料,其他非主機會將目標地址與自身地址相比較,比較匹配者即為此次通訊的從機方,從機要通過SDA線向主機發送一位資料的應答位(拉低SDA線),然後開始通訊,每次傳送方傳送一位元組長度的資料給接收方,接收方接受後要傳送一位應答位給傳送方。

4、仲裁機制

當同時有多個裝置傳送資料時,有可能出現匯流排資源搶佔現象,此時i2c的線路結構就決定了傳送低電平的裝置有效,因為此時傳送的高電平是無法顯現的,所以傳送高電平的裝置將被隱藏,其資料無效,傳送地電平有效。

二、spi匯流排

spi匯流排協議是由摩托羅拉公司發起的四線單主機、同步、序列、全雙工、較高傳輸速率的傳輸協議。

四線單主機:spi通訊由SCLK同步時鐘線、MISO、MOSI資料線以及ss片選線構成,其通訊雙方有主從之分,通訊由主裝置引導,從裝置被動響應,且只有一臺裝置可作為主裝置,其他裝置均為從裝置,每次通訊主裝置通過片選線來確定從裝置。

同步:主從裝置間的通訊要和SCLK同步時鐘訊號保持同步,SCLK訊號由主裝置發出。因此為同步傳輸。

序列:spi通訊時每次傳輸8位一位元組長度的資料,高位在前,地位在後,為序列通訊。

全雙工:spi通訊中有兩條資料線,MISO和MOSI,可以實現主、從機同時傳送、接受資料,因此是全雙工的。當SPI主裝置想讀/寫[從裝置]時,它首先拉低[從裝置]對應的SS線(SS是低電平有效),接著開始傳送工作脈衝到時鐘線上,在相應的脈衝時間上,[主裝置]把訊號發到MOSI實現“寫”,同時可對MISO取樣而實現“讀”。

spi通訊和i2c通訊相比,傳輸速度較快,一般可達Mbps。

 SPI有四種操作模式——模式0、模式1、模式2和模式3,它們的區別是定義了在時鐘脈衝的哪條邊沿轉換(toggles)輸出訊號,哪條邊沿取樣輸入訊號,還有時鐘脈衝的穩定電平值(就是時鐘訊號無效時是高還是低)。每種模式由一對引數刻畫,它們稱為時鐘極(clock polarity)CPOL與時鐘期(clock phase)CPHA。

[主從裝置]必須使用相同的工作引數——SCLK、CPOL 和 CPHA,才能正常工作。如果有多個[從裝置],並且它們使用了不同的工作引數,那麼[主裝置]必須在讀寫不同[從裝置]間重新配置這些引數。以上SPI匯流排協議的主要內容。SPI不規定最大傳輸速率,沒有地址方案;SPI也沒規定通訊應答機制,沒有規定流控制規則。事實上,SPI[主裝置]甚至並不知道指定的[從裝置]是否存在。這些通訊控制都得通過SPI協議以外自行實現。例如,要用SPI連線一支[命令-響應控制型]解碼晶片,則必須在SPI的基礎上實現更高階的通訊協議。SPI並不關心物理介面的電氣特性,例如訊號的標準電壓。在最初,大多數SPI應用都是使用間斷性時鐘脈衝和以位元組為單位傳輸資料的,但現在有很多變種實現了連續性時間脈衝和任意長度的資料幀。