1. 程式人生 > >SPI和IIC通訊區別

SPI和IIC通訊區別

一、IIC
    IIC 是多主裝置的匯流排,IIC沒有物理的晶片選擇訊號線,沒有仲裁邏輯電路,只使用兩條訊號線—— ‘serial data’ (SDA) 和 ‘serial clock’ (SCL)。

    IIC協議規定:

    第一,每一支IIC裝置都有一個唯一的七位裝置地址;

    第二,資料幀大小為8位的位元組;

    第三,資料(幀)中的某些資料位用於控制通訊的開始、停止、方向(讀寫)和應答機制。

     IIC 資料傳輸速率有標準模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4 Mbps),另外一些變種實現了低速模式(10 kbps)和快速+模式(1 Mbps)。

    基於IIC匯流排的設計,線路上不可能出現電平衝突現象。如果一支裝置傳送邏輯0,其它傳送邏輯1,那麼線路看到的只有邏輯0。也就是說,如果出現電平衝突,傳送邏輯0的始終是“贏家”。

    匯流排的物理結構亦允許主裝置在往匯流排寫資料的同時讀取資料。這樣,任何裝置都可以檢測衝突的發生。當兩支主裝置競爭匯流排的時候,“贏家”並不知道競爭的發生,只有“輸家”發現了衝突——當它寫一個邏輯1,卻讀到0時——而退出競爭。

    任何IIC裝置都有一個7位地址,理論上,現實中只能有127種不同的IIC裝置。實際上,已有IIC的裝置種類遠遠多於這個限制,在一條總線上出現相同的地址的IIC裝置的概率相當高。為了突破這個限制,很多裝置使用了雙重地址——7位地址加引腳地址(external configuration pins)。IIC 標準也預知了這種限制,提出10位的地址方案。
10位的地址方案對 IIC協議的影響有兩點:

    第一,地址幀為兩個位元組長,原來的是一個位元組;

    第二,第一個位元組前五位最高有效位用作10位地址標識,約定是“11110”。

    另外,在IIC中有個現象--時鐘拉伸:在 IIC 通訊中,主裝置決定了時鐘速度。因為時鐘脈衝訊號是由主裝置顯式發出的。但是,當從裝置沒辦法跟上主裝置的速度時,從裝置需要一種機制來請求主裝置慢一點。這種機制稱為時鐘拉伸。

    當從裝置需要降低傳輸的速度的時候,它可以按下時鐘線,逼迫主裝置進入等待狀態,直到從裝置釋放時鐘線,通訊才繼續。



二、SPI和IIC比較

1. SPI適合資料流應用,而IIC更適合“位元組裝置”的多主裝置應用。

2. 匯流排拓撲結構/訊號路由/硬體資源耗費,IIC 只需兩根訊號線,而標準SPI至少四根訊號
  

3. 資料吞吐/傳輸速度

    如果應用中必須使用高速資料傳輸,那麼SPI是必然的選擇。因為SPI是全雙工,IIC 的不是。SPI沒有定義速度限制,一般的實現通常能達到甚至超過10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),後面的模式還需要額外的I/O緩衝區,還並不是總是容易實現的。