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