SPI、I2C、UART三種串行總線協(xié)議的區(qū)別
SPI、I2C、UART三種串行總線協(xié)議的區(qū)別
本文引用地址:http://m.butianyuan.cn/article/201612/330766.htmSPI(Serial Peripheral Interface:串行外設(shè)接口)
I2C(INTER IC BUS)
UART(Universal Asynchronous Receiver Transmitter:通用異步收發(fā)器)
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,包括以下幾根線:
SSSlave Select
SCKSerial Clock
MOSI Master Output, Slave Input
MISO Master Input, Slave Output
MOMI Master Output, Master Input
SISOSlave 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是一種允許一個主設(shè)備啟動一個與從設(shè)備的同步通訊的協(xié)議,從而完成數(shù)據(jù)的交換。也就是SPI是一種規(guī)定好的通訊方式。這種通信方式的優(yōu)點(diǎn)是占用端口較少,一般4根就夠基本通訊了。同時傳輸速度也很高。一般來說要求主設(shè)備要有SPI控制器(但可用模擬方式),就可以與基于SPI的芯片通訊了。
SPI的通信原理很簡單,它需要至少4根線,事實(shí)上3根也可以。也是所有基于SPI的設(shè)備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時鐘),CS(片選)。其中CS是控制芯片是否被選中的,也就是說只有片選信號為預(yù)先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線上連接多個SPI設(shè)備成為可能。
接下來就負(fù)責(zé)通訊的3根線了。通訊是通過數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說數(shù)據(jù)是一位一位的傳輸?shù)摹_@就是SCK時鐘線存在的原因,由SCK提供時鐘脈沖,SDI,SDO則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過SDO線,數(shù)據(jù)在時鐘上沿或下沿時改變,在緊接著的下沿或上沿被讀取。完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理。這樣,在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸。
要注意的是,SCK信號線只由主設(shè)備控制,從設(shè)備不能控制信號線。同樣,在一個基于SPI的設(shè)備中,至少有一個主控設(shè)備。
這樣傳輸?shù)奶攸c(diǎn):這樣的傳輸方式有一個優(yōu)點(diǎn),與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停,因?yàn)镾CK時鐘線由主控設(shè)備控制,當(dāng)沒有時鐘跳變時,從設(shè)備不采集或傳送數(shù)據(jù)。也就是說,主設(shè)備通過對SCK時鐘線的控制可以完成對通訊的控制。
SPI還是一個數(shù)據(jù)交換協(xié)議:因?yàn)镾PI的數(shù)據(jù)輸入和輸出線獨(dú)立,所以允許同時完成數(shù)據(jù)的輸入和輸出。
不同的SPI設(shè)備的實(shí)現(xiàn)方式不盡相同,主要是數(shù)據(jù)改變和采集的時間不同,在時鐘信號上沿或下沿采集有不同定義,具體請參考相關(guān)器件的文檔。
I2C
•只要求兩條總線線路:一條串行數(shù)據(jù)線SDA一條串行時鐘線SCL
•每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)從機(jī)關(guān)系軟件設(shè)定地址主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器
•它是一個真正的多主機(jī)總線如果兩個或更多主機(jī)同時初始化數(shù)據(jù)傳輸可以通過沖突檢測和仲裁,防止數(shù)據(jù)被破壞
•串行的8位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s快速模式下可達(dá)400kbit/s高速模式下可達(dá)3.4Mbit/s
•片上的濾波器可以濾去總線數(shù)據(jù)線上的毛刺波保證數(shù)據(jù)完整
•連接到相同總線的IC數(shù)量只受到總線的最大電容400pF限制
UART
UART總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。
顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
UART常用于控制計算機(jī)與串行設(shè)備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。
明顯可以看出,SPI和UART可以實(shí)現(xiàn)全雙工,但I(xiàn)2C不行
評論