【嵌入式工程師面試高頻問題】你知道SPI嗎

小林菌發表於2020-11-08

面試中關於SPI常見問題

什麼是SPI?

SPI介面是Motorola 首先提出的全雙工三線同步序列外圍介面,採用主從模式(Master Slave)架構;支援多slave模式應用,一般僅支援單Master。時鐘由Master控制,在時鐘移位脈衝下,資料按位(bit)傳輸,高位在前,低位在後(MSB first);SPI介面有2根單向資料線,為全雙工通訊,目前應用中的資料速率可達幾Mbps的水平。

SPI一般使用4條線通訊分別是?

答:
1、 MISO ————— 主裝置資料輸入、從裝置資料輸出
2、 MOSI ————— 主裝置資料輸出、從裝置資料輸入
3、 SCLK ————— 時鐘訊號、由主裝置產生
4、 NSS(CS) ————– 從裝置片選訊號,由主裝置控制

SPI有四種操作模式,模式0、模式1、模式2、模式3。它們的區別是?

答:SPI模組為了和外設進行資料交換,根據外設工作要求,其輸出序列同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。

如果CPOL=0,序列同步時鐘的空閒狀態為低電平;如果CPOL=1,序列同步時鐘的空閒狀態為高電平。

時鐘相位(CPHA)能夠配置用於選擇兩種不同的傳輸協議之一進行資料傳輸。如果 CPHA=0,在序列同步時鐘的第一個跳變沿(上升或下降)資料被取樣;如果CPHA=1,在序列同步時鐘的第二個跳變沿(上升或下降)資料被取樣。

SPI主模組和與之通訊的外設音時鐘相位和極性應該一致。

硬體SPI和軟體模擬SPI的區別有哪些?

答:硬體SPI的效率要比軟體模擬SPI高,寫程式的時候只要把要發的資料寫在暫存器裡,硬體就會自動給你發了,軟體模擬SPI則需要器實現時鐘的拉高拉低,資料序列輸出等等。硬體SPI必須要處理器支援才可以用,軟體SPI就不需要特定的要求了,一般IO口就可用。

簡單手撕程式

從下面這個圖分析迴圈移位暫存器,從高位開始傳送,接收到暫存器的低位,然後通過每次移位,完成master和slave的8bit資料交換,也就完成資料的讀寫。
在這裡插入圖片描述

//GPIO模擬SPI(同時讀寫,寫一個資料,通過返回一個資料)
uchar SPI_RW(uchar byte)//byte是寫的資料,返回值是需要讀的資料  
{  
uchar bit_ctr;  
for(bit_ctr=;bit_ctr<8;bit_ctr++)  
{  
MOSI=(byte&0x80);//寫,移動最高有效位到MOSI線上   
byte=(byte<<1);//左移一位   
SCK=1; //時鐘線置高   
byte|=MISO;//讀,取當前MISO線上的值,放在byte最低位上   
SCK=0;//時鐘線置低   
}  
return(byte);  
}  

相關文章