設備與設備之間通過某種硬件接口通訊,目前存在很多種接口,SPI接口是其中的一種。
SPI中分Master主設備和Slave從設備,數據發送都是由Master控制。
一個master可以接一個或多個slave。常見用法是一個Master接一個slave.
通信只需要4根線:SCLK, MISO, MOSI, SS
SCLK:(Serial Clock)(串行)時鐘
MISO:(Master In Slave Out)主設備輸入,從設備輸出
MOSI:(Master Out Slave In)主設備輸出,從設備輸入
SS:(Slave Select)選中從設備,片選
SPI由於接口相對簡單(只需要4根線),用途算是比較廣泛,主要應用在
EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。
【SPI的相位和極性】
CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是:
Mode 0 | CPOL=0, CPHA=0 |
Mode 1 | CPOL=0, CPHA=1 |
Mode 2 | CPOL=1, CPHA=0 |
Mode 3 | CPOL=1, CPHA=1 |
單獨看這張圖,的確很難明白具體含義,所以下面會有更詳細的解釋。
【 CPOL極性】
Clock Polarity = IDLE state
of SCK。
再用中文詳解:
SPI的CPOL,表示當SCLK空閒idle的時候,其電平的值是低電平0還是高電平1:
CPOL=0,時鐘空閒idle時候的電平是低電平,所以當SCLK有效的時候,就是高電平,就是所謂的active-high;
CPOL=1,時鐘空閒idle時候的電平是高電平,所以當SCLK有效的時候,就是低電平,就是所謂的active-low;
【 CPHA相位】
首先說明一點,capture strobe = latch = read = sample,都是表示數據採樣,數據有效的時刻。
相位,對應着數據採樣是在第幾個邊沿(edge),是第一個邊沿還是第二個邊沿,0對應着第一個邊沿,1對應着第二個邊沿。
對於:
CPHA=0,表示第一個邊沿:
對於CPOL=0,idle時候的是低電平,第一個邊沿就是從低變到高,所以是上升沿;
對於CPOL=1,idle時候的是高電平,第一個邊沿就是從高變到低,所以是下降沿;
CPHA=1,表示第二個邊沿:
對於CPOL=0,idle時候的是低電平,第二個邊沿就是從高變到低,所以是下降沿;
對於CPOL=1,idle時候的是高電平,第一個邊沿就是從低變到高,所以是上升沿;
用圖文形式表示,更加容易看懂: