一文看懂SPI協(xié)議
時間:2021-08-18 08:40:49
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]有哪些內容?SPI協(xié)議簡介4線還是3線?4種工作模式多種傳輸速率SPI協(xié)議的時序SPI協(xié)議的升級版FPGA實現(xiàn)SPI協(xié)議SPI和IIC的對比總結SPI協(xié)議簡介板卡內不同芯片間通訊最常用的三種串行協(xié)議:UART、I2C、SPI,之前寫過串口協(xié)議及其FPGA實現(xiàn),今天我們來介紹SPI...
有哪些內容? 與IIC類似,SPI也是采用主從方式工作,主機通常為FPGA、MCU或DSP等可編程控制器,從機通常為EPROM、Flash,AD/DA,音視頻處理芯片等設備。一般由SCLK、CS、MOSI,MISO四根線組成,有的地方可能是:SCK、SS、SDI、SDO等名稱,都是一樣的含義,當有多個從機存在時,通過CS來選擇要控制的從機設備。和標準SPI類似的協(xié)議,還有TI的SSP協(xié)議,區(qū)別主要在片選信號的時序上。 還有標準SPI協(xié)議的升級版,Dual SPI、Quad SPI和QPI等,這些協(xié)議不在本小節(jié)3線/4線制討論的范圍內,文章后面會提到。 以我最近工作中使用到的一款Cypress的鐵電存儲器FM25V05為例,在其官方DataSheet上介紹同時支持SPI Mode 0和Mode 3, 根據(jù)后面的時序圖,可以得知SPI mode 0的讀寫時序,圖中可以看出SCK空閑狀態(tài)為低電平,主機數(shù)據(jù)在每個上升沿被從機采樣,數(shù)據(jù)輸出同理。 對于SPI mode0,SCK空閑狀態(tài)為高電平,主機數(shù)據(jù)在每個上升沿被從機采樣,數(shù)據(jù)輸出同理。 模式1和模式2同理,模式1即CPOL=0,CPHA=1,SCK空閑為0,在SCK第二個邊沿時數(shù)據(jù)有效,即SCK下降沿有效。 模式2即CPOL=1,CPHA=0,SCK空閑為1,在SCK第一個邊沿時數(shù)據(jù)有效,即SCK下降沿有效。 在一些自帶SPI硬件外設的MCU上,設置主機的SPI模式非常簡單,只需要配置幾個寄存器的值即可,而且是寫了SCK高電平還是低電平,和第一個還是第二個邊沿,不用去記憶等于0還是等于1。以STM32F103硬件SPI配置為例:
- SPI協(xié)議簡介
- 4線還是3線?
- 4種工作模式
- 多種傳輸速率
- SPI協(xié)議的時序
- SPI協(xié)議的升級版
- FPGA實現(xiàn)SPI協(xié)議
- SPI和IIC的對比
- 總結
SPI協(xié)議簡介
板卡內不同芯片間通訊最常用的三種串行協(xié)議:UART、I2C、SPI,之前寫過串口協(xié)議及其FPGA實現(xiàn),今天我們來介紹SPI協(xié)議,SPI是Serial Perripheral Interface的簡稱,是由Motorola公司推出的一種高速、全雙工的總線協(xié)議。4線還是3線?
當我們談到SPI時,默認情況下都是指標準的4線制Motorola SPI協(xié)議,即SCLK,MOSI,MISO和CS共4根數(shù)據(jù)線,標準4線制的好處是可以實現(xiàn)數(shù)據(jù)的全雙工傳輸。當只有一個主機和一個從機設備時,只需要一個CS,多個從機需要多個CS,各數(shù)據(jù)線的介紹:- SCLK,時鐘信號,時鐘頻率即SPI速率,和SPI模式有關
- MOSI,主機輸出,從機輸入
- MISO,主機輸入,從機輸出
- CS,從機設備選擇,低電平有效
- 只有3根線:SCLK,CS和DI或DO,適用于單工通訊,主機只發(fā)送或接收數(shù)據(jù)。
- 只有3根線:SCLK,SDIO和CS,這里的SDIO作為雙向端口,適用于半雙工通訊,比如ADI的多款ADC芯片都支持雙向傳輸。在使用FPGA操作雙向端口時,作為輸入時要設置為高阻態(tài)z。
4種工作模式
既然是進行數(shù)據(jù)傳輸,雙方就要明確從機在什么時刻去采樣主機發(fā)出的數(shù)據(jù),主機在什么時刻去讀取從機發(fā)來的數(shù)據(jù)。對于STM32等MCU自帶的硬件SPI外設來說,可能沒有那么重要,只需要配置一下模式就行了,但是對于使用使用GPIO模擬或者FPGA來實現(xiàn)SPI的時序,這一點是非常重要的,這就涉及到SPI標準協(xié)議的工作模式了,通過CPOL(Clock Polarity)時鐘極性和CPHA(Clock Phase)時鐘相位的不同組合,可以分為4種模式。一般從機器件的工作模式是固定的,主機需要采用一樣的工作模式,雙方才能正常“交流”。CPOL=0表示,SCK在空閑狀態(tài)時為0
CPOL=1表示,SCK在空閑狀態(tài)時為1
CPHA=0表示,在SCK第一個邊沿時輸入輸出數(shù)據(jù)有效
CPHA=1表示,在SCK第二個邊沿時輸入輸出數(shù)據(jù)有效
這四種模式中,應用最廣泛的是模式0和3,大多數(shù)SPI器件都同時支持這兩種工作模式,其實這些都不重要,具體采用什么模式,看你的器件手冊就知道了。SPI_InitTypeDef??SPI_InitStruct;
SPI_InitStruct.SPI_Mode?=SPI_Mode_Master;???????//主
.....
SPI_InitStruct.SPI_CPOL?=SPI_CPOL_High;?//SCK空閑時為高電平
SPI_InitStruct.SPI_CPHA?=SPI_CPHA_1Edge;//SCK第一個邊沿有效
.....
SPI_Init(SPI2,