一、什么是SPI協(xié)議
SPI,全稱(Serial Peripheral interface)是由摩托羅拉公司首先定義的協(xié)議,中文名為串型外圍設(shè)備接口。SPI是一種高速全雙工的總線協(xié)議
Serial(串型):與并型相對(duì)應(yīng),單向數(shù)據(jù)通路只需要一根線,而同樣常見的AMBA則為并型總線
Peripheral(外圍):指此總線多用來連接如“AD轉(zhuǎn)換、EEPROM、PWM”等外圍設(shè)備,即對(duì)應(yīng)于AMBA的APB部分
Interface(總線接口):很好理解,不再贅述。
二、什么是全雙工通信協(xié)議
通信協(xié)議可以按照通信方式分為單工,半雙工,全雙工三種。
單工:發(fā)射端和接收端固定,有一條數(shù)據(jù)通路,通路上數(shù)據(jù)單向流動(dòng)。
半雙工:發(fā)射端和接收端可變,有一條數(shù)據(jù)通路,通路上數(shù)據(jù)雙向流動(dòng)。
全雙工:發(fā)射端和接收端,有兩條數(shù)據(jù)通路,一條從TX到RX,另一條從RX到TX。
一張形象的圖片表示如下

比如說我們?cè)趶牧汩_始的Verilog UART設(shè)計(jì)中所實(shí)現(xiàn)的就是一個(gè)單工UART
因?yàn)镾PI是全雙工總線協(xié)議,因此SPI的數(shù)據(jù)通路上存在從主設(shè)備到從設(shè)備的數(shù)據(jù)通道和從從設(shè)備到主設(shè)備的數(shù)據(jù)通道
三、SPI的信號(hào)線
SPI需要四條線才能完成數(shù)據(jù)的發(fā)送,分為3條總線和1條片選線

SCK:Serial Clock, 串行時(shí)鐘信號(hào),SPI需要依靠著這個(gè)信號(hào)的邊沿進(jìn)行數(shù)據(jù)的傳遞
MOSI:Master output Slave input,對(duì)于主設(shè)備來說,是發(fā)送數(shù)據(jù)的端口,對(duì)于從設(shè)備來說,是接收數(shù)據(jù)的端口。
MISO:Master input Slave output,對(duì)于從設(shè)備來說,是接收數(shù)據(jù)的端口,對(duì)于主設(shè)備來說,是發(fā)送數(shù)據(jù)的端口。
NSS: N Slave connect,一般情況下是由主機(jī)發(fā)送,從機(jī)接收,表示哪一個(gè)從設(shè)備有效的信號(hào)
因?yàn)镸OSI和MISO的存在,因此SPI才是一個(gè)全雙工的協(xié)議(即分別對(duì)于主設(shè)備和從設(shè)備來說,既可以發(fā)送數(shù)據(jù),又可以接收數(shù)據(jù))
四、SPI的連接方式
根據(jù)從設(shè)備之間是否存在聯(lián)系,我們可以將SPI的連接方式分為“多NSS形式”和”菊花鏈形式”。
4.1 多NSS形式
SPI的第一種連接方式是“多NSS形式”的連接,比如說從設(shè)備1是一個(gè)AD轉(zhuǎn)換模塊,從設(shè)備2是一個(gè)比較器,設(shè)備3是一塊液晶,他們之間沒有聯(lián)系,主設(shè)備需要操控哪個(gè)從設(shè)備,就拉低對(duì)應(yīng)NSS上面的信號(hào),使能從設(shè)備進(jìn)行數(shù)據(jù)轉(zhuǎn)換

4.2 菊花鏈形式
SPI協(xié)議的第二種形式是菊花鏈的形式,比如說從設(shè)備1是一塊EEPROM,從設(shè)備2是一個(gè)DSP,從設(shè)備3是一個(gè)比較器,三個(gè)從設(shè)備之間存在聯(lián)系,當(dāng)來自主設(shè)備的地址信號(hào)到來時(shí),先從EEPROM中讀出數(shù)據(jù),數(shù)據(jù)放到DSP中進(jìn)行處理,處理后的數(shù)據(jù),最終在從設(shè)備3中進(jìn)行比較

五、SPI可配置變量
5.1 時(shí)鐘極性(CPOL)
時(shí)鐘極性(CPOL)指通訊設(shè)備處于空閑狀態(tài)(SPI開始通訊前、nSS線無效)時(shí),SCK的狀態(tài)。

這里的CPOL實(shí)際上對(duì)應(yīng)于狀態(tài)機(jī)IDLE狀態(tài)時(shí)的SCK的值是0是1,即三段式狀態(tài)機(jī)IDLE時(shí)的輸出
5.2 時(shí)鐘相位(CPHA)
時(shí)鐘相位(CPHA)指數(shù)據(jù)的采樣時(shí)刻位于SCK的偶數(shù)邊沿采樣還是奇數(shù)邊沿采樣。

