SPI,UART,I2C 各自特點 區別的一些理解

區別:
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

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

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

    串行的8 位雙向數據傳輸位速率在標準模式下可達100kbit/s 快速模式下可達400kbit/s 高速模式下可達3.4Mbit/s

    片上的濾波器可以濾去總線數據線上的毛刺波保證數據完整

    連接到相同總線的IC 數量只受到總線的最大電容400pF 限制

 

UART

 

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

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

UART常用於控制計算機與串行設備的芯片。有一點要注意的是,它提供了RS-232C數據終端設備接口,這樣計算機就可以和調制解調器或其它使用RS-232C接口的串行設備通信了。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章