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

SPI通信總線的原理及工作過程簡單分析

一文介紹SPI串行總線

串行總線:SPI、IIC、UART

SPI總線詳解

SPI總線協(xié)議及詳解

SPI總線協(xié)議及SPI時序圖詳解

常用串行總線——SPI協(xié)議(上)

常用串行總線——SPI協(xié)議(下)

評論