1. 程式人生 > >SPI、I2C、UART三種序列匯流排的原理、區別及應用

SPI、I2C、UART三種序列匯流排的原理、區別及應用

雜文

SPI、I2C、串列埠、我相信如果你是從事的是嵌入式開發,一定會用到這三種通訊協議,串列埠的話因為和波特率有關,所以一般的CPU或者MCU只會配有兩個或者三個串列埠,而資料的傳輸,的話SPI和I2C用得會比較多,下面找到了一篇部落格。轉過來、

詳細解釋區別

1、UART就是兩線,一根傳送一根接收,可以全雙工通訊,線數也比較少。資料是非同步傳輸的,對雙方的時序要求比較嚴格,通訊速度也不是很快。在多機通訊上面用的最多。

2、SPI介面和上面UART相比,多了一條同步時鐘線,上面UART的缺點也就是它的優點了,對通訊雙方的時序要求不嚴格不同裝置之間可以很容易結合,而且通訊速度非常快。一般用在產品內部元件之間的高速資料通訊上面,如大容量儲存器等。

3、I2C介面也是兩線介面,它是兩根線之間通過複雜的邏輯關係傳輸資料的,通訊速度不高,程式寫起來也比較複雜。一般微控制器系統裡主要用來和24C02等小容易儲存器連線。

SPI:高速同步序列口。3~4線介面,收發獨立、可同步進行
UART:通用非同步序列口。按照標準波特率完成雙向通訊,速度慢

SPI:一種序列傳輸方式,三線制,網上可找到其通訊協議和用法的
3根線實現資料雙向傳輸
序列外圍介面 Serial peripheral interface
UART:通用非同步收發器
UART是用於控制計算機與序列裝置的晶片。有一點要注意的是,它提供了RS-232C資料終
端裝置介面,這樣計算機就可以和調變解調器或其它使用RS-232C介面的序列裝置通訊了
。作為介面的一部分,UART還提供以下功能:
將由計算機內部傳送過來的並行資料轉換為輸出的序列資料流。將計算機外部來的序列
資料轉換為位元組,供計算機內部使用並行資料的器件使用。在輸出的序列資料流中加入
奇偶校驗位,並對從外部接收的資料流進行奇偶校驗。在輸出資料流中加入啟停標記,
並從接收資料流中刪除啟停標記。處理由鍵盤或滑鼠發出的中斷訊號(鍵盤和鼠票也是
序列裝置)。可以處理計算機與外部序列裝置的同步管理問題。有一些比較高檔的UART
還提供輸入輸出資料的緩衝區,現在比較新的UART是16550,它可以在計算機需要處理數
據前在其緩衝區記憶體儲16位元組資料,而通常的UART是8250。現在如果您購買一個內建的
調變解調器,此調變解調器內部通常就會有16550 UART。
I2C: 能用於替代標準的並行匯流排,能連線的各種積體電路和功能模組。I2C是多主控匯流排,所以任何一個裝置都能像主控器一樣

工作,並控制匯流排。總線上每一個裝置都有一個獨一無二的地址,根據裝置它們自己的能力,它們可以作為發射器或接收器工作。多路微控制器能在同一個I2C總線上共存。

I方C匯流排:

I2C匯流排最主要的優點是其簡單性和有效性。

由於介面直接在元件之上,因此I2C匯流排佔用的空間非常小,減少了電路板的空間和晶片管腳的數量,降低了互聯成本。匯流排的長度可高達25英尺,並且能夠以10Kbps的最大傳輸速率支援40個元件。I2C匯流排的另一個優點是,它支援多主控(multimastering),其中任何能夠進行傳送和接收的裝置都可以成為主匯流排。一個主控能夠控制訊號的傳輸和時鐘頻率。當然,在任何時間點上只能有一個主控。

UART:

單端,遠距離傳輸。大多數計算機包含兩個基於RS232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議;很多GPIB相容的裝置也帶有RS-232口。同時,串列埠通訊協議也可以用於獲取遠端採集裝置的資料。串列埠通訊的概念非常簡單,串列埠按位(bit)傳送和接收位元組。儘管比按位元組(byte)的並行通訊慢,但是串列埠可以在使用一根線傳送資料的同時用另一根線接收資料。它很簡單並且能夠實現遠距離通訊。比如IEEE488定義並行通行狀態時,規定裝置線總常不得超過20米,並且任意兩個裝置間的長度不得超過2米;而對於串列埠而言,長度可達1200米。

具體的適用範圍就可多了,軍用,醫療...到處到能用。

第一個區別當然是名字:
     SPI(Serial Peripheral Interface:序列外設介面);
     I2C(INTER IC BUS:意為IC之間匯流排)
     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的支援,而且使用上拉電阻,我覺得抗干擾能力較弱,一般用於同一板卡上晶片之間的通訊,較少用於遠距離通訊。SPI實現要簡單一些,UART需要固定的波特率,就是說兩位資料的間隔要相等,而SPI則無所謂,因為它是有時鐘的協議。
     quickmouse:I2C的速度比SPI慢一點,協議比SPI複雜一點,但是連線也比標準的SPI要少。