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