1. 程式人生 > >SPI和UART的區別

SPI和UART的區別

SPI和UART都是處理和傳輸資料的晶片單元,經由它們連線不同的模組,完成資料的傳輸或處理

SPI:高速同步序列口。3~4線介面,收發獨立、可同步進行 

UART:通用非同步序列口。按照標準波特率完成雙向通訊,速度慢 
I2C:一種序列傳輸方式,三線制,網上可找到其通訊協議和用法的 

3根線實現資料雙向傳輸 
序列外圍介面 Serial peripheral interface 
UART:通用非同步收發器 
UART是用於控制計算機與序列裝置的晶片。有一點要注意的是,它提供了RS-232C資料終端裝置介面,這樣計算機就可以和調變解調器或其它使用RS-232C介面的序列裝置通訊了。作為介面的一部分,UART還提供以下功能: 

將由計算機內部傳送過來的並行資料轉換為輸出的序列資料流。將計算機外部來的序列資料轉換為位元組,供計算機內部使用並行資料的器件使用。在輸出的序列資料 流中加入奇偶校驗位,並對從外部接收的資料流進行奇偶校驗。在輸出資料流中加入啟停標記,並從接收資料流中刪除啟停標記。處理由鍵盤或滑鼠發出的中斷訊號 (鍵盤和鼠票也是序列裝置)。可以處理計算機與外部序列裝置的同步管理問題。有一些比較高檔的UART還提供輸入輸出資料的緩衝區,現在比較新的UART 是16550,它可以在計算機需要處理資料前在其緩衝區記憶體儲16位元組資料,而通常的UART是8250。現在如果您購買一個內建的調變解調器,此調製解 調器內部通常就會有16550 UART。

I2C:能用於替代標準的並行匯流排,能連線的各種積體電路和功能模組。I2C是多主控匯流排,所以任何一個裝置都能像主控器一樣工作,並控制匯流排。 總線上每一個裝置都有一個獨一無二的地址,根據裝置它們自己的能力,它們可以作為發射器或接收器工作。多路微控制器能在同一個I2C總線上共存。

更詳細的區別:
第一個區別當然是名字:
     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要少。

SPII2CUART三種序列匯流排協議的區別

     SPI(Serial Peripheral Interface:序列外設介面)

     I2C(INTER IC BUS)

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

SPI

The SPI includes these distinctive features:

Master mode and slave mode

Bi-directional mode

Slave select output

Mode fault error flag with CPU interrupt capability

Double-buffered data register

Serial clock with programmable polarity and phase

 Control of SPI operation during wait mode

SPI 有兩種模式,Normal Mode and Bidirectional Mode,包括以下幾根線:

SS      Slave Select

SCK    Serial Clock

MOSI Master Output, Slave Input

MISO Master Input, Slave Output

MOMI Master Output, Master Input

SISO   Slave Input, Slave Output

其中前四根線用於Normal Mode ,常用的也是4根線的Normal Mode 

MOSI

This pin is used to transmit data out of the SPI module when it is configured as a Master and receive data

when it is configured as Slave.

MISO

This pin is used to transmit data out of the SPI module when it is configured as a Slave and receive data

when it is configured as Master.

SS

This pin is used to output the select signal from the SPI module to another peripheral with which a data

transfer is to take place when its configured as a Masterand its used as an input to receive the slave select

signal when the SPI is configured as Slave.

SCK

This pin is used to output the clock with respect to which the SPI transfers data or receive clock in case of

Slave.

SPI 是一種允許一個主裝置啟動一個與從裝置的同步通訊的協議,從而完成資料的交換。也就是SPI是一種規定好的通訊方式。這種通訊方式的優點是佔用埠較少,一般4根就夠基本通訊了。同時傳輸速度也很高。一般來說要求主裝置要有SPI控制器(但可用模擬方式),就可以與基於SPI的晶片通訊了。

    SPI 的通訊原理很簡單,它需要至少4根線,事實上3根也可以。也是所有基於SPI的裝置共有的,它們是SDI(資料輸入),SDO(資料輸出),SCK(時鍾),CS(片選)。其中CS是控制晶片是否被選中的,也就是說只有片選訊號為預先規定的使能訊號時(高電位或低電位),對此晶片的操作才有效。這就允許在同一總線上連線多個SPI裝置成為可能。

接下來就負責通訊的3根線了。通訊是通過資料交換完成的,這裡先要知道SPI是序列通訊協議,也就是說資料是一位一位的傳輸的。這就是SCK時鐘線存在的原因,由SCK提供時鐘脈衝,SDISDO則基於此脈衝完成資料傳輸。資料輸出通過SDO線,資料在時鐘上沿或下沿時改變,在緊接著的下沿或上沿被讀取。完成一位資料傳輸,輸入也使用同樣原理。這樣,在至少8次時鐘訊號的改變(上沿和下沿為一次),就可以完成8位資料的傳輸。

要注意的是,SCK訊號線只由主裝置控制,從裝置不能控制訊號線。同樣,在一個基於SPI的裝置中,至少有一個主控裝置。

這樣傳輸的特點:這樣的傳輸方式有一個優點,與普通的序列通訊不同,普通的序列通訊一次連續傳送至少8位資料,而SPI允許資料一位一位的傳送,甚至允許暫停,因為SCK時鐘線由主控裝置控制,當沒有時鐘跳變時,從裝置不採集或傳送資料。也就是說,主裝置通過對SCK時鐘線的控制可以完成對通訊的控制。

     SPI還是一個數據交換協議:因為SPI的資料輸入和輸出線獨立,所以允許同時完成資料的輸入和輸出。

不同的SPI裝置的實現方式不盡相同,主要是資料改變和採集的時間不同,在時鐘訊號上沿或下沿採集有不同定義,具體請參考相關器件的文件。

I2C

只要求兩條匯流排線路:一條序列資料線SDA 一條序列時鐘線SCL

每個連線到匯流排的器件都可以通過唯一的地址和一直存在的簡單的主機從機關係軟體設定地址主機可以作為主機發送器或主機接收器

它是一個真正的多主機匯流排如果兩個或更多主機同時初始化資料傳輸可以通過沖突檢測和仲裁,防止資料被破壞

序列的位雙向資料傳輸位速率在標準模式下可達100kbit/s 快速模式下可達400kbit/s 高速模式下可達3.4Mbit/s

片上的濾波器可以濾去匯流排資料線上的毛刺波保證資料完整

連線到相同匯流排的IC 數量只受到匯流排的最大電容400pF 限制

UART

UART匯流排是非同步串列埠,因此一般比前兩種同步串列埠的結構要複雜很多,一般由波特率產生器(產生的波特率等於傳輸波特率的16)UART接收器、UART傳送器組成,硬體上由兩根線,一根用於傳送,一根用於接收。

顯然,如果用通用IO口模擬UART匯流排,則需一個輸入口,一個輸出口。

UART常用於控制計算機與序列裝置的晶片。有一點要注意的是,它提供了RS-232C資料終端裝置介面,這樣計算機就可以和調變解調器或其它使用RS-232C介面的序列裝置通訊了。

明顯可以看出,SPIUART可以實現全雙工,但I2C不行