SPI匯流排協議及SPI時序圖詳解

2021-03-04 02:00:26 字數 2879 閱讀 5803

spi,是英語serial peripheral inte***ce的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶元整合了這種通訊協議。

spi是乙個環形匯流排結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位暫存器進行資料交換。

上公升沿傳送、下降沿接收、高位先傳送。

上公升沿到來的時候,sdo上的電平將被傳送到從裝置的暫存器中。

下降沿到來的時候,sdi上的電平將被接收到主裝置的暫存器中。

假設主機和從機初始化就緒:並且主機的sbuff=0xaa (10101010),從機的sbuff=0x55 (01010101),下面將分步對spi的8個時鐘週期的資料情況演示一遍(假設上公升沿傳送資料)。

脈衝主機sbuff 從機sbuff sdi sdo

0 00-0 10101010 01010101 0 0

1 0--1 0101010x 10101011 0 1

1 1--0 01010100 10101011 0 1

2 0--1 1010100x 01010110 1 0

2 1--0 10101001 01010110 1 0

3 0--1 0101001x 10101101 0 1

3 1--0 01010010 10101101 0 1

4 0--1 1010010x 01011010 1 0

4 1--0 10100101 01011010 1 0

5 0--1 0100101x 10110101 0 1

5 1--0 01001010 10110101 0 1

6 0--1 1001010x 01101010 1 0

6 1--0 10010101 01101010 1 0

7 0--1 0010101x 11010101 0 1

7 1--0 00101010 11010101 0 1

8 0--1 0101010x 10101010 1 0

8 1--0 01010101 10101010 1 0

這樣就完成了兩個暫存器8位的交換,上面的0--1表示上公升沿、1--0表示下降沿,sdi、 sdo相對於主機而言的。根據以上分析,乙個完整的傳送週期是16位,即兩個位元組,因為,首先主機要傳送命令過去,然後從機根據主機的名準備資料,主機在下乙個8位時鐘週期才把資料讀回來。

spi匯流排是motorola公司推出的三線同步介面,同步序列3線方式進行通訊:一條時鐘線sck,一條資料輸入線mosi,一條資料輸出線miso; 用於 cpu與各種外圍器件進行全雙工、同步序列通訊。spi主要特點有:

可以同時發出和接收序列資料;可以當作主機或從機工作;提供頻率可程式設計時鐘;傳送結束中斷標誌;寫衝突保護;匯流排競爭保護等。

spi匯流排有四種工作方式(sp0, sp1, sp2, sp3),其中使用的最為廣泛的是spi0和spi3方式。

spi模組為了和外設進行資料交換,根據外設工作要求,其輸出序列同步時鐘極性和相位可以進行配置,時鐘極性(cpol)對傳輸協議沒有重大的影響。如果 cpol=0,序列同步時鐘的空閒狀態為低電平;如果cpol=1,序列同步時鐘的空閒狀態為高電平。時鐘相位(cpha)能夠配置用於選擇兩種不同的傳輸協議之一進行資料傳輸。

如果 cpha=0,在序列同步時鐘的第乙個跳變沿(上公升或下降)資料被取樣;如果cpha=1,在序列同步時鐘的第二個跳變沿(上公升或下降)資料被取樣。 spi主模組和與之通訊的外設音時鐘相位和極性應該一致。

spi時序圖詳解-spi介面在模式0下輸出第一位資料的時刻

spi介面在模式0下輸出第一位資料的時刻

spi介面有四種不同的資料傳輸時序,取決於cpol和cphl這兩位的組合。圖1中表現了這四種時序,

時序與cpol、cphl的關係也可以從圖中看出。

圖1cpol是用來決定sck時鐘訊號空閒時的電平,cpol=0,空閒電平為低電平,cpol=1時,

空閒電平為高電平。cpha是用來決定取樣時刻的,cpha=0,在每個週期的第乙個時鐘沿取樣,

cpha=1,在每個週期的第二個時鐘沿取樣。

由於我使用的器件工作在模式0這種時序(cpol=0,cpha=0),所以將圖1簡化為圖2,

只關注模式0的時序。

圖2我們來關注sck的第乙個時鐘週期,在時鐘的前沿取樣資料(上公升沿,第乙個時鐘沿),

在時鐘的後沿輸出資料(下降沿,第二個時鐘沿)。首先來看主器件,主器件的輸出口(mosi)輸出的資料bit1,

在時鐘的前沿被從器件取樣,那主器件是在何時刻輸出bit1的呢?bit1的輸出時刻實際上在sck訊號有效以前,

比 sck的上公升沿還要早半個時鐘週期。bit1的輸出時刻與ssel訊號沒有關係。再來看從器件,

主器件的輸入口miso同樣是在時鐘的前沿取樣從器件輸出的bit1的,那從器件又是在何時刻輸出bit1的呢。

從器件是在ssel訊號有效後,立即輸出bit1,儘管此時sck訊號還沒有起效。關於上面的主器件

和從器件輸出bit1位的時刻,可以從圖3、4中得到驗證。

圖3注意圖3中,cs訊號有效後(低電平有效,注意cs下降沿后發生的情況),故意用延時程式

延時了一段時間,之後再向資料暫存器寫入了要傳送的資料,來觀察主器件輸出bit1的情況(mosi)。

可以看出,bit1(值為1)是在sck訊號有效之前的半個時鐘週期的時刻開始輸出的(與cs訊號無關),

到了sck的第乙個時鐘週期的上公升沿正好被從器件取樣。

圖4圖4中,注意看cs和miso訊號。我們可以看出,cs訊號有效後,從器件立刻輸出了bit1(值為1)。

通常我們進行的spi操作都是16位的。圖5記錄了第乙個位元組和第二個位元組間的相互銜接的過程。

第乙個位元組的最後一位在sck的上公升沿被取樣,隨後的sck下降沿,從器件就輸出了第二個位元組的第一位。

SPI時序圖詳解

spi介面有四種不同的資料傳輸時序,取決於cpol和cphl這兩位的組合。圖1中表現了這四種時序,時序與cpol cphl的關係也可以從圖中看出。圖1cpol是用來決定sck時鐘訊號空閒時的電平,cpol 0,空閒電平為低電平,cpol 1時,空閒電平為高電平。cpha是用來決定取樣時刻的,cpha...

SPI協議簡介

更新時間 2009 1 2 21 03 04瀏覽次數 5925 spi,是英語serialperipheralinte ce的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,...

SPI協議簡介

更新時間 2009 1 2 21 03 04瀏覽次數 4061 spi,是英語serialperipheralinte ce的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,...