www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 電子電路開發(fā)學(xué)習(xí)
[導(dǎo)讀]有哪些內(nèi)容?SPI協(xié)議簡介4線還是3線?4種工作模式多種傳輸速率SPI協(xié)議的時序SPI協(xié)議的升級版FPGA實現(xiàn)SPI協(xié)議SPI和IIC的對比總結(jié)SPI協(xié)議簡介板卡內(nèi)不同芯片間通訊最常用的三種串行協(xié)議:UART、I2C、SPI,之前寫過串口協(xié)議及其FPGA實現(xiàn),今天我們來介紹SPI...

有哪些內(nèi)容?

  • SPI協(xié)議簡介

  • 4線還是3線?

  • 4種工作模式

  • 多種傳輸速率

  • SPI協(xié)議的時序

  • SPI協(xié)議的升級版

  • FPGA實現(xiàn)SPI協(xié)議

  • SPI和IIC的對比

  • 總結(jié)

SPI協(xié)議簡介

板卡內(nèi)不同芯片間通訊最常用的三種串行協(xié)議:UART、I2C、SPI,之前寫過串口協(xié)議及其FPGA實現(xiàn),今天我們來介紹SPI協(xié)議,SPI是Serial Perripheral Interface的簡稱,是由Motorola公司推出的一種高速、全雙工的總線協(xié)議。

與IIC類似,SPI也是采用主從方式工作,主機(jī)通常為FPGA、MCU或DSP等可編程控制器,從機(jī)通常為EPROM、Flash,AD/DA,音視頻處理芯片等設(shè)備。一般由SCLK、CS、MOSI,MISO四根線組成,有的地方可能是:SCK、SS、SDI、SDO等名稱,都是一樣的含義,當(dāng)有多個從機(jī)存在時,通過CS來選擇要控制的從機(jī)設(shè)備。和標(biāo)準(zhǔn)SPI類似的協(xié)議,還有TI的SSP協(xié)議,區(qū)別主要在片選信號的時序上。

4線還是3線?

當(dāng)我們談到SPI時,默認(rèn)情況下都是指標(biāo)準(zhǔn)的4線制Motorola SPI協(xié)議,即SCLK,MOSI,MISO和CS共4根數(shù)據(jù)線,標(biāo)準(zhǔn)4線制的好處是可以實現(xiàn)數(shù)據(jù)的全雙工傳輸。當(dāng)只有一個主機(jī)和一個從機(jī)設(shè)備時,只需要一個CS,多個從機(jī)需要多個CS,各數(shù)據(jù)線的介紹:

  • SCLK,時鐘信號,時鐘頻率即SPI速率,和SPI模式有關(guān)

  • MOSI,主機(jī)輸出,從機(jī)輸入

  • MISO,主機(jī)輸入,從機(jī)輸出

  • CS,從機(jī)設(shè)備選擇,低電平有效

3線制SPI,根據(jù)不同的應(yīng)用場景,主要有以下2種類型:

  • 只有3根線:SCLK,CS和DI或DO,適用于單工通訊,主機(jī)只發(fā)送或接收數(shù)據(jù)。

  • 只有3根線:SCLK,SDIO和CS,這里的SDIO作為雙向端口,適用于半雙工通訊,比如ADI的多款A(yù)DC芯片都支持雙向傳輸。在使用FPGA操作雙向端口時,作為輸入時要設(shè)置為高阻態(tài)z。

還有標(biāo)準(zhǔn)SPI協(xié)議的升級版,Dual SPI、Quad SPI和QPI等,這些協(xié)議不在本小節(jié)3線/4線制討論的范圍內(nèi),文章后面會提到。

4種工作模式

既然是進(jìn)行數(shù)據(jù)傳輸,雙方就要明確從機(jī)在什么時刻去采樣主機(jī)發(fā)出的數(shù)據(jù),主機(jī)在什么時刻去讀取從機(jī)發(fā)來的數(shù)據(jù)。對于STM32等MCU自帶的硬件SPI外設(shè)來說,可能沒有那么重要,只需要配置一下模式就行了,但是對于使用使用GPIO模擬或者FPGA來實現(xiàn)SPI的時序,這一點是非常重要的,這就涉及到SPI標(biāo)準(zhǔn)協(xié)議的工作模式了,通過CPOL(Clock Polarity)時鐘極性和CPHA(Clock Phase)時鐘相位的不同組合,可以分為4種模式。

一般從機(jī)器件的工作模式是固定的,主機(jī)需要采用一樣的工作模式,雙方才能正?!敖涣鳌薄?/p>CPOL=0表示,SCK在空閑狀態(tài)時為0
CPOL=1表示,SCK在空閑狀態(tài)時為1
CPHA=0表示,在SCK第一個邊沿時輸入輸出數(shù)據(jù)有效
CPHA=1表示,在SCK第二個邊沿時輸入輸出數(shù)據(jù)有效
這四種模式中,應(yīng)用最廣泛的是模式0和3,大多數(shù)SPI器件都同時支持這兩種工作模式,其實這些都不重要,具體采用什么模式,看你的器件手冊就知道了。

以我最近工作中使用到的一款Cypress的鐵電存儲器FM25V05為例,在其官方DataSheet上介紹同時支持SPI Mode 0和Mode 3,

根據(jù)后面的時序圖,可以得知SPI mode 0的讀寫時序,圖中可以看出SCK空閑狀態(tài)為低電平,主機(jī)數(shù)據(jù)在每個上升沿被從機(jī)采樣,數(shù)據(jù)輸出同理。

對于SPI mode0,SCK空閑狀態(tài)為高電平,主機(jī)數(shù)據(jù)在每個上升沿被從機(jī)采樣,數(shù)據(jù)輸出同理。

模式1和模式2同理,模式1即CPOL=0,CPHA=1,SCK空閑為0,在SCK第二個邊沿時數(shù)據(jù)有效,即SCK下降沿有效。

模式2即CPOL=1,CPHA=0SCK空閑為1,在SCK第一個邊沿時數(shù)據(jù)有效,即SCK下降沿有效。

在一些自帶SPI硬件外設(shè)的MCU上,設(shè)置主機(jī)的SPI模式非常簡單,只需要配置幾個寄存器的值即可,而且是寫了SCK高電平還是低電平,和第一個還是第二個邊沿,不用去記憶等于0還是等于1。以STM32F103硬件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,
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