天天看點

SPI、IIC、UART差別

SPI、IIC、UART差別

第一個差別當然是名字: 

     SPI(Serial Peripheral Interface:串行外設接口); 

     I2C(INTER IC BUS) 

     UART(Universal Asynchronous Receiver Transmitter:通用異步收發器) 

第二,差別在電氣信号線上: 

     SPI總線由三條信号線組成:串行時鐘(SCLK)、串行資料輸出(SDO)、串行資料輸入(SDI)。SPI總線可以實作 多個SPI裝置互相連接配接。提供SPI串行時鐘的SPI裝置為SPI主機或主裝置(Master),其他裝置為SPI從機或從裝置(Slave)。主從裝置間可以實作全雙工通信,當有多個從裝置時,還可以增加一條從裝置選擇線。 

     如果用通用IO口模拟SPI總線,必須要有一個輸出口(SDO),一個輸入口(SDI),另一個口則視實作的裝置類型而定,如果要實作主從裝置,則需輸入輸出口,若隻實作主裝置,則需輸出口即可,若隻實作從裝置,則隻需輸入口即可。 

     I2C總線是雙向、兩線(SCL、SDA)、串行、多主要(multi-master)接口标準,具有總線仲裁機制,非常适合在器件之間進行近距離、非經常性的資料通信。在它的協定體系中,傳輸資料時都會帶上目的裝置的裝置位址,是以可以實作裝置組網。 

     如果用通用IO口模拟I2C總線,并實作雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。(注:I2C資料了解得比較少,這裡的描述可能很不完備) 

     UART總線是異步序列槽,是以一般比前兩種同步序列槽的結構要複雜很多,一般由波特率産生器(産生的波特率等于傳輸波特率的16倍)、UART接收器、UART發送器組成,硬體上由兩根線,一根用于發送,一根用于接收。 

     顯然,如果用通用IO口模拟UART總線,則需一個輸入口,一個輸出口。 

第三,從第二點明顯可以看出,SPI和UART可以實作全雙工,但I2C不行; 

第四,看看牛人們的意見吧! 

     wudanyu:I2C線更少,我覺得比UART、SPI更為強大,但是技術上也更加麻煩些,因為I2C需要有雙向IO的支援(這是I2c複雜的原因,一個接口既要做輸入也要做輸出,那控制晶片就複雜了),而且使用上拉電阻,我覺得抗幹擾能力較弱,一般用于同一闆卡上晶片之間的通信,較少用于遠距離通信。SPI實作要簡單一些,UART需要固定的波特率,就是說兩位資料的間隔要相等,而SPI則無所謂,因為它是有時鐘的協定。 

     quickmouse:I2C的速度比SPI慢一點,協定比SPI複雜一點,但是連線也比标準的SPI要少。

第五,應用:

I2C:抗幹擾能力較弱,一般用于同一闆卡上晶片之間的通信,較少用于遠距離通信。通信速度不高

SPI:SPI接口比UART比多了一條同步時鐘線,對通信雙方的時序要求不嚴格不同裝置之間可以很容易結合,而且通信速度非常快。一般用在産品内部元件之間的高速資料通信上面,如大容量存儲器等。

UART:處理由鍵盤或滑鼠發出的中斷信号(鍵盤和鼠票也是 串行裝置)。可以處理計算機與外部串行裝置的同步管理問題,序列槽線;  通信速度也不是很快。在多機通信上面用的最多。