uart,spi,i2c總線(xiàn)的區別
第一:
第二,區別在電氣信號線(xiàn)上:
第三,從第二點(diǎn)明顯可以看出,SPI和UART可以實(shí)現全雙工,但I2C不行;
個(gè)人認為:
SPI總線(xiàn)系統是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進(jìn)行通信以交換信息。外圍設置FLASHRAM、網(wǎng)絡(luò )控制器、LCD顯示驅動(dòng)器、A/D轉換器和MCU等。SPI總線(xiàn)系統可直接與各個(gè)廠(chǎng)家生產(chǎn)的多種標準外圍器件直接接口,該接口一般使用4條線(xiàn):串行時(shí)鐘線(xiàn)(SCK)、主機輸入/從機輸出數據線(xiàn)MISO、主機輸出/從機輸入數據線(xiàn)MOST和低電平有效的從機選擇線(xiàn)SS(有的SPI接口芯片帶有中斷信號線(xiàn)INT或INT、有的SPI接口芯片沒(méi)有主機輸出/從機輸入數據線(xiàn)MOSI)。
SPI的通信原理很簡(jiǎn)單,它以主從方式工作,這種模式通常有一個(gè)主設備和一個(gè)或多個(gè)從設備,需要至少4根線(xiàn),事實(shí)上3根也可以(單向傳輸時(shí))。也是所有基于SPI的設備共有的,它們是SDI(數據輸入),SDO(數據輸出),SCK(時(shí)鐘),CS(片選)。
(1)SDO
(2)SDI
(3)SCLK – 時(shí)鐘信號,由主設備產(chǎn)生
(4)CS
其中CS是控制芯片是否被選中的,也就是說(shuō)只有片選信號為預先規定的使能信號時(shí)(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線(xiàn)上連接多個(gè)SPI設備成為可能。
接下來(lái)就負責通訊的3根線(xiàn)了。通訊是通過(guò)數據交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說(shuō)數據是一位一位的傳輸的。這就是SCK時(shí)鐘線(xiàn)存在的原因,由SCK提供時(shí)鐘脈沖,SDI,SDO則基于此脈沖完成數據傳輸。數據輸出通過(guò) SDO線(xiàn),數據在時(shí)鐘上升沿或下降沿時(shí)改變,在緊接著(zhù)的下降沿或上升沿被讀取。完成一位數據傳輸,輸入也使用同樣原理。這樣,在至少8次時(shí)鐘信號的改變(上沿和下沿為一次),就可以完成8位數據的傳輸。
要注意的是,SCK信號線(xiàn)只由主設備控制,從設備不能控制信號線(xiàn)。同樣,在一個(gè)基于SPI的設備中,至少有一個(gè)主控設備。這樣傳輸的特點(diǎn):這樣的傳輸方式有一個(gè)優(yōu)點(diǎn),與普通的串行通訊不同,普通的串行通訊一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停,因為SCK時(shí)鐘線(xiàn)由主控設備控制,當沒(méi)有時(shí)鐘跳變時(shí),從設備不采集或傳送數據。也就是說(shuō),主設備通過(guò)對SCK時(shí)鐘線(xiàn)的控制可以完成對通訊的控制。SPI還是一個(gè)數據交換協(xié)議:因為SPI的數據輸入和輸出線(xiàn)獨立,所以允許同時(shí)完成數據的輸入和輸出。不同的SPI設備的實(shí)現方式不盡相同,主要是數據改變和采集的時(shí)間不同,在時(shí)鐘信號上沿或下沿采集有不同定義,具體請參考相關(guān)器件的文檔。
在點(diǎn)對點(diǎn)的通信中,SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,顯得簡(jiǎn)單高效。在多個(gè)從設備的系統中,每個(gè)從設備需要獨立的使能信號,硬件上比I2C系統要稍微復雜一些。
最后,SPI接口的一個(gè)缺點(diǎn):沒(méi)有指定的流控制,沒(méi)有應答機制確認是否接收到數據。
AT91RM9200的SPI接口主要由4個(gè)引腳構成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整個(gè)SPI總線(xiàn)的公用時(shí)鐘,MOSI、MISO作為主機,從機的輸入輸出的標志,MOSI是主機的輸出,從機的輸入,MISO 是主機的輸入,從機的輸出。/SS是從機的標志管腳,在互相通信的兩個(gè)SPI總線(xiàn)的器件,/SS管腳的電平低的是從機,相反/SS管腳的電平高的是主機。在一個(gè)SPI通信系統中,必須有主機。SPI總線(xiàn)可以配置成單主單從,單主多從,互為主從。SPI的片選可以擴充選擇16個(gè)外設,這時(shí)PCS輸出=NPCS,說(shuō)NPCS0~3接4-16譯碼器,這個(gè)譯碼器是需要外接4-16譯碼器,譯碼器的輸入為NPCS0~3,輸出用于16個(gè)外設的選擇。
SPI協(xié)議舉例
SPI是一個(gè)環(huán)形總線(xiàn)結構,由ss(cs)、sck、sdi、sdo構成,其時(shí)序其實(shí)很簡(jiǎn)單,主要是在sck的控制下,兩個(gè)雙向移位寄存器進(jìn)行數據交換。
舉例:
這樣就完成了兩個(gè)寄存器8位的交換,,sdi、sdo相對于主機而言的。其中ss引腳作為主機的時(shí)候,從機可以把它拉底被動(dòng)選為從機,作為從機的是時(shí)候,可以作為片選腳用。根據以上分析,一個(gè)完整的傳送周期是16位,即兩個(gè)字節,因為,首先主機要發(fā)送命令過(guò)去,然后從機根據主機的命令準備數據,主機在下一個(gè)8位時(shí)鐘周期才把數據讀回來(lái)。 SPI 總線(xiàn)是Motorola公司推出的三線(xiàn)同步接口,同步串行3線(xiàn)方式進(jìn)行通信:一條時(shí)鐘線(xiàn)SCK,一條數據輸入線(xiàn)OSI,一條數據輸出線(xiàn)MISO;用于CPU與各種外圍器件進(jìn)行全雙工、同步串行通訊。SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數據;可以當作主機或從機工作;提供頻率可編程時(shí)鐘;發(fā)送結束中斷標志;寫(xiě)沖突保護;總線(xiàn)競爭保護等。下圖示出SPI總線(xiàn)工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式 (實(shí)線(xiàn)表示):
SPI總線(xiàn)四種工作方式 SPI 模塊為了和外設進(jìn)行數據交換,根據外設工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對傳輸協(xié)議沒(méi)有重大的影響。如果 CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數據傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數據被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數據被采樣。SPI主模塊和與之通信的外設備時(shí)鐘相位和極性應該一致。
SPI總線(xiàn)包括1根串行同步時(shí)鐘信號線(xiàn)以及2根數據線(xiàn)。
補充:
上文中最后一句話(huà):SPI主模塊和與之通信的外設備時(shí)鐘相位和極性應該一致。個(gè)人理解這句話(huà)有2層意思:其一,主設備SPI時(shí)鐘和極性的配置應該由外設來(lái)決定;其二,二者的配置應該保持一致,即主設備的SDO同從設備的SDO配置一致,主設備的SDI同從設備的SDI配置一致。因為主從設備是在SCLK的控制下,同時(shí)發(fā)送和接收數據,并通過(guò)2個(gè)雙向移位寄存器來(lái)交換數據。
上升沿主機SDO發(fā)送數據1,同時(shí)從設備SDO發(fā)送數據0;緊接著(zhù)在SCLK的下降沿的時(shí)候從設備的SDI接收到了主機發(fā)送過(guò)來(lái)的數據1,同時(shí)主機也接收到了從設備發(fā)送過(guò)來(lái)的數據0.
SPI協(xié)議心得
SPI接口時(shí)鐘配置心得:
在主設備這邊配置SPI接口時(shí)鐘的時(shí)候一定要弄清楚從設備的時(shí)鐘要求,因為主設備這邊的時(shí)鐘極性和相位都是以從設備為基準的。因此在時(shí)鐘極性的配置上一定要搞清楚從設備是在時(shí)鐘的上升沿還是下降沿接收數據,是在時(shí)鐘的下降沿還是上升沿輸出數據。但要注意的是,由于主設備的SDO連接從設備的SDI,從設備的SDO連接主設備的SDI,從設備SDI接收的數據是主設備的SDO發(fā)送過(guò)來(lái)的,主設備SDI接收的數據是從設備SDO發(fā)送過(guò)來(lái)的,所以主設備這邊SPI時(shí)鐘極性的配置(即SDO的配置)跟從設備的SDI接收數據的極性是相反的,跟從設備SDO發(fā)送數據的極性是相同的。下面這段話(huà)是Sychip Wlan8100 Module Spec上說(shuō)的,充分說(shuō)明了時(shí)鐘極性是如何配置的:
The 81xx module will always input da
意思是:主設備在時(shí)鐘的下降沿發(fā)送數據,從設備在時(shí)鐘的上升沿接收數據。因此主設備這邊SPI時(shí)鐘極性應該配置為下降沿有效。
又如,下面這段話(huà)是摘自L(fǎng)CD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of da
意思是:從設備SSD1289在時(shí)鐘的上升沿接收數據,而且是按照從高位到地位的順序接收數據的。因此主設備的SPI時(shí)鐘極性同樣應該配置為下降沿有效。
時(shí)鐘極性和相位配置正確后,數據才能夠被準確的發(fā)送和接收。因此應該對照從設備的SPI接口時(shí)序或者Spec文檔說(shuō)明來(lái)正確配置主設備的時(shí)鐘。
軟件過(guò)程改進(jìn)
SPI: Software Process Improvement. 軟件過(guò)程改進(jìn)。是軟件企業(yè)項目過(guò)程質(zhì)量的改進(jìn),CMM,ISO9000-3說(shuō)的就是這個(gè)。
UART
開(kāi)放分類(lèi): 計算機、通信、信息
UART: Universal Asynchronous Receiver/Transmitter,通用異步接收/發(fā)送裝置,UART是一個(gè)并行輸入成為串行輸出的芯片,通常集成在主板上,多數是16550AFN芯片。因為計算機內部采用并行數據數據,不能直接把數據發(fā)到Modem,必須經(jīng)過(guò)UART整理才能進(jìn)行異步傳輸,其過(guò)程為:CPU先把準備寫(xiě)入串行設備的數據放到UART的寄存器(臨時(shí)內存塊)中,再通過(guò)FIFO(First Input First Output,先入先出隊列)傳送到串行設備,若是沒(méi)有FIFO,信息將變得雜亂無(wú)章,不可能傳送到Modem。
它是用于控制計算機與串行設備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數據終端設備接口,這樣計算機就可以和調制解調器或其它使用RS-232C接口的串行設備通信了。作為接口的一部分,UART還提供以下功能:將由計算機內部傳送過(guò)來(lái)的并行數據轉換為輸出的串行數據流。將計算機外部來(lái)的串行數據轉換為字節,供計算機內部使用并行數據的器件使用。在輸出的串行數據流中加入奇偶校驗位,并對從外部接收的數據流進(jìn)行奇偶校驗。在輸出數據流中加入啟停標記,并從接收數據流中刪除啟停標記。處理由鍵盤(pán)或鼠標發(fā)出的中斷信號(鍵盤(pán)和鼠標也是串行設備)??梢蕴幚碛嬎銠C與外部串行設備的同步管理問(wèn)題。有一些比較高檔的UART還提供輸入輸出數據的緩沖區,現在比較新的UART是16550,它可以在計算機需要處理數據前在其緩沖區內存儲16字節數據,而通常的UART是8250?,F在如果您購買(mǎi)一個(gè)內置的調制解調器,此調制解調器內部通常就會(huì )有16550 UART。
區別在電氣信號線(xiàn)上:
從以上很明顯可以看出,SPI和UART可以實(shí)現全雙工,但I2C不行;
第四,看看牛人們的意見(jiàn)吧!
-----------------------------------------------------------------------------------------------------------------------------------
SPI 是一種允許一個(gè)主設備啟動(dòng)一個(gè)與從設備的同步通訊的協(xié)議,從而完成數據的交換。也就是SPI是一種規定好的通訊方式。這種通信方式的優(yōu)點(diǎn)是占用端口較少,一般4根就夠基本通訊了。同時(shí)傳輸速度也很高。一般來(lái)說(shuō)要求主設備要有SPI控制器(但可用模擬方式),就可以與基于SPI的芯片通訊了。
I2C
? 只要求兩條總線(xiàn)線(xiàn)路:一條串行數據線(xiàn)SDA 一條串行時(shí)鐘線(xiàn)SCL
? 每個(gè)連接到總線(xiàn)的器件都可以通過(guò)唯一的地址和一直存在的簡(jiǎn)單的主機從機關(guān)系軟件設定地址主機可以作為主機發(fā)送器或主機接收器
? 它是一個(gè)真正的多主機總線(xiàn)如果兩個(gè)或更多主機同時(shí)初始化數據傳輸可以通過(guò)沖突檢測和仲裁,防止數據被破壞
? 串行的8 位雙向數據傳輸位速率在標準模式下可達100kbit/s 快速模式下可達400kbit/s 高速模式下可達3.4Mbit/s
? 片上的濾波器可以濾去總線(xiàn)數據線(xiàn)上的毛刺波保證數據完整
? 連接到相同總線(xiàn)的IC 數量只受到總線(xiàn)的最大電容400pF 限制
UART
UART總線(xiàn)是異步串口,因此一般比前兩種同步串口的結構要復雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線(xiàn),一根用于發(fā)送,一根用于接收。
UART常用于控制計算機與串行設備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數據終端設備接口,這樣計算機就可以和調制解調器或其它使用RS-232C接口的串行設備通信了。
明顯可以看出,SPI和UART可以實(shí)現全雙工,但I2C不行。
評論