SPI是串行外設接口(Serial Peripheral Interface)的縮寫。是 Motorola 公司推出的一 種同步串行接口技
術,是一種高速的,全雙工,同步的通信總線。SPI接口沒有指定的流控制,沒有應答機制確認是否接收到數
據。通常有以下4條通訊線。 同I2C接口相比,SPI器件支持更高的時鍾頻率。
時鍾(SPI CLK, SCLK)
片選(CS)
主機輸出、從機輸入(MOSI)
主機輸入、從機輸出(MISO)
MOSI和MISO是數據線。MOSI將數據從主機發送到從機,MISO將數據從從機發送到主機。
數據傳輸
主從設備之間通過SPI進行通訊,主機必須發送時鍾信號,並通過使能CS信號選擇從機,而且兩者之
間時鍾SCLK要特性要匹配。SPI中的特性指的就是時鍾的極性Polarity和相位Phase。
最常見的有以下寫法:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鍾)極性
(2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (時鍾)相位
SCK、SCLK、CLK指的是時鍾脈沖, Edge指的是時鍾脈沖的邊沿,即時鍾電平變化的時刻,即上升
沿(risingedge) 或者下降沿(falling edge)。
CPOL設置
CPOL可以軟件設置為0或1,什么意思尼?我們知道當要有數據傳輸時才有CLK時鍾脈沖輸出,內么
沒有CLK時鍾輸出時,MCU的CLK腳是個神馬狀態尼?這個是可以軟件設定的:
設 CPOL=0 效果是沒有CLK時鍾輸出時MCU的CLK腳為低電平
設 CPOL=1 效果是沒有CLK時鍾輸出時MCU的CLK腳為高電平
如下圖:
CPHA設置
數據相位CPHA說的是時鍾的有效的時刻。在時鍾的神馬時刻去讀寫數據是有效的。我們知道一個脈沖
有2個邊沿和中間保持區,那么數據采樣是在第幾個邊沿(edge)是有效的就用到CPHA設置。於是乎就龜腚:
設 CPHA=0 表示第1個邊沿采集、下個沿移出數據。
設 CPHA=1 表示第2個邊沿采集、下個沿移出數據。
結合上面CPOL的設置來說。
當CPOL=0: 起始電平為低,那么第1沿個肯定是上升沿,然后保持高、接着第2個沿是下降沿、然后保持低,
再接着第3個沿又是上升沿,然后周而復始。
這樣對於CPHA=0,采集用的第1沿是上升沿、移出數據用的第2沿是下降沿,龜腚為SPI的模式0
CPHA=1,采集用的第2沿是下降沿、移出數據用的第3沿是上升沿,龜腚為SPI的模式1
可以看出SPI的模式0比模式1早一個相位(脈沖)。
當CPOL=1: 起始電平為高,那么第1沿個肯定是下降沿,然后保持低、接着第2個沿是上升沿、然后保持高,
再接着第3個沿又是下降沿,然后周而復始。
這樣對於CPHA=0,采集用的第1沿是下降沿、移出數據用的第2沿是上升沿,龜腚為SPI的模式2
CPHA=1,采集用的第2沿是上升沿、移出數據用的第3沿是下降沿,龜腚為SPI的模式3
可以看出SPI的模式2比模式3早一個相位(脈沖)。
來個圖說明下:
再舉個例子:
以SPI模式0為例看下圖,數據顯示在MOSI和MISO線上。傳輸的開始和結束用綠色虛線表示,采樣
邊沿用橙色虛線表示,移位邊沿用藍色虛線表示。
可以看出模式0 CPOL = 0,CPHA = 0:CLK空閑狀態為 低電平,數據在B處上升沿采樣,並在C處下降
沿移出。注意上圖的采樣和移出,說的是:
主機MCU在MISO線發出數據,從機設備在MISO線采樣和移出數據
主機MCU在MOSI線采樣和移出數據,從機設備在MOSI線發出數據
所謂采樣、移出並不是說刪除數據,而應理解為讀取可以看到在A、B處的MOSI、MISO數據都是處於持續
穩定的一個狀態。SPI模式1、SPI模式2、SPI模式3的時序圖以此類推。
划重點:無論設置SPI模式0、1、2、3的哪一種,主從設備必須設為同一種模式。
對於從設備也是MCU自然可以軟件設置SPI模式,但對於像W25Q128FV這種內部沒有處理器,腳位又少的
簡單外設又怎么來設置SPI模式尼?
是這樣滴,W25Q128FV通過芯片內部邏輯可以自動識別SPI模式0、3,模式1、2是不支持滴。
邏輯的判斷條件是:
在/CS上升沿和下降沿時刻,CLK是低電平,判斷為模式0;
在/CS上升沿和下降沿時刻,CLK是高電平,判斷為模式3;
這樣我們在MCU設置好SPI模式0或3后,就可以直接和W25Q128FV進行通訊了。