??SPI(Serial Peripheral Interface)總線系統(tǒng)是一種同步串行外設(shè)接口,可以是MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息,該接口一般使用4條線:串行時(shí)鐘線(SCLK)、主入從出數(shù)據(jù)線(MISO)、主出從入數(shù)據(jù)線(MOSI)和低電平有效的從機(jī)選擇線(SS);其主要特點(diǎn)包括:可以同時(shí)發(fā)出和接收船型數(shù)據(jù);可以作為主機(jī)或從機(jī)工作;發(fā)送結(jié)束中斷標(biāo)志;寫(xiě)沖突保護(hù)和總線競(jìng)爭(zhēng)保護(hù)。
SPI總線架構(gòu)示意圖:
??SPI是一個(gè)環(huán)形總線結(jié)構(gòu),有SS、SCK、SDI、SDO組成,在主設(shè)備和從設(shè)備之間進(jìn)行雙向傳輸,實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù),最高速率可達(dá)5Mbps。由SS信號(hào)來(lái)選定主設(shè)備通信的從設(shè)備,在某時(shí)間點(diǎn)內(nèi)主設(shè)備和從設(shè)備之間可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,不需要進(jìn)行尋址操作。SPI共有4種工作模式,SP0、SP1、SP2、SP3,其中比較常用的是SP0、SP3。為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行設(shè)置。
??如果時(shí)鐘極性CPOL=0,則串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果時(shí)鐘極性CPOL=1,則串行同步時(shí)鐘的空閑狀態(tài)為高電平。
??如果時(shí)鐘相位CPHA=0,則在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果時(shí)鐘相位CPHA=1,則在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)時(shí)鐘相位和極性應(yīng)該一致。
SPI總線4中工作模式的SCK示意:
??SPI主要工作時(shí)序是在SCK的控制下,兩個(gè)雙向移位寄存器進(jìn)行數(shù)據(jù)交換。
??假設(shè)下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)1010 1010,上升沿發(fā)送,下降沿接收,高位先發(fā)送。那么第一個(gè)上升沿來(lái)的時(shí)候數(shù)據(jù)將會(huì)是sdo=1,寄存器=0101 010x;下降沿到來(lái)的時(shí)候,sdi上的電平將鎖存到寄存器中去,那么這時(shí)寄存器=0101 010sdi,這樣在8個(gè)時(shí)鐘脈沖以后,兩個(gè)寄存器的內(nèi)容相互交換一次,從而完成了一個(gè)spi時(shí)序。
??硬件SPI方式:
??(1)寫(xiě)一個(gè)字節(jié):
??SPI_Writebyte(u8 data)
??{
??While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//等待發(fā)送緩沖區(qū)為空
??SPI_I2S_SendData(SPI1,Data);
??While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//等待接收到一個(gè)字節(jié)數(shù)據(jù)
??SPI_I2S_ReceiveData(SPI1);
??}
??(2)讀一個(gè)字節(jié):
??SPI_Readbyte(u8 data)
??{
??While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//等待發(fā)送緩沖區(qū)為空
??SPI_I2S_SendData(SPI1,Data);
??While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//等待接收到一個(gè)字節(jié)數(shù)據(jù)
??return SPI_I2S_ReceiveData(SPI1);
??}
??解析:當(dāng)不使用FIFO時(shí),只有一個(gè)中斷,接收和發(fā)送共用一個(gè),因?yàn)榘l(fā)送和接收是同時(shí)完成的:例如主機(jī)上升沿發(fā)送下降沿接收,那么從機(jī)就是上升沿接收下降沿發(fā)送,所以一串時(shí)鐘之后,主機(jī)發(fā)送完了數(shù)據(jù),從機(jī)也發(fā)送完了數(shù)據(jù)。
??軟件SPI:
??軟件SPI方式和硬件SPI方式的區(qū)別:
??1.硬件SPI效率高些,編寫(xiě)程序時(shí)只需把要發(fā)送的數(shù)據(jù)寫(xiě)到寄存器中,硬件自動(dòng)進(jìn)行發(fā)送;軟件SPI需要根據(jù)時(shí)序?qū)崿F(xiàn)時(shí)鐘拉高拉低,串行數(shù)據(jù)輸出等。
??2.硬件SPI必須要求處理器支持該功能;而軟件SPI不需要特定要求,一般的IO口就可以使用
??3.硬件SPI傳輸速度可以達(dá)到3Mbps,軟件SPI傳輸速度一般700K左右。
??總結(jié):在使用SPI時(shí),根據(jù)實(shí)際情況選擇使用硬件SPI,還是軟件SPI,注意在使用時(shí)確保時(shí)序的準(zhǔn)確性。
-
mcu
+關(guān)注
關(guān)注
146文章
17317瀏覽量
352630 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1746瀏覽量
131798 -
SPI
+關(guān)注
關(guān)注
17文章
1721瀏覽量
92116 -
SPI總線
+關(guān)注
關(guān)注
4文章
104瀏覽量
27665 -
串行通信
+關(guān)注
關(guān)注
4文章
579瀏覽量
35581
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論