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