標題: I2C SPI UART和CAN通信協(xié)議的區(qū)別 [打印本頁] 作者: 51黑er 時間: 2015-11-1 23:24 標題: I2C SPI UART和CAN通信協(xié)議的區(qū)別 I2C的數(shù)據(jù)輸入輸出用的是一根線,SPI則分為dataIN和dataOUT。由于這個原因,采用I2C時CPU的端口占用少,SPI多一根。但是由于I2C的數(shù)據(jù)線是雙向的,所以隔離比較復雜,SPI則比較容易。所以系統(tǒng)內部通信可用I2C,若要與外部通信則最好用SPI帶隔離(可以提高抗干擾能力)。但是I2C和SPI都不適合長距離傳輸。長距離時就要用485了。
第一:
SPI(Serial Peripheral Interface:串行外設接口); I2C(INTER IC BUS);UART(Universal Asynchronous Receiver Transmitter:通用異步收發(fā)器)
第二,區(qū)別在電氣信號線上:
SPI總線由三條信號線組成:串行時鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸入(SDI)。SPI總線可以實現(xiàn)多個SPI設備互相連接。提供SPI串行時鐘的SPI設備為SPI主機或主設備(Master),其他設備為SPI從機或從設備(Slave)。主從設備間可以實現(xiàn)全雙工通信,當有多個從設備時,還可以增加一條從設備選擇線。 如果用通用IO口模擬SPI總線,必須要有一個輸出口(SDO),一個輸入口(SDI),另一個口則視實現(xiàn)的設備類型而定,如果要實現(xiàn)主從設備,則需輸入輸出口,若只實現(xiàn)主設備,則需輸出口即可,若只實現(xiàn)從設備,則只需輸入口即可。
I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中,傳輸數(shù)據(jù)時都會帶上目的設備的設備地址,因此可以實現(xiàn)設備組網(wǎng)。 如果用通用IO口模擬I2C總線,并實現(xiàn)雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)
UART總線是異步串口,因此一般比前兩種同步串口的結構要復雜很多,一般由波特率產生器(產生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
第三,從第二點明顯可以看出,SPI和UART可以實現(xiàn)全雙工,但I2C不行;
個人認為:
I2C線更少,我覺得比UART、SPI更為強大,但是技術上也更加麻煩些,因為I2C需要有雙向IO的支持,而且使用上拉電阻,我覺得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠距離通信。SPI實現(xiàn)要簡單一些,UART需要固定的波特率,就是說兩位數(shù)據(jù)的間隔要相等,而SPI則無所謂,因為它是有時鐘的協(xié)議。
I2C的速度比SPI慢一點,協(xié)議比SPI復雜一點,但是連線也比標準的SPI要少。
SPI總線系統(tǒng)是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息。外圍設置FLASHRAM、網(wǎng)絡控制器、LCD顯示驅動器、A/D轉換器和MCU等。SPI總線系統(tǒng)可直接與各個廠家生產的多種標準外圍器件直接接口,該接口一般使用4條線:串行時鐘線(SCK)、主機輸入/從機輸出數(shù)據(jù)線MISO、主機輸出/從機輸入數(shù)據(jù)線MOST和低電平有效的從機選擇線SS(有的SPI接口芯片帶有中斷信號線INT或INT、有的SPI接口芯片沒有主機輸出/從機輸入數(shù)據(jù)線MOSI)。
SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基于SPI的設備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時鐘),CS(片選)。
(1)SDO – 主設備數(shù)據(jù)輸出,從設備數(shù)據(jù)輸入
(2)SDI – 主設備數(shù)據(jù)輸入,從設備數(shù)據(jù)輸出
(3)SCLK – 時鐘信號,由主設備產生
(4)CS – 從設備使能信號,由主設備控制
其中CS是控制芯片是否被選中的,也就是說只有片選信號為預先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線上連接多個SPI設備成為可能。
接下來就負責通訊的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信號線只由主設備控制,從設備不能控制信號線。同樣,在一個基于SPI的設備中,至少有一個主控設備。這樣傳輸?shù)奶攸c:這樣的傳輸方式有一個優(yōu)點,與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停,因為SCK時鐘線由主控設備控制,當沒有時鐘跳變時,從設備不采集或傳送數(shù)據(jù)。也就是說,主設備通過對SCK時鐘線的控制可以完成對通訊的控制。SPI還是一個數(shù)據(jù)交換協(xié)議:因為SPI的數(shù)據(jù)輸入和輸出線獨立,所以允許同時完成數(shù)據(jù)的輸入和輸出。不同的SPI設備的實現(xiàn)方式不盡相同,主要是數(shù)據(jù)改變和采集的時間不同,在時鐘信號上沿或下沿采集有不同定義,具體請參考相關器件的文檔。
在點對點的通信中,SPI接口不需要進行尋址操作,且為全雙工通信,顯得簡單高效。在多個從設備的系統(tǒng)中,每個從設備需要獨立的使能信號,硬件上比I2C系統(tǒng)要稍微復雜一些。
最后,SPI接口的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數(shù)據(jù)。
AT91RM9200的SPI接口主要由4個引腳構成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整個SPI總線的公用時鐘,MOSI、MISO作為主機,從機的輸入輸出的標志,MOSI是主機的輸出,從機的輸入,MISO 是主機的輸入,從機的輸出。/SS是從機的標志管腳,在互相通信的兩個SPI總線的器件,/SS管腳的電平低的是從機,相反/SS管腳的電平高的是主機。在一個SPI通信系統(tǒng)中,必須有主機。SPI總線可以配置成單主單從,單主多從,互為主從。SPI的片選可以擴充選擇16個外設,這時PCS輸出=NPCS,說NPCS0~3接4-16譯碼器,這個譯碼器是需要外接4-16譯碼器,譯碼器的輸入為NPCS0~3,輸出用于16個外設的選擇。
SPI協(xié)議舉例
SPI是一個環(huán)形總線結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數(shù)據(jù)交換。
假設下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。
那么第一個上升沿來的時候 數(shù)據(jù)將會是sdo=1;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那么這時寄存器=0101010sdi,這樣在 8個時鐘脈沖以后,兩個寄存器的內容互相交換一次。這樣就完成里一個spi時序。
舉例:
假設主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數(shù)據(jù)情況演示一遍:假設上升沿發(fā)送數(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ù);可以當作主機或從機工作;提供頻率可編程時鐘;發(fā)送結束 中斷標志;寫沖突保護;總線競爭保護等。下圖示出SPI總線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式 (實線表示):
SPI總線四種工作方式 SPI 模塊為了和外設進行數(shù)據(jù)交換,根據(jù)外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果 CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。
SPI總線包括1根串行同步時鐘信號線以及2根數(shù)據(jù)線。
SPI模塊為了和外設進行數(shù)據(jù)交換,根據(jù)外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設音時鐘相位和極性應該一致。
補充:
上文中最后一句話:SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。個人理解這句話有2層意思:其一,主設備SPI時鐘和極性的配置應該由外設來決定;其二,二者的配置應該保持一致,即主設備的SDO同從設備的SDO配置一致,主設備的SDI同從設備的SDI配置一致。因為主從設備是在SCLK的控制下,同時發(fā)送和接收數(shù)據(jù),并通過2個雙向移位寄存器來交換數(shù)據(jù)。
上升沿主機SDO發(fā)送數(shù)據(jù)1,同時從設備SDO發(fā)送數(shù)據(jù)0;緊接著在SCLK的下降沿的時候從設備的SDI接收到了主機發(fā)送過來的數(shù)據(jù)1,同時主機也接收到了從設備發(fā)送過來的數(shù)據(jù)0.
SPI協(xié)議心得
SPI接口時鐘配置心得:
在主設備這邊配置SPI接口時鐘的時候一定要弄清楚從設備的時鐘要求,因為主設備這邊的時鐘極性和相位都是以從設備為基準的。因此在時鐘極性的配置上一定要搞清楚從設備是在時鐘的上升沿還是下降沿接收數(shù)據(jù),是在時鐘的下降沿還是上升沿輸出數(shù)據(jù)。但要注意的是,由于主設備的SDO連接從設備的SDI,從設備的SDO連接主設備的SDI,從設備SDI接收的數(shù)據(jù)是主設備的SDO發(fā)送過來的,主設備SDI接收的數(shù)據(jù)是從設備SDO發(fā)送過來的,所以主設備這邊SPI時鐘極性的配置(即SDO的配置)跟從設備的SDI接收數(shù)據(jù)的極性是相反的,跟從設備SDO發(fā)送數(shù)據(jù)的極性是相同的。下面這段話是Sychip Wlan8100 Module Spec上說的,充分說明了時鐘極性是如何配置的:
The 81xx module will always input data bits at the rising edge of the clock, and the host will always output data bits on the falling edge of the clock.
意思是:主設備在時鐘的下降沿發(fā)送數(shù)據(jù),從設備在時鐘的上升沿接收數(shù)據(jù)。因此主設備這邊SPI時鐘極性應該配置為下降沿有效。
又如,下面這段話是摘自LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.
意思是:從設備SSD1289在時鐘的上升沿接收數(shù)據(jù),而且是按照從高位到地位的順序接收數(shù)據(jù)的。因此主設備的SPI時鐘極性同樣應該配置為下降沿有效。
時鐘極性和相位配置正確后,數(shù)據(jù)才能夠被準確的發(fā)送和接收。因此應該對照從設備的SPI接口時序或者Spec文檔說明來正確配置主設備的時鐘。
軟件過程改進
SPI: Software Process Improvement. 軟件過程改進。是軟件企業(yè)項目過程質量的改進,CMM,ISO9000-3說的就是這個。
UART
開放分類: 計算機、通信、信息
UART: Universal Asynchronous Receiver/Transmitter,通用異步接收/發(fā)送裝置,UART是一個并行輸入成為串行輸出的芯片,通常集成在主板上,多數(shù)是16550AFN芯片。因為計算機內部采用并行數(shù)據(jù)數(shù)據(jù),不能直接把數(shù)據(jù)發(fā)到Modem,必須經(jīng)過UART整理才能進行異步傳輸,其過程為:CPU先把準備寫入串行設備的數(shù)據(jù)放到UART的寄存器(臨時內存塊)中,再通過FIFO(First Input First Output,先入先出隊列)傳送到串行設備,若是沒有FIFO,信息將變得雜亂無章,不可能傳送到Modem。
它是用于控制計算機與串行設備的芯片。有一點要注意的是,它提供了RS-232C數(shù)據(jù)終端設備接口,這樣計算機就可以和調制解調器或其它使用RS-232C接口的串行設備通信了。作為接口的一部分,UART還提供以下功能:將由計算機內部傳送過來的并行數(shù)據(jù)轉換為輸出的串行數(shù)據(jù)流。將計算機外部來的串行數(shù)據(jù)轉換為字節(jié),供計算機內部使用并行數(shù)據(jù)的器件使用。在輸出的串行數(shù)據(jù)流中加入奇偶校驗位,并對從外部接收的數(shù)據(jù)流進行奇偶校驗。在輸出數(shù)據(jù)流中加入啟停標記,并從接收數(shù)據(jù)流中刪除啟停標記。處理由鍵盤或鼠標發(fā)出的中斷信號(鍵盤和鼠標也是串行設備)。可以處理計算機與外部串行設備的同步管理問題。有一些比較高檔的UART還提供輸入輸出數(shù)據(jù)的緩沖區(qū),現(xiàn)在比較新的UART是16550,它可以在計算機需要處理數(shù)據(jù)前在其緩沖區(qū)內存儲16字節(jié)數(shù)據(jù),而通常的UART是8250。現(xiàn)在如果您購買一個內置的調制解調器,此調制解調器內部通常就會有16550 UART。
CAN 全稱為Controller Area Network,即控制器局域網(wǎng),由德國Bosch 公司最先提出,是國際上應用最廣泛的現(xiàn)場總線之一。CAN 是一種多主方式的串行通訊總線,基本設計規(guī)范要求有高的位速率、高抗電磁干擾性,而且要能夠檢測出總線的任何錯誤。當信號傳輸距離達10Km 時CAN 仍可提供高達50Kbit/s 的數(shù)據(jù)傳輸速率。CAN 具有十分優(yōu)越的特點:
現(xiàn)場總線是當今自動化領域技術發(fā)展的熱點之一,被譽為自動化領域的計算機局域網(wǎng)。它的出現(xiàn)為分布式控制系統(tǒng)實現(xiàn)各節(jié)點之間實時、可靠的數(shù)據(jù)通信提供了強有力的技術支持。CAN(Controller Area Network)屬于現(xiàn)場總線的范疇,它是一種有效支持分布式控制或實時控制的串行通信網(wǎng)絡。較之目前許多RS-485基于R線構建的分布式控制系統(tǒng)而言, 基于CAN總線的分布式控制系統(tǒng)在以下方面具有明顯的優(yōu)越性:
CAN (Controller Area Network)即控制器局域網(wǎng)絡,屬于工業(yè)現(xiàn)場總線的范疇。與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實時性和靈活性。由于其良好的性能及獨特的設計,CAN總線越來越受到人們的重視。它在汽車領域上的應用是最廣泛的,世界上一些著名的汽車制造廠商,如BENZ(奔馳)、BMW(寶馬)、PORSCHE(保時捷)、ROLLS-ROYCE(勞斯萊斯)和JAGUAR(美洲豹)等都采用了CAN總線來實現(xiàn)汽車內部控制系統(tǒng)與各檢測和執(zhí)行機構間的數(shù)據(jù)通信。同時,由于CAN總線本身的特點,其應用范圍目前已不再局限于汽車行業(yè),而向自動控制、航空航天、航海、過程工業(yè)、機械工業(yè)、紡織機械、農用機械、機器人、數(shù)控機床、醫(yī)療器械及傳感器等領域發(fā)展。CAN已經(jīng)形成國際標準,并已被公認為幾種最有前途的現(xiàn)場總線之一。其典型的應用協(xié)議有: SAE J1939/ISO11783、CANOpen、CANaerospace、DeviceNet、NMEA 2000等。
什么是CAN總線?
CAN意為Controller Area Network的縮寫,意為控制區(qū)域網(wǎng)絡。是國際上流行的現(xiàn)場總線中的一種。是一種特別適合于組建互連的設備網(wǎng)絡系統(tǒng)或子系統(tǒng)。
2. CAN總線特點?
l CAN是到目前為止為數(shù)不多的有國際標準的現(xiàn)場總線
l CAN通訊距離最大是10公里(設速率為5Kbps),或最大通信速率為1Mbps(設通信距離為40米)。