1前言
SPI(Serial Peripheral Interface)是串行外設(shè)接口的縮寫,SPI是一種高速、主從模式、全雙工、同步的串行通信總線,由摩托羅拉公司(Motorola)于 20 世紀(jì) 80 年代提出,主要用于短距離內(nèi)的芯片間通信,廣泛應(yīng)用于傳感器、存儲器、顯示屏、ADC/DAC 等外設(shè)與微控制器(MCU)的連接。
2SPI協(xié)議的基本特點(diǎn)
串行通信:一次發(fā)送1bit數(shù)據(jù)。
同步通信:通過時鐘信號(SCLK)同步數(shù)據(jù)傳輸,發(fā)送方和接收方基于同一時鐘工作。
全雙工通信:數(shù)據(jù)可以同時雙向傳輸(主設(shè)備發(fā)送的同時接收,從設(shè)備接收的同時發(fā)送)。
單主多從架構(gòu):通常由一個主設(shè)備(如 MCU)控制多個從設(shè)備(如傳感器),從設(shè)備不能主動發(fā)起通信。
無地址機(jī)制:通過片選信號(CS/NSS)選擇目標(biāo)從設(shè)備,而非通過地址識別。
靈活的數(shù)據(jù)長度:數(shù)據(jù)傳輸位數(shù)可自定義(常見 8 位,也支持 16 位、32 位等)。
高速傳輸:速率通常可達(dá)幾 Mbps 到幾十 Mbps,具體取決于器件支持的最大時鐘頻率。
3SPI的信號線組成
SPI從器件一般需要4根線(也有3根線的,單工,只有接收或者只有發(fā)送),分別是MISO(主設(shè)備輸入從設(shè)備輸出)、MOSI(主設(shè)備輸出從設(shè)備輸入)、SCLK(時鐘)、CS(片選)。

4SPI尋址方式
當(dāng)主設(shè)備要和某個從設(shè)備進(jìn)行通信時,主設(shè)備需要先向?qū)?yīng)從設(shè)備的片選線上發(fā)送使能信號(高電平或者低電平,根據(jù)從機(jī)而定)表示選中該從設(shè)備。

5SPI的通信過程
SPI總線在進(jìn)行數(shù)據(jù)傳送時,先傳送高位,后傳送低位;數(shù)據(jù)線為高電平表示邏輯"1",低電平表示邏輯"0";一個字節(jié)傳送完成后無需應(yīng)答即可開始下一個字節(jié)的傳送;SPI總線采用同步方式工作,時鐘線在上升沿或下降沿時發(fā)送器向數(shù)據(jù)線上發(fā)送數(shù)據(jù),在緊接著的下降沿或者上升沿時接收器從數(shù)據(jù)線上讀取數(shù)據(jù),完成一位數(shù)據(jù)傳送,八個時鐘周期即可完成一個字節(jié)數(shù)據(jù)的傳送。

如果參考了上面圖片還不能明白SPI傳輸過程,可以繼續(xù)參考如下動圖:


6SPI的極性和相位
SPI總線有四種不同的工作模式,取決于時鐘的極性(CPOL,Clock Polarity)和相位(CPHA,Clock Phase)這兩個因素。
CPOL表示SCLK空閑時的狀態(tài):
CPOL=0,空閑時SCLK為低電平;
CPOL=1,空閑時SCLK為高電平;
CPHA表示采樣時刻:
CPHA=0,每個周期的第一個時鐘沿采樣;
CPHA=1,每個周期的第二個時鐘沿采樣;
1 CPOL=0, CPHA=0
空閑時SCLK為低電平;每個周期的第一個時鐘沿采樣,也就是上升沿。

注:*MSB表示前一幀的MSB。
2 CPOL=0, CPHA=1
空閑時SCLK為低電平;每個周期的第二個時鐘沿采樣。

注:LSB*表示下一幀的LSB。
3.3 CPOL=1, CPHA=0
空閑時SCLK為高電平;每個周期的第一個時鐘沿采樣。

注:*MSB表示前一幀的MSB。
4 CPOL=1, CPHA=1
空閑時SCLK為高電平;每個周期的第二個時鐘沿采樣。

注:LSB*表示下一幀的LSB。
需要說明的是,對于一個特定的從設(shè)備來說,一般在出廠時就會將其設(shè)計(jì)為某種特定的工作模式;我們在使用該設(shè)備時就必須保證主設(shè)備的工作模式和該從設(shè)備保持一致,否則是無法進(jìn)行通信的;所以一般我們需要對主設(shè)備的CPOL和CPHA進(jìn)行配置。
7I2C和SPI的異同
相同點(diǎn):
均采用串行、同步的方式
均采用TTL電平,傳輸距離和應(yīng)用場景類似
均采用主從方式工作
不同點(diǎn):
I2C為半雙工,SPI為全雙工
I2C有應(yīng)答機(jī)制,SPI無應(yīng)答機(jī)制
I2C通過向總線廣播從機(jī)地址來尋址,SPI通過向?qū)?yīng)從機(jī)發(fā)送使能信號來尋址
I2C的時鐘極性和時鐘相位固定,SPI的時鐘極性和時鐘相位可調(diào)
I2C速度慢,引腳少,SPI速度快,引腳多
-
FPGA
+關(guān)注
關(guān)注
1650文章
22217瀏覽量
628019 -
mcu
+關(guān)注
關(guān)注
147文章
18420瀏覽量
380663 -
數(shù)字電壓表
+關(guān)注
關(guān)注
4文章
197瀏覽量
33930 -
SPI協(xié)議
+關(guān)注
關(guān)注
0文章
22瀏覽量
8758
原文標(biāo)題:04-基于FPGA和LTC2308的數(shù)字電壓表設(shè)計(jì)-SPI協(xié)議詳解
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
簡易數(shù)字電壓表的設(shè)計(jì)
數(shù)字電壓表
數(shù)字電壓表的VHDL設(shè)計(jì)與實(shí)現(xiàn)
數(shù)字電壓表的設(shè)計(jì)
電壓表protues仿真 基于51數(shù)字電壓表仿真設(shè)計(jì) 電壓表程序
數(shù)字電壓表的設(shè)計(jì)方案匯總(六款數(shù)字電壓表的設(shè)計(jì)原理圖詳解)

數(shù)字電壓表設(shè)計(jì)教程之SPI協(xié)議詳解
評論