【嵌入式工程師面試高頻問題】你知道SPI嗎
面試中關於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);
}
相關文章
- [靈魂拷問]MySQL面試高頻一百問(工程師方向)MySql面試工程師
- 【第一彈】嵌入式工程師面試題工程師面試題
- 【第二彈】嵌入式工程師面試題工程師面試題
- java框架面試高頻問題(SpringMVC)Java框架面試SpringMVC
- 高頻面試題面試題
- c++工程師面試問題C++工程師面試
- 高頻面試考題:荷蘭旗問題面試
- 嵌入式工程師,你知道.c檔案和.h的區別嗎?工程師
- 「面試必問」leetcode高頻題精選面試LeetCode
- Vue 常見面試問題,你可能都知道,但能答好嗎?Vue面試
- MySQL高頻面試題MySql面試題
- 大廠面試經:高頻率JVM面試問題整理!面試JVM
- 測試工程師看過來!面試,你真的會嗎?工程師面試
- 面試高階前端工程師必問之流-stream面試前端工程師
- MySQL高頻面試題的靈魂拷問MySql面試題
- 面試問題總結(Java工程師 20190301)面試Java工程師
- Java面試必問面試題,你掌握了嗎?Java面試題
- Java高頻面試題---RabbitMQJava面試題MQ
- Java高頻面試題---MySQLJava面試題MySql
- Java集合高頻面試題Java面試題
- python工程師面試題Python工程師面試題
- 2019年12道RabbitMQ高頻面試題你都會了嗎?(含答案解析)MQ面試題
- 面試題-測試工程師常見的基礎問題面試題工程師
- JavaScript高頻面試試題2——2020.12.04JavaScript面試
- 學習Python這些面試題你都知道嗎?Python面試題
- PHP開發工程師面試問題集錦PHP工程師面試
- 應聘機器學習工程師?這是你需要知道的12個基礎面試問題機器學習工程師面試
- 前端高頻面試題JavaScript篇前端面試題JavaScript
- Selenium 高頻面試題及答案面試題
- 面試java高階工程師、專案經理等的常見問題面試Java工程師
- 面試常問的20個資料庫高頻面試題詳解!資料庫面試題
- 【演算法工程師】Python面試問題總結演算法工程師Python面試
- Python工程師必看的面試問題與解答(中)Python工程師面試
- 40個Java集合面試問題和答案,面試奇葩問題,你掌握了嗎?Java面試
- 速看!這8道嵌入式面試題你都會嗎?面試題
- 你應該知道的 Laravel 面試問題,要搞懂Laravel面試
- 面試總結——Java高階工程師面試Java工程師
- 前端面試題:你知道websocket嗎?前端面試題Web