I2C SPI UART和CAN通信協(xié)議的區(qū)別
第一:
SPI(Serial Peripheral Interface:串行外設(shè)接口); I2C(INTER IC BUS);UART(Universal Asynchronous Receiver Transmitter:通用異步收發(fā)器)
第二,區(qū)別在電氣信號(hào)線上:
SPI總線由三條信號(hào)線組成:串行時(shí)鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸入(SDI)。SPI總線可以實(shí)現(xiàn)多個(gè)SPI設(shè)備互相連接。提供SPI串行時(shí)鐘的SPI設(shè)備為SPI主機(jī)或主設(shè)備(Master),其他設(shè)備為SPI從機(jī)或從設(shè)備(Slave)。主從設(shè)備間可以實(shí)現(xiàn)全雙工通信,當(dāng)有多個(gè)從設(shè)備時(shí),還可以增加一條從設(shè)備選擇線。 如果用通用IO口模擬SPI總線,必須要有一個(gè)輸出口(SDO),一個(gè)輸入口(SDI),另一個(gè)口則視實(shí)現(xiàn)的設(shè)備類型而定,如果要實(shí)現(xiàn)主從設(shè)備,則需輸入輸出口,若只實(shí)現(xiàn)主設(shè)備,則需輸出口即可,若只實(shí)現(xiàn)從設(shè)備,則只需輸入口即可。
I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標(biāo)準(zhǔn),具有總線仲裁機(jī)制,非常適合在器件之間進(jìn)行近距離、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中,傳輸數(shù)據(jù)時(shí)都會(huì)帶上目的設(shè)備的設(shè)備地址,因此可以實(shí)現(xiàn)設(shè)備組網(wǎng)。 如果用通用IO口模擬I2C總線,并實(shí)現(xiàn)雙向傳輸,則需一個(gè)輸入輸出口(SDA),另外還需一個(gè)輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)
UART總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。顯然,如果用通用IO口模擬UART總線,則需一個(gè)輸入口,一個(gè)輸出口。
第三,從第二點(diǎn)明顯可以看出,SPI和UART可以實(shí)現(xiàn)全雙工,但I(xiàn)2C不行;
個(gè)人認(rèn)為:
I2C線更少,我覺(jué)得比UART、SPI更為強(qiáng)大,但是技術(shù)上也更加麻煩些,因?yàn)镮2C需要有雙向IO的支持,而且使用上拉電阻,我覺(jué)得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠(yuǎn)距離通信。SPI實(shí)現(xiàn)要簡(jiǎn)單一些,UART需要固定的波特率,就是說(shuō)兩位數(shù)據(jù)的間隔要相等,而SPI則無(wú)所謂,因?yàn)樗怯袝r(shí)鐘的協(xié)議。
I2C的速度比SPI慢一點(diǎn),協(xié)議比SPI復(fù)雜一點(diǎn),但是連線也比標(biāo)準(zhǔn)的SPI要少。
SPI總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。外圍設(shè)置FLASHRAM、網(wǎng)絡(luò)控制器、LCD顯示驅(qū)動(dòng)器、A/D轉(zhuǎn)換器和MCU等。SPI總線系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,該接口一般使用4條線:串行時(shí)鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOST和低電平有效的從機(jī)選擇線SS(有的SPI接口芯片帶有中斷信號(hào)線INT或INT、有的SPI接口芯片沒(méi)有主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI)。
SPI的通信原理很簡(jiǎn)單,它以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,需要至少4根線,事實(shí)上3根也可以(單向傳輸時(shí))。也是所有基于SPI的設(shè)備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時(shí)鐘),CS(片選)。
(1)SDO – 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入
(2)SDI – 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出
(3)SCLK – 時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生
(4)CS – 從設(shè)備使能信號(hào),由主設(shè)備控制
其中CS是控制芯片是否被選中的,也就是說(shuō)只有片選信號(hào)為預(yù)先規(guī)定的使能信號(hào)時(shí)(高電位或低電位),對(duì)此芯片的操作才有效。這就允許在同一總線上連接多個(gè)SPI設(shè)備成為可能。
接下來(lái)就負(fù)責(zé)通訊的3根線了。通訊是通過(guò)數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說(shuō)數(shù)據(jù)是一位一位的傳輸?shù)?。這就是SCK時(shí)鐘線存在的原因,由SCK提供時(shí)鐘脈沖,SDI,SDO則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過(guò) SDO線,數(shù)據(jù)在時(shí)鐘上升沿或下降沿時(shí)改變,在緊接著的下降沿或上升沿被讀取。完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理。這樣,在至少8次時(shí)鐘信號(hào)的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸。
要注意的是,SCK信號(hào)線只由主設(shè)備控制,從設(shè)備不能控制信號(hào)線。同樣,在一個(gè)基于SPI的設(shè)備中,至少有一個(gè)主控設(shè)備。這樣傳輸?shù)奶攸c(diǎn):這樣的傳輸方式有一個(gè)優(yōu)點(diǎn),與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停,因?yàn)镾CK時(shí)鐘線由主控設(shè)備控制,當(dāng)沒(méi)有時(shí)鐘跳變時(shí),從設(shè)備不采集或傳送數(shù)據(jù)。也就是說(shuō),主設(shè)備通過(guò)對(duì)SCK時(shí)鐘線的控制可以完成對(duì)通訊的控制。SPI還是一個(gè)數(shù)據(jù)交換協(xié)議:因?yàn)镾PI的數(shù)據(jù)輸入和輸出線獨(dú)立,所以允許同時(shí)完成數(shù)據(jù)的輸入和輸出。不同的SPI設(shè)備的實(shí)現(xiàn)方式不盡相同,主要是數(shù)據(jù)改變和采集的時(shí)間不同,在時(shí)鐘信號(hào)上沿或下沿采集有不同定義,具體請(qǐng)參考相關(guān)器件的文檔。
在點(diǎn)對(duì)點(diǎn)的通信中,SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,顯得簡(jiǎn)單高效。在多個(gè)從設(shè)備的系統(tǒng)中,每個(gè)從設(shè)備需要獨(dú)立的使能信號(hào),硬件上比I2C系統(tǒng)要稍微復(fù)雜一些。
最后,SPI接口的一個(gè)缺點(diǎn):沒(méi)有指定的流控制,沒(méi)有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。
AT91RM9200的SPI接口主要由4個(gè)引腳構(gòu)成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整個(gè)SPI總線的公用時(shí)鐘,MOSI、MISO作為主機(jī),從機(jī)的輸入輸出的標(biāo)志,MOSI是主機(jī)的輸出,從機(jī)的輸入,MISO 是主機(jī)的輸入,從機(jī)的輸出。/SS是從機(jī)的標(biāo)志管腳,在互相通信的兩個(gè)SPI總線的器件,/SS管腳的電平低的是從機(jī),相反/SS管腳的電平高的是主機(jī)。在一個(gè)SPI通信系統(tǒng)中,必須有主機(jī)。SPI總線可以配置成單主單從,單主多從,互為主從。SPI的片選可以擴(kuò)充選擇16個(gè)外設(shè),這時(shí)PCS輸出=NPCS,說(shuō)NPCS0~3接4-16譯碼器,這個(gè)譯碼器是需要外接4-16譯碼器,譯碼器的輸入為NPCS0~3,輸出用于16個(gè)外設(shè)的選擇。
SPI協(xié)議舉例
SPI是一個(gè)環(huán)形總線結(jié)構(gòu),由ss(cs)、sck、sdi、sdo構(gòu)成,其時(shí)序其實(shí)很簡(jiǎn)單,主要是在sck的控制下,兩個(gè)雙向移位寄存器進(jìn)行數(shù)據(jù)交換。
假設(shè)下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。
那么第一個(gè)上升沿來(lái)的時(shí)候 數(shù)據(jù)將會(huì)是sdo=1;寄存器=0101010x。下降沿到來(lái)的時(shí)候,sdi上的電平將所存到寄存器中去,那么這時(shí)寄存器=0101010sdi,這樣在 8個(gè)時(shí)鐘脈沖以后,兩個(gè)寄存器的內(nèi)容互相交換一次。這樣就完成里一個(gè)spi時(shí)序。
舉例:
假設(shè)主機(jī)和從機(jī)初始化就緒:并且主機(jī)的sbuff=0xaa,從機(jī)的sbuff=0x55,下面將分步對(duì)spi的8個(gè)時(shí)鐘周期的數(shù)據(jù)情況演示一遍:假設(shè)上升沿發(fā)送數(shù)據(jù)
這樣就完成了兩個(gè)寄存器8位的交換,,sdi、sdo相對(duì)于主機(jī)而言的。其中ss引腳作為主機(jī)的時(shí)候,從機(jī)可以把它拉底被動(dòng)選為從機(jī),作為從機(jī)的是時(shí)候,可以作為片選腳用。根據(jù)以上分析,一個(gè)完整的傳送周期是16位,即兩個(gè)字節(jié),因?yàn)椋紫戎鳈C(jī)要發(fā)送命令過(guò)去,然后從機(jī)根據(jù)主機(jī)的命令準(zhǔn)備數(shù)據(jù),主機(jī)在下一個(gè)8位時(shí)鐘周期才把數(shù)據(jù)讀回來(lái)。 SPI 總線是Motorola公司推出的三線同步接口,同步串行3線方式進(jìn)行通信:一條時(shí)鐘線SCK,一條數(shù)據(jù)輸入線OSI,一條數(shù)據(jù)輸出線MISO;用于CPU與各種外圍器件進(jìn)行全雙工、同步串行通訊。SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束 中斷標(biāo)志;寫沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。下圖示出SPI總線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式 (實(shí)線表示):
SPI總線四種工作方式 SPI 模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒(méi)有重大的影響。如果 CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。
SPI總線包括1根串行同步時(shí)鐘信號(hào)線以及2根數(shù)據(jù)線。
SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒(méi)有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)音時(shí)鐘相位和極性應(yīng)該一致。
補(bǔ)充:
上文中最后一句話:SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。個(gè)人理解這句話有2層意思:其一,主設(shè)備SPI時(shí)鐘和極性的配置應(yīng)該由外設(shè)來(lái)決定;其二,二者的配置應(yīng)該保持一致,即主設(shè)備的SDO同從設(shè)備的SDO配置一致,主設(shè)備的SDI同從設(shè)備的SDI配置一致。因?yàn)橹鲝脑O(shè)備是在SCLK的控制下,同時(shí)發(fā)送和接收數(shù)據(jù),并通過(guò)2個(gè)雙向移位寄存器來(lái)交換數(shù)據(jù)。
上升沿主機(jī)SDO發(fā)送數(shù)據(jù)1,同時(shí)從設(shè)備SDO發(fā)送數(shù)據(jù)0;緊接著在SCLK的下降沿的時(shí)候從設(shè)備的SDI接收到了主機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)1,同時(shí)主機(jī)也接收到了從設(shè)備發(fā)送過(guò)來(lái)的數(shù)據(jù)0.
SPI協(xié)議心得
SPI接口時(shí)鐘配置心得:
在主設(shè)備這邊配置SPI接口時(shí)鐘的時(shí)候一定要弄清楚從設(shè)備的時(shí)鐘要求,因?yàn)橹髟O(shè)備這邊的時(shí)鐘極性和相位都是以從設(shè)備為基準(zhǔn)的。因此在時(shí)鐘極性的配置上一定要搞清楚從設(shè)備是在時(shí)鐘的上升沿還是下降沿接收數(shù)據(jù),是在時(shí)鐘的下降沿還是上升沿輸出數(shù)據(jù)。但要注意的是,由于主設(shè)備的SDO連接從設(shè)備的SDI,從設(shè)備的SDO連接主設(shè)備的SDI,從設(shè)備SDI接收的數(shù)據(jù)是主設(shè)備的SDO發(fā)送過(guò)來(lái)的,主設(shè)備SDI接收的數(shù)據(jù)是從設(shè)備SDO發(fā)送過(guò)來(lái)的,所以主設(shè)備這邊SPI時(shí)鐘極性的配置(即SDO的配置)跟從設(shè)備的SDI接收數(shù)據(jù)的極性是相反的,跟從設(shè)備SDO發(fā)送數(shù)據(jù)的極性是相同的。下面這段話是Sychip Wlan8100 Module Spec上說(shuō)的,充分說(shuō)明了時(shí)鐘極性是如何配置的:
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.
意思是:主設(shè)備在時(shí)鐘的下降沿發(fā)送數(shù)據(jù),從設(shè)備在時(shí)鐘的上升沿接收數(shù)據(jù)。因此主設(shè)備這邊SPI時(shí)鐘極性應(yīng)該配置為下降沿有效。
又如,下面這段話是摘自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.
意思是:從設(shè)備SSD1289在時(shí)鐘的上升沿接收數(shù)據(jù),而且是按照從高位到地位的順序接收數(shù)據(jù)的。因此主設(shè)備的SPI時(shí)鐘極性同樣應(yīng)該配置為下降沿有效。
時(shí)鐘極性和相位配置正確后,數(shù)據(jù)才能夠被準(zhǔn)確的發(fā)送和接收。因此應(yīng)該對(duì)照從設(shè)備的SPI接口時(shí)序或者Spec文檔說(shuō)明來(lái)正確配置主設(shè)備的時(shí)鐘。
軟件過(guò)程改進(jìn)
SPI: Software Process Improvement. 軟件過(guò)程改進(jìn)。是軟件企業(yè)項(xiàng)目過(guò)程質(zhì)量的改進(jìn),CMM,ISO9000-3說(shuō)的就是這個(gè)。
UART
開(kāi)放分類: 計(jì)算機(jī)、通信、信息
UART: Universal Asynchronous Receiver/Transmitter,通用異步接收/發(fā)送裝置,UART是一個(gè)并行輸入成為串行輸出的芯片,通常集成在主板上,多數(shù)是16550AFN芯片。因?yàn)橛?jì)算機(jī)內(nèi)部采用并行數(shù)據(jù)數(shù)據(jù),不能直接把數(shù)據(jù)發(fā)到Modem,必須經(jīng)過(guò)UART整理才能進(jìn)行異步傳輸,其過(guò)程為:CPU先把準(zhǔn)備寫入串行設(shè)備的數(shù)據(jù)放到UART的寄存器(臨時(shí)內(nèi)存塊)中,再通過(guò)FIFO(First Input First Output,先入先出隊(duì)列)傳送到串行設(shè)備,若是沒(méi)有FIFO,信息將變得雜亂無(wú)章,不可能傳送到Modem。
它是用于控制計(jì)算機(jī)與串行設(shè)備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。作為接口的一部分,UART還提供以下功能:將由計(jì)算機(jī)內(nèi)部傳送過(guò)來(lái)的并行數(shù)據(jù)轉(zhuǎn)換為輸出的串行數(shù)據(jù)流。將計(jì)算機(jī)外部來(lái)的串行數(shù)據(jù)轉(zhuǎn)換為字節(jié),供計(jì)算機(jī)內(nèi)部使用并行數(shù)據(jù)的器件使用。在輸出的串行數(shù)據(jù)流中加入奇偶校驗(yàn)位,并對(duì)從外部接收的數(shù)據(jù)流進(jìn)行奇偶校驗(yàn)。在輸出數(shù)據(jù)流中加入啟停標(biāo)記,并從接收數(shù)據(jù)流中刪除啟停標(biāo)記。處理由鍵盤或鼠標(biāo)發(fā)出的中斷信號(hào)(鍵盤和鼠標(biāo)也是串行設(shè)備)??梢蕴幚碛?jì)算機(jī)與外部串行設(shè)備的同步管理問(wèn)題。有一些比較高檔的UART還提供輸入輸出數(shù)據(jù)的緩沖區(qū),現(xiàn)在比較新的UART是16550,它可以在計(jì)算機(jī)需要處理數(shù)據(jù)前在其緩沖區(qū)內(nèi)存儲(chǔ)16字節(jié)數(shù)據(jù),而通常的UART是8250。現(xiàn)在如果您購(gòu)買一個(gè)內(nèi)置的調(diào)制解調(diào)器,此調(diào)制解調(diào)器內(nèi)部通常就會(huì)有16550 UART。
區(qū)別在電氣信號(hào)線上:
SPI總線由三條信號(hào)線組成:串行時(shí)鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸入(SDI)。SPI總線可以實(shí)現(xiàn) 多個(gè)SPI設(shè)備互相連接。提供SPI串行時(shí)鐘的SPI設(shè)備為SPI主機(jī)或主設(shè)備(Master),其他設(shè)備為SPI從機(jī)或從設(shè)備(Slave)。主從設(shè)備間可以實(shí)現(xiàn)全雙工通信,當(dāng)有多個(gè)從設(shè)備時(shí),還可以增加一條從設(shè)備選擇線。
如果用通用IO口模擬SPI總線,必須要有一個(gè)輸出口(SDO),一個(gè)輸入口(SDI),另一個(gè)口則視實(shí)現(xiàn)的設(shè)備類型而定,如果要實(shí)現(xiàn)主從設(shè)備,則需輸入輸出口,若只實(shí)現(xiàn)主設(shè)備,則需輸出口即可,若只實(shí)現(xiàn)從設(shè)備,則只需輸入口即可。
I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標(biāo)準(zhǔn),具有總線仲裁機(jī)制,非常適合在器件之間進(jìn)行近距離、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中,傳輸數(shù)據(jù)時(shí)都會(huì)帶上目的設(shè)備的設(shè)備地址,因此可以實(shí)現(xiàn)設(shè)備組網(wǎng)。
如果用通用IO口模擬I2C總線,并實(shí)現(xiàn)雙向傳輸,則需一個(gè)輸入輸出口(SDA),另外還需一個(gè)輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)
UART總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。
顯然,如果用通用IO口模擬UART總線,則需一個(gè)輸入口,一個(gè)輸出口。
從以上很明顯可以看出,SPI和UART可以實(shí)現(xiàn)全雙工,但I(xiàn)2C不行;
第四,看看牛人們的意見(jiàn)吧!
A:I2C線更少,我覺(jué)得比UART、SPI更為強(qiáng)大,但是技術(shù)上也更加麻煩些,因?yàn)镮2C需要有雙向IO的支持,而且使用上拉電阻,我覺(jué)得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠(yuǎn)距離通信。SPI實(shí)現(xiàn)要簡(jiǎn)單一些,UART需要固定的波特率,就是說(shuō)兩位數(shù)據(jù)的間隔要相等,而SPI則無(wú)所謂,因?yàn)樗怯袝r(shí)鐘的協(xié)議。
B:I2C的速度比SPI慢一點(diǎn),協(xié)議比SPI復(fù)雜一點(diǎn),但是連線也比標(biāo)準(zhǔn)的SPI要少。
-----------------------------------------------------------------------------------------------------------------------------------
SPI 是一種允許一個(gè)主設(shè)備啟動(dòng)一個(gè)與從設(shè)備的同步通訊的協(xié)議,從而完成數(shù)據(jù)的交換。也就是SPI是一種規(guī)定好的通訊方式。這種通信方式的優(yōu)點(diǎn)是占用端口較少,一般4根就夠基本通訊了。同時(shí)傳輸速度也很高。一般來(lái)說(shuō)要求主設(shè)備要有SPI控制器(但可用模擬方式),就可以與基于SPI的芯片通訊了。
SPI 的通信原理很簡(jiǎn)單,它需要至少4根線,事實(shí)上3根也可以。也是所有基于SPI的設(shè)備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時(shí) 鐘),CS(片選)。其中CS是控制芯片是否被選中的,也就是說(shuō)只有片選信號(hào)為預(yù)先規(guī)定的使能信號(hào)時(shí)(高電位或低電位),對(duì)此芯片的操作才有效。這就允許 在同一總線上連接多個(gè)SPI設(shè)備成為可能。
接下來(lái)就負(fù)責(zé)通訊的3根線了。通訊是通過(guò)數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說(shuō)數(shù)據(jù)是一位一位的傳輸?shù)?。這就是SCK時(shí)鐘線存在的原 因,由SCK提供時(shí)鐘脈沖,SDI,SDO則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過(guò)SDO線,數(shù)據(jù)在時(shí)鐘上沿或下沿時(shí)改變,在緊接著的下沿或上沿被讀取。 完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理。這樣,在至少8次時(shí)鐘信號(hào)的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸。
要注意的是,SCK信號(hào)線只由主設(shè)備控制,從設(shè)備不能控制信號(hào)線。同樣,在一個(gè)基于SPI的設(shè)備中,至少有一個(gè)主控設(shè)備。
這樣傳輸?shù)奶攸c(diǎn):這樣的傳輸方式有一個(gè)優(yōu)點(diǎn),與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停,因?yàn)镾CK時(shí)鐘線由主控設(shè)備控制,當(dāng)沒(méi)有時(shí)鐘跳變時(shí),從設(shè)備不采集或傳送數(shù)據(jù)。也就是說(shuō),主設(shè)備通過(guò)對(duì)SCK時(shí)鐘線的控制可以完成對(duì)通訊的控制。
SPI還是一個(gè)數(shù)據(jù)交換協(xié)議:因?yàn)镾PI的數(shù)據(jù)輸入和輸出線獨(dú)立,所以允許同時(shí)完成數(shù)據(jù)的輸入和輸出。
不同的SPI設(shè)備的實(shí)現(xiàn)方式不盡相同,主要是數(shù)據(jù)改變和采集的時(shí)間不同,在時(shí)鐘信號(hào)上沿或下沿采集有不同定義,具體請(qǐng)參考相關(guān)器件的文檔。
I2C
? 只要求兩條總線線路:一條串行數(shù)據(jù)線SDA 一條串行時(shí)鐘線SCL
? 每個(gè)連接到總線的器件都可以通過(guò)唯一的地址和一直存在的簡(jiǎn)單的主機(jī)從機(jī)關(guān)系軟件設(shè)定地址主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器
? 它是一個(gè)真正的多主機(jī)總線如果兩個(gè)或更多主機(jī)同時(shí)初始化數(shù)據(jù)傳輸可以通過(guò)沖突檢測(cè)和仲裁,防止數(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總線,則需一個(gè)輸入口,一個(gè)輸出口。
UART常用于控制計(jì)算機(jī)與串行設(shè)備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。
明顯可以看出,SPI和UART可以實(shí)現(xiàn)全雙工,但I(xiàn)2C不行。
-----------------------------------------------------------------------------------------------------------------------------------
什么是CAN總線?
===========================
CAN 全稱為Controller Area Network,即控制器局域網(wǎng),由德國(guó)Bosch 公司最先提出,是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。CAN 是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有高的位速率、高抗電磁干擾性,而且要能夠檢測(cè)出總線的任何錯(cuò)誤。當(dāng)信號(hào)傳輸距離達(dá)10Km 時(shí)CAN 仍可提供高達(dá)50Kbit/s 的數(shù)據(jù)傳輸速率。CAN 具有十分優(yōu)越的特點(diǎn):
A、較低的成本與極高的總線利用率;
B、 數(shù)據(jù)傳輸距離可長(zhǎng)達(dá)10Km,傳輸速率可高達(dá)1Mbit/s;
C、可靠的錯(cuò)誤處理和檢錯(cuò)機(jī)制,發(fā)送的信息遭到破壞后可自動(dòng)重發(fā);
D、節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)退出總線的功能;
E、報(bào)文不包含源地址或目標(biāo)地址僅用標(biāo)志符來(lái)指示功能信息和優(yōu)先級(jí)信息;
由于人為、自然、其它外界環(huán)境的影響和人們對(duì)公交系統(tǒng)的安全可靠性、真實(shí)、實(shí)時(shí)性的追求,使得我們對(duì)通信方式,通信設(shè)備有了更高的要求,基于CAN總線的網(wǎng)絡(luò)則成為我們最佳的選擇
--------------------------------------------------------------------------------------------------------
CAN總線
現(xiàn)場(chǎng)總線是當(dāng)今自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域的計(jì)算機(jī)局域網(wǎng)。它的出現(xiàn)為分布式控制系統(tǒng)實(shí)現(xiàn)各節(jié)點(diǎn)之間實(shí)時(shí)、可靠的數(shù)據(jù)通信提供了強(qiáng)有力的技術(shù)支持。CAN(Controller Area Network)屬于現(xiàn)場(chǎng)總線的范疇,它是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò)。較之目前許多RS-485基于R線構(gòu)建的分布式控制系統(tǒng)而言, 基于CAN總線的分布式控制系統(tǒng)在以下方面具有明顯的優(yōu)越性:
首先,CAN控制器工作于多主方式,網(wǎng)絡(luò)中的各節(jié)點(diǎn)都可根據(jù)總線訪問(wèn)優(yōu)先權(quán)(取決于報(bào)文標(biāo)識(shí)符)采用無(wú)損結(jié)構(gòu)的逐位仲裁的方式競(jìng)爭(zhēng)向總線發(fā)送數(shù)據(jù),且CAN協(xié)議廢除了站地址編碼,而代之以對(duì)通信數(shù)據(jù)進(jìn)行編碼,這可使不同的節(jié)點(diǎn)同時(shí)接收到相同的數(shù)據(jù),這些特點(diǎn)使得CAN總線構(gòu)成的網(wǎng)絡(luò)各節(jié)點(diǎn)之間的數(shù)據(jù)通信實(shí)時(shí)性強(qiáng),并且容易構(gòu)成冗余結(jié)構(gòu),提高系統(tǒng)的可靠性和系統(tǒng)的靈活性。而利用RS-485只能構(gòu)成主從式結(jié)構(gòu)系統(tǒng),通信方式也只能以主站輪詢的方式進(jìn)行,系統(tǒng)的實(shí)時(shí)性、可靠性較差;
其次,CAN總線通過(guò)CAN控制器接口芯片82C250的兩個(gè)輸出端CANH和CANL與物理總線相連,而CANH端的狀態(tài)只能是高電平或懸浮狀態(tài),CANL端只能是低電平或懸浮狀態(tài)。這就保證不會(huì)出現(xiàn)象在RS-485網(wǎng)絡(luò)中,當(dāng)系統(tǒng)有錯(cuò)誤,出現(xiàn)多節(jié)點(diǎn)同時(shí)向總線發(fā)送數(shù)據(jù)時(shí),導(dǎo)致總線呈現(xiàn)短路,從而損壞某些節(jié)點(diǎn)的現(xiàn)象。而且CAN節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)關(guān)閉輸出功能,以使總線上其他節(jié)點(diǎn)的操作不受影響,從而保證不會(huì)出現(xiàn)象在網(wǎng)絡(luò)中,因個(gè)別節(jié)點(diǎn)出現(xiàn)問(wèn)題,使得總線處于“死鎖”狀態(tài)。
而且,CAN具有的完善的通信協(xié)議可由CAN控制器芯片及其接口芯片來(lái)實(shí)現(xiàn),從而大大降低系統(tǒng)開(kāi)發(fā)難度,縮短了開(kāi)發(fā)周期,這些是只僅僅有電氣協(xié)議的RS-485所無(wú)法比擬的。另外,與其它現(xiàn)場(chǎng)總線比較而言,CAN總線是具有通信速率高、容易實(shí)現(xiàn)、且性價(jià)比高等諸多特點(diǎn)的一種已形成國(guó)際標(biāo)準(zhǔn)的現(xiàn)場(chǎng)總線。這些也是目前 CAN總線應(yīng)用于眾多領(lǐng)域,具有強(qiáng)勁的市場(chǎng)競(jìng)爭(zhēng)力的重要原因。
CAN (Controller Area Network)即控制器局域網(wǎng)絡(luò),屬于工業(yè)現(xiàn)場(chǎng)總線的范疇。與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性。由于其良好的性能及獨(dú)特的設(shè)計(jì),CAN總線越來(lái)越受到人們的重視。它在汽車領(lǐng)域上的應(yīng)用是最廣泛的,世界上一些著名的汽車制造廠商,如BENZ(奔馳)、BMW(寶馬)、PORSCHE(保時(shí)捷)、ROLLS-ROYCE(勞斯萊斯)和JAGUAR(美洲豹)等都采用了CAN總線來(lái)實(shí)現(xiàn)汽車內(nèi)部控制系統(tǒng)與各檢測(cè)和執(zhí)行機(jī)構(gòu)間的數(shù)據(jù)通信。同時(shí),由于CAN總線本身的特點(diǎn),其應(yīng)用范圍目前已不再局限于汽車行業(yè),而向自動(dòng)控制、航空航天、航海、過(guò)程工業(yè)、機(jī)械工業(yè)、紡織機(jī)械、農(nóng)用機(jī)械、機(jī)器人、數(shù)控機(jī)床、醫(yī)療器械及傳感器等領(lǐng)域發(fā)展。CAN已經(jīng)形成國(guó)際標(biāo)準(zhǔn),并已被公認(rèn)為幾種最有前途的現(xiàn)場(chǎng)總線之一。其典型的應(yīng)用協(xié)議有: SAE J1939/ISO11783、CANOpen、CANaerospace、DeviceNet、NMEA 2000等。
什么是CAN總線?
CAN意為Controller Area Network的縮寫,意為控制區(qū)域網(wǎng)絡(luò)。是國(guó)際上流行的現(xiàn)場(chǎng)總線中的一種。是一種特別適合于組建互連的設(shè)備網(wǎng)絡(luò)系統(tǒng)或子系統(tǒng)。
2. CAN總線特點(diǎn)?
l CAN是到目前為止為數(shù)不多的有國(guó)際標(biāo)準(zhǔn)的現(xiàn)場(chǎng)總線
l CAN通訊距離最大是10公里(設(shè)速率為5Kbps),或最大通信速率為1Mbps(設(shè)通信距離為40米)。
CAN總線上的節(jié)點(diǎn)數(shù)可達(dá)110個(gè)。通信介質(zhì)可在雙絞線,同軸電纜,光纖中選擇。
CAN采用非破壞性的總線仲裁技術(shù),當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送數(shù)據(jù)時(shí),優(yōu)先級(jí)低的節(jié)點(diǎn)會(huì)主動(dòng)退出發(fā)送,高優(yōu)先級(jí)的節(jié)點(diǎn)可繼續(xù)發(fā)送,節(jié)省總線仲裁時(shí)間。
CAN是多主方式工作,網(wǎng)上的任一節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)地向網(wǎng)絡(luò)上其他節(jié)點(diǎn)發(fā)送信息。
CAN采用報(bào)文識(shí)別符識(shí)別網(wǎng)絡(luò)上的節(jié)點(diǎn),從而把節(jié)點(diǎn)分成不同的優(yōu)先級(jí),高優(yōu)先級(jí)的節(jié)點(diǎn)享有傳送報(bào)文的優(yōu)先權(quán)。
報(bào)文是短幀結(jié)構(gòu),短的傳送時(shí)間使其受干擾概率低,CAN有很好的效驗(yàn)機(jī)制,這些都保證了CAN通信的可靠性。
-----------------------------------------------------------------------------------------------------------------------------------
SPI通常有SCK時(shí)鐘,STB片選,DATA數(shù)據(jù)信號(hào)三個(gè)信號(hào)。 I2C通常有 SDA數(shù)據(jù)和SCL時(shí)鐘兩個(gè)信號(hào)。
SPI:Motorola推出的同步串行通訊方式,三線同步總線,硬件強(qiáng)大,軟件相對(duì)簡(jiǎn)單,cpu有更多時(shí)間處理其他事務(wù)。SCK時(shí)鐘,STB片選,DATA數(shù)據(jù)信號(hào)三信號(hào)。多了一個(gè)片選信號(hào)
I2C:PHilips推出的串行總線,一根SDA串行數(shù)據(jù)線,一根串行時(shí)鐘線SCL。按照地址來(lái)計(jì)算的
-----------------------------------------------------------------------------------------------------------------------------------
UART
Universival Asychronous Receiver/Transmitter(通用異步串行口),UART是一種較為通用的數(shù)據(jù)傳輸?shù)姆椒ǎ碨tart Bit+Data+Check+StopBit),而COM口中Rx、Tx的數(shù)據(jù)格式即為UART。UART和RS232是兩種異步數(shù)據(jù)傳輸標(biāo)準(zhǔn).計(jì)算機(jī)中的COM1和COM2都是RS232串行通信標(biāo)準(zhǔn)接口。當(dāng)Uart接口連到PC機(jī)上時(shí),需要接RS232電平轉(zhuǎn)換電路。
UART使用發(fā)送數(shù)據(jù)線TXD和接收數(shù)據(jù)線RXD來(lái)傳送數(shù)據(jù),接收和發(fā)送可以單獨(dú)進(jìn)行也可以同時(shí)進(jìn)行。它傳送數(shù)據(jù)的格式有嚴(yán)格的規(guī)定,每個(gè)數(shù)據(jù)以相同的位串形式傳送,每個(gè)串行數(shù)據(jù)由起始位,數(shù)據(jù)位,奇偶校驗(yàn)位和停止位組成。從起始位到停止位結(jié)束的時(shí)間稱為一幀(frame),即一個(gè)字符的完整通信格式。
SPI
Serial Perheral Interface,是一種全雙工同步串行接口標(biāo)準(zhǔn),串行通信的雙方用四根線進(jìn)行通信,這四根連線分別是:片選信號(hào),I/O時(shí)鐘,串行輸入,串行輸出,這種接口的特點(diǎn)是快速,高效,并且操作起來(lái)比I2C要簡(jiǎn)單一些,接線也比較簡(jiǎn)單,TLC2543提供SPI接口。
I2C
Inter-Integrated Circuit(集成電路之間), I2C總線是一種由PHILIPS公司開(kāi)發(fā)的兩線式雙向串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開(kāi)發(fā),如今主要在服務(wù)器管理中使用,其中包括單個(gè)組件狀態(tài)的通信。例如管理員可對(duì)各個(gè)組件進(jìn)行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇??呻S時(shí)監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個(gè)參數(shù),增加了系統(tǒng)的安全性,方便了管理。I2C屬于兩線式串行總線,它由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址,在信息的傳輸過(guò)程中,IC2總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號(hào)分為地址碼和控制量?jī)刹糠郑刂反a用來(lái)選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對(duì)比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。
CAN
Controller Area Network(區(qū)域網(wǎng)絡(luò)控制器),CAN 全稱為Controller Area Network,即控制器局域網(wǎng),由德國(guó)Bosch 公司最先提出,是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。CAN 是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有高的位速率、高抗電磁干擾性,而且要能夠檢測(cè)出總線的任何錯(cuò)誤。當(dāng)信號(hào)傳輸距離達(dá)10Km 時(shí)CAN 仍可提供高達(dá)50Kbit/s 的數(shù)據(jù)傳輸速率?,F(xiàn)場(chǎng)總線是當(dāng)今自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域的計(jì)算機(jī)局域網(wǎng)。它的出現(xiàn)為分布式控制系統(tǒng)實(shí)現(xiàn)各節(jié)點(diǎn)之間實(shí)時(shí)、可靠的數(shù)據(jù)通信提供了強(qiáng)有力的技術(shù)支持。CAN屬于現(xiàn)場(chǎng)總線的范疇,它是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò)。較之目前許多RS-485基于R線構(gòu)建的分布式控制系統(tǒng)而言, 基于CAN總線的分布式控制系統(tǒng)具有明顯的優(yōu)越性。
第一,名稱
spi(serial peripheral interface:串行外設(shè)接口);
i2c(inter ic bus:意為ic之間總線)
uart(universal asynchronous receiver transmitter:通用異步收發(fā)器)
第二,區(qū)別在電氣信號(hào)線上:
spi總線由三條信號(hào)線組成:串行時(shí)鐘(sclk)、串行數(shù)據(jù)輸出(sdo)、串行數(shù)據(jù)輸入(sdi)。spi總線可以實(shí)現(xiàn) 多個(gè)spi設(shè)備互相連接。提供spi串行時(shí)鐘的spi設(shè)備為spi主機(jī)或主設(shè)備(master),其他設(shè)備為spi從機(jī)或從設(shè)備(slave)。主從設(shè)備間可以實(shí)現(xiàn)全雙工通信,當(dāng)有多個(gè)從設(shè)備時(shí),還可以增加一條從設(shè)備選擇線。
如果用通用io口模擬spi總線,必須要有一個(gè)輸出口(sdo),一個(gè)輸入口(sdi),另一個(gè)口則視實(shí)現(xiàn)的設(shè)備類型而定,如果要實(shí)現(xiàn)主從設(shè)備,則需輸入輸出口,若只實(shí)現(xiàn)主設(shè)備,則需輸出口即可,若只實(shí)現(xiàn)從設(shè)備,則只需輸入口即可。
i2c總線是雙向、兩線(scl、sda)、串行、多主控(multi-master)接口標(biāo)準(zhǔn),具有總線仲裁機(jī)制,非常適合在器件之間進(jìn)行近距離、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中,傳輸數(shù)據(jù)時(shí)都會(huì)帶上目的設(shè)備的設(shè)備地址,因此可以實(shí)現(xiàn)設(shè)備組網(wǎng)。
如果用通用io口模擬i2c總線,并實(shí)現(xiàn)雙向傳輸,則需一個(gè)輸入口(sda),另外還需一個(gè)輸出口(scl)。(注:i2c資料了解得比較少,這里的描述可能很不完備)
uart總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、uart接收器、uart發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。
顯然,如果用通用io口模擬uart總線,則需一個(gè)輸入口,一個(gè)輸出口。
第三,從第二點(diǎn)明顯可以看出,spi和uart可以實(shí)現(xiàn)全雙工,但i2c不行;
第四,看看牛人們的意見(jiàn)吧!
i2c線更少,我覺(jué)得比uart、spi更為強(qiáng)大,但是技術(shù)上也更加麻煩些,因?yàn)閕2c需要有雙向io的支持,而且使用上拉電阻,我覺(jué)得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠(yuǎn)距離通信。spi實(shí)現(xiàn)要簡(jiǎn)單一些,uart需要固定的波特率,就是說(shuō)兩位數(shù)據(jù)的間隔要相等,而spi則無(wú)所謂,因?yàn)樗怯袝r(shí)鐘的協(xié)議。
i2c的速度比spi慢一點(diǎn),協(xié)議比spi復(fù)雜一點(diǎn),但是連線也比標(biāo)準(zhǔn)的spi要少
評(píng)論