舉例:假如CPOL = 0時(shí),CPHA=0,對(duì)應(yīng)1,3,5處采樣,即為上升沿采樣,CPHA=1,對(duì)應(yīng)2,4,6處采樣,即為下降沿采樣。

這里的CPHA也同樣能在狀態(tài)機(jī)的跳變中得到體現(xiàn),即對(duì)應(yīng)某些狀態(tài)的采樣行為
5.3 CPOL和CPHA組合出四種情況

根據(jù)這個(gè)圖,我們可以發(fā)現(xiàn)
Case1:CPOL=0, CPHA=0
Case2:CPOL=1, CPHA=1,Case1和Case2都對(duì)應(yīng)上升沿觸發(fā)
Case3:CPOL=0, CPHA=1
Case4:CPOL=1, CPHA=0,Case3和Case4都對(duì)應(yīng)下降沿觸發(fā)
為了保證采樣的時(shí)候數(shù)據(jù)穩(wěn)定,我們還需要做些什么?
我們需要保證采樣的時(shí)候數(shù)據(jù)是穩(wěn)定的,才不會(huì)發(fā)生建立時(shí)間和保持時(shí)間的違例,因此,當(dāng)我們?cè)谏仙氐臅r(shí)候進(jìn)行采樣,我們可以在前一個(gè)相差半個(gè)時(shí)鐘周期的下降沿,切換數(shù)據(jù)。
同樣,當(dāng)我們?cè)谙陆笛氐臅r(shí)候進(jìn)行采樣,我們也可以在前一個(gè)相差半個(gè)時(shí)鐘周期的上升沿,切換數(shù)據(jù),以此來保證采樣時(shí)的數(shù)據(jù)穩(wěn)定性。
5.4數(shù)據(jù)大小
有一張非常形象的圖片來形容SPI的數(shù)據(jù)發(fā)送與接收,即每當(dāng)Master發(fā)送一位數(shù)據(jù)的時(shí)候,他還會(huì)接收到一位數(shù)據(jù),因此對(duì)于SPI來說,數(shù)據(jù)傳輸?shù)谋举|(zhì)其實(shí)是兩個(gè)寄存器的移位操作,寄存器的位寬,就是我們所說的數(shù)據(jù)大小,一般情況下,SPI的數(shù)據(jù)大小是一個(gè)字節(jié)或者兩個(gè)字節(jié)(8位或16位)

5.5 波特率分頻系數(shù)
對(duì)于全局時(shí)鐘來講,頻率可能會(huì)很高,比如常見的CPU是GHz級(jí)別,常見的MCU也有近百M(fèi)Hz級(jí)別,但是對(duì)于所連接的外設(shè),受限于建立時(shí)間和保持時(shí)間的限制,可能沒有辦法跑到MCU主頻的級(jí)別,因此我們可能需要波特率分頻系數(shù)來對(duì)高速全局時(shí)鐘進(jìn)行處理,以此來確保不發(fā)生data的violation。
5.6 其他參數(shù)
以上參數(shù)可以保證SPI的基本功能,但一個(gè)更為完善的SPI當(dāng)然不僅限于以上參數(shù),以下參數(shù)僅作基本梳理,感興趣的同學(xué)可自行了解相關(guān)內(nèi)容。
SPI_FirstBit,決定SPI是MSB還是LSB的傳輸形式
SPI_CRCPolynomial,決定SPI是否采用CRC校驗(yàn)的形式進(jìn)行數(shù)據(jù)傳輸
SPI_Direction; 傳輸方向,兩向全雙工或單向接收
原文鏈接
https://blog.csdn.net/weixin_43698385/article/details/124928101
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1065瀏覽量
41722 -
接口
+關(guān)注
關(guān)注
33文章
9296瀏覽量
155597 -
總線
+關(guān)注
關(guān)注
10文章
3002瀏覽量
90980 -
SPI協(xié)議
+關(guān)注
關(guān)注
0文章
22瀏覽量
8750
原文標(biāo)題:理解SPI協(xié)議
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
深入剖析I2C協(xié)議
最深入最經(jīng)典的電容剖析
STM32 單片機(jī)C語言課程4-C語言預(yù)處理深入剖析1
STM32 單片機(jī)C語言課程5-C語言預(yù)處理深入剖析2
STM32 SPI通信協(xié)議的相關(guān)資料分享
ITIL 3.0深入剖析
深入剖析火花塞
STM32 SPI通信協(xié)議詳細(xì)講解—小白入門
STM32 SPI配置及深入解析
spi協(xié)議介紹
一文看懂SPI協(xié)議

深入剖析SPI協(xié)議
評(píng)論