天天看點

SPI通信協定詳解

作者:kvts99

SPI是Serial Peripheral Interface的縮寫,意即串行外設接口。SPI是一種高速的、全雙工、同步通信總線,常用于處理器與闆載外設(比如Flash存儲器、實時時鐘晶片、AD/DA晶片等)之間的通信。标準的SPI是4根線,分别是:

SSEL:也寫作SCS,從裝置片選使能信号。如果從裝置是低電平使能的話,當拉低這個引腳後,從裝置就會被選中,主機和這個被選中的從機進行通信。

SCLK:也寫作SCK,時鐘信号,由主機産生,用于通信資料的同步。

MOSI:Master Output/Slave Input,主出從入,主機給從機發送指令或者資料的通道。

MISO:Master Input/Slave Output,主入從出,主機讀取從機的狀态或者資料的通道。

SPI總線通常隻有一個主機,從機可以有一個,也可以有多個。當有多個從機時,SCLK、MOSI、MISO這3條線是共用的,但主機需要為每一個從機單獨配置設定一條SSEL線,用于分時控制多個從機的通信。

SPI通信協定詳解

圖1 一主一從SPI通信示意圖

SPI通信協定詳解

圖2 一主多從SPI通信示意圖

在某些情況下,也可以用3根線的SPI或者2根線的SPI進行通信。比如主機隻給從機發送指令,從機不需要回複資料的時候,那麼MISO就可以不要;而在主機隻讀取從機的資料,不需要給從機發送指令的時候,那MOSI就可以不要;當一個主機一個從機的時候,從機的片選有時可以固定為有效電平而一直處于使能狀态,那麼SSEL就可以不要;此時如果再加上主機隻給從機發送資料,那麼SSEL和MISO都可以不要;如果主機隻讀取從機送來的資料,SSEL和MOSI都可以不要。

3線和2線的SPI實際使用也是有應用的,但是當提及SPI的時候,一般都是名額準SPI,都是指4根線的這種形式。

SPI通信有四種模式,這四種模式由以下兩個參數的值組合決定。

CPOL:Clock Polarity,即時鐘的極性。

時鐘的極性是什麼概念呢?通常來說通信資料的傳輸都是有開始和結束的,那麼在一次資料傳輸開始之前或者結束之後的狀态我們稱之為空閑狀态。

CPOL=0,表示時鐘SCLK在通信空閑狀态時保持低電平。

CPOL=1,表示時鐘SCLK在通信空閑狀态時保持高電平。

CPHA:Clock Phase,就是時鐘的相位。

主機和從機要交換資料,就牽涉到一個問題,即主機在什麼時刻輸出資料到MOSI上而從機在什麼時刻讀取這個資料,或者從機在什麼時刻輸出資料到MISO上而主機什麼時刻讀取這個資料。同步通信的一個特點就是所有資料的變化和采樣都是伴随着時鐘的跳變沿進行的,也就是說資料總是在時鐘的邊沿附近變化或被采樣(即讀取)。而一個完整的時鐘周期必定包含了一個上升沿和一個下降沿,這是周期的定義所決定的,隻是這兩個沿的先後并無規定。又因為資料從産生的時刻到它的穩定是需要一定時間的,那麼,如果主機在時鐘上升沿輸出資料到MOSI上,從機就隻能在下降沿去采樣這個資料了。反之如果一方在下降沿輸出資料,那麼另一方就必須在上升沿采樣這個資料。

CPHA=0,表示資料的采樣是在時鐘周期的第一個沿,那麼資料的輸出自然就是在第二個沿。

CPHA=1,表示資料的采樣是在時鐘周期的第二個沿,那麼資料的輸出自然就是在第一個沿。

于是,CPOL與CPHA就産生了四種組合方式,即SPI的四種模式:

模式0:即CPOL=0、CPHA=0,時鐘空閑時為低電平,資料采樣在第一個沿(上升沿)進行,時序圖如下

SPI通信協定詳解

圖3 SPI模式0時序圖

模式1:即CPOL=0、CPHA=1,時鐘空閑時為低電平,資料采樣在第二個沿(下降沿)進行,時序圖如下

SPI通信協定詳解

圖4 SPI模式1時序圖

模式2:即CPOL=1、CPHA=0,時鐘空閑時為高電平,資料采樣在第一個沿(下降沿)進行,時序圖如下

SPI通信協定詳解

圖5 SPI模式2時序圖

模式3:即CPOL=1、CPHA=1,時鐘空閑時為高電平,資料采樣在第二個沿(上升沿)進行,時序圖如下

SPI通信協定詳解

圖6 SPI模式3時序圖

模式0和模式3是常用模式,其它兩種則較少見。

讓我們再仔細想一下,CPHA=0時,會有一個問題:就是當一幀資料開始傳輸第一個bit時,在第一個時鐘沿上就采樣該資料了,那麼它是在什麼時候輸出來的呢?有兩種情況:一是在SSEL生效的時刻,二是在上一幀資料的最後一個時鐘沿,也就是說當CPHA=0時資料應該在第一個時鐘沿到來之前就提前準備好。

下圖是使用Kingst LA5016邏輯分析儀采集的一幀SPI通信資料。

SPI通信協定詳解

圖7 SPI通信執行個體

從圖中可以看出:

1、時鐘SCLK在空閑時的電平是高電平,即CPOL=1

2、MOSI和MISO上的資料變化都是出現在SCLK下降沿,是以資料的采樣就應該是在SCLK的上升沿,即第二個沿,即CPHA=1,圖中SCLK通道上由箭頭标出

是以本例中的SPI是工作在模式3。

繼續閱讀