資料介紹
有哪些內(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ě)過(guò)及其,今天我們來(lái)介紹SPI協(xié)議,SPI是Serial Perripheral Interface的簡(jiǎn)稱,是由Motorola公司推出的一種高速、全雙工的總線協(xié)議。

與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í),通過(guò)CS來(lái)選擇要控制的從機(jī)設(shè)備。和標(biāo)準(zhǔn)SPI類似的協(xié)議,還有TI的SSP協(xié)議,區(qū)別主要在片選信號(hào)的時(shí)序上。

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線制SPI,根據(jù)不同的應(yīng)用場(chǎng)景,主要有以下2種類型:
-
只有3根線:SCLK,CS和DI或DO,適用于單工通訊,主機(jī)只發(fā)送或接收數(shù)據(jù)。
-
只有3根線:SCLK,SDIO和CS,這里的SDIO作為雙向端口,適用于半雙工通訊,比如ADI的多款ADC芯片都支持雙向傳輸。在使用FPGA操作雙向端口時(shí),作為輸入時(shí)要設(shè)置為高阻態(tài)z。

還有標(biāo)準(zhǔn)SPI協(xié)議的升級(jí)版,Dual SPI、Quad SPI和QPI等,這些協(xié)議不在本小節(jié)3線/4線制討論的范圍內(nèi),文章后面會(huì)提到。
4種工作模式
既然是進(jìn)行數(shù)據(jù)傳輸,雙方就要明確從機(jī)在什么時(shí)刻去采樣主機(jī)發(fā)出的數(shù)據(jù),主機(jī)在什么時(shí)刻去讀取從機(jī)發(fā)來(lái)的數(shù)據(jù)。對(duì)于STM32等MCU自帶的硬件SPI外設(shè)來(lái)說(shuō),可能沒(méi)有那么重要,只需要配置一下模式就行了,但是對(duì)于使用使用GPIO模擬或者FPGA來(lái)實(shí)現(xiàn)SPI的時(shí)序,這一點(diǎn)是非常重要的,這就涉及到SPI標(biāo)準(zhǔn)協(xié)議的工作模式了,通過(guò)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è)就知道了。
以我最近工作中使用到的一款Cypress的鐵電存儲(chǔ)器FM25V05為例,在其官方DataSheet上介紹同時(shí)支持SPI Mode 0和Mode 3,

根據(jù)后面的時(shí)序圖,可以得知SPI mode 0的讀寫(xiě)時(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è)寄存器的值即可,而且是寫(xiě)了SCK高電平還是低電平,和第一個(gè)還是第二個(gè)邊沿,不用去記憶等于0還是等于1。以STM32F103硬件SPI配置為例:
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,&SPI_InitStruct);
而在FPGA中實(shí)現(xiàn),需要嚴(yán)格根據(jù)時(shí)序來(lái)控制SCK和數(shù)據(jù)的輸入輸出。
多種傳輸速率
SCK的速率就是SPI的傳輸速率,SPI協(xié)議沒(méi)有一個(gè)固定的速率,不像IIC標(biāo)準(zhǔn)模式100K,快速模式400K,高速模式3.4M,SPI的傳輸速率取決于器件本身支持多高的速率,器件手冊(cè)里都有描述,以FM25V05為例:


SPI協(xié)議的基本時(shí)序
CS為低電平時(shí),表示對(duì)應(yīng)的從機(jī)設(shè)備被使能,在每個(gè)SCLK周期可以傳輸1Bit數(shù)據(jù),采樣時(shí)刻取決于器件支持的SPI mode,根據(jù)不同SPI器件的控制方法,在進(jìn)行正式的數(shù)據(jù)讀寫(xiě)操作前,一般需要先寫(xiě)入控制字,然后是寄存器地址和數(shù)據(jù)。下圖是FM25V05鐵電存儲(chǔ)器采用SPI模式0的寫(xiě)時(shí)序:

讀時(shí)序:

如果要使用FPGA來(lái)實(shí)現(xiàn)SPI時(shí)序,在CS下降沿和SCLK第一個(gè)邊沿,或CS上升沿和SCLK最后一個(gè)邊沿之間要留有一定的延遲時(shí)間,一般是0.5個(gè)SCLK周期。

一些SPI從機(jī)設(shè)備支持菊花鏈連接模式,即節(jié)省GPIO,又不會(huì)占據(jù)太多布線面積,但并不是所有的SPI器件都支持菊花鏈模式。

控制時(shí)序:

SPI協(xié)議的升級(jí)版
傳統(tǒng)標(biāo)準(zhǔn)的SPI協(xié)議,一個(gè)SCLK周期只能傳輸1Bit數(shù)據(jù),能不能一個(gè)SCLK傳輸多個(gè)Bit數(shù)據(jù)呢?答案是可以的。Motorola公司在現(xiàn)有的標(biāo)準(zhǔn)4線SPI協(xié)議上,又開(kāi)發(fā)出了多種SPI協(xié)議的升級(jí)版,通過(guò)增加數(shù)據(jù)線位數(shù)的方式,來(lái)提高數(shù)據(jù)傳輸?shù)男剩壳昂芏郌lash廠家都已經(jīng)支持多種SPI協(xié)議。
以比較常用的一款SPI Flash ROM W25Q128FW為例,在其器件手冊(cè)上寫(xiě)著除了標(biāo)準(zhǔn)的4線SPI模式,還支持Dual SPI,Quad SPI,QPI等,在這幾種模式下,IO0/1/2/3這些IO作為雙向端口,大大增加了數(shù)據(jù)讀寫(xiě)的速率。

QSPI協(xié)議讀寫(xiě)時(shí)序:

一些支持QSPI協(xié)議的Flash芯片型號(hào):

FPGA實(shí)測(cè)SPI波形
FPGA實(shí)現(xiàn)、SPI、IIC等串行時(shí)序,最常用的實(shí)現(xiàn)方式就是狀態(tài)機(jī)大法,將各個(gè)步驟分解為各個(gè)狀態(tài),然后根據(jù)不同的狀態(tài)去控制輸出或讀取輸入,細(xì)節(jié)方面需要考慮數(shù)據(jù)的對(duì)齊、建立和保持時(shí)間、一些異常情況時(shí)狀態(tài)的跳轉(zhuǎn),不能進(jìn)入死循環(huán),或卡死在某一個(gè)狀態(tài)。
下圖的波形是使用Xilinx FPGA對(duì)一款鐵電存儲(chǔ)器FM25V05的驅(qū)動(dòng),采用標(biāo)準(zhǔn)4線SPI協(xié)議,和IIC接口的ERPOM操作方式類似:先寫(xiě)控制字,再寫(xiě)地址,再寫(xiě)數(shù)據(jù)或者讀數(shù)據(jù),SCK時(shí)鐘頻率40MHz,使用ChipScope抓取到的實(shí)際讀寫(xiě)波形,在SCK低電平中間數(shù)據(jù)改變,在SCK上升沿左右數(shù)據(jù)要保持穩(wěn)定。
SPI寫(xiě)時(shí)序,需要注意的是先寫(xiě)使能命令,然后重新產(chǎn)生CS信號(hào),這一塊卡了好久,在官方示例的C代碼中才發(fā)現(xiàn)了問(wèn)題所在,還是對(duì)手冊(cè)上的時(shí)序理解不到位。

SPI讀時(shí)序,先寫(xiě)控制字,再寫(xiě)16位地址,然后讀8位數(shù)據(jù)。
FM25V05讀時(shí)序SPI和IIC的對(duì)比
-
SPI是全雙工,而IIC是半雙工。
-
IIC支持多主機(jī)多從機(jī)模式,而SPI只能有一個(gè)主機(jī)。
-
從GPIO占用上來(lái)看,IIC占用更少的GPIO,更節(jié)省資源。
-
SPI的數(shù)據(jù)位寬更靈活,可以根據(jù)需要選擇多位數(shù)據(jù)寬度。
-
SPI協(xié)議沒(méi)有響應(yīng)機(jī)制,主機(jī)無(wú)法得知從機(jī)是否接收到所發(fā)的數(shù)據(jù),如果不采取一些方法的話可能會(huì)導(dǎo)致數(shù)據(jù)丟幀。
-
正是因?yàn)闆](méi)有復(fù)雜的響應(yīng)機(jī)制,SPI協(xié)議可以做到非常高的速率(上百兆),每一個(gè)SCK都可以進(jìn)行數(shù)據(jù)的傳輸,通過(guò)引入CRC校驗(yàn)等校驗(yàn)方法,可以即高速傳輸數(shù)據(jù),又能保持?jǐn)?shù)據(jù)的準(zhǔn)確度。
-
IIC通過(guò)器件地址來(lái)選擇從機(jī),從機(jī)數(shù)量的增加不會(huì)導(dǎo)致GPIO的增加,而SPI通過(guò)CS選擇從機(jī),每增加一個(gè)從機(jī)就要多占用一個(gè)GPIO,當(dāng)然也可以通過(guò)加入譯碼器來(lái)實(shí)現(xiàn)多從機(jī)控制。
-
SPI協(xié)議在SCLK邊沿進(jìn)行采樣,IIC在SCL高電平器件進(jìn)行采樣。
-
兩者大多都應(yīng)用于板內(nèi)器件短距離通訊。
總結(jié)
使用FPGA來(lái)實(shí)現(xiàn)SPI時(shí)序,最大的好處就是靈活,時(shí)序可以根據(jù)需要精確的定制,可以實(shí)現(xiàn)非常高的速率,特別是同時(shí)驅(qū)動(dòng)多片芯片上有很大的優(yōu)勢(shì),在一些高速AD采集的場(chǎng)合必須使用FPGA來(lái)實(shí)現(xiàn),難點(diǎn)就是做起來(lái)比較麻煩,需要一點(diǎn)點(diǎn)的調(diào)試,仿真,雖然FPGA也有一些現(xiàn)成的IP可以使用,但還是不夠靈活。不像STM32等MCU那樣有現(xiàn)成的庫(kù)函數(shù)和寄存器簡(jiǎn)單幾行代碼配置一下,就可以實(shí)現(xiàn)主從模式、SPI模式、數(shù)據(jù)位寬、多種速率、單線雙線、半雙工全雙工、DMA等等。總之,F(xiàn)PGA和MCU各有優(yōu)點(diǎn),也各有不足,根據(jù)需求來(lái)選擇吧!無(wú)論采用什么控制器實(shí)現(xiàn),只要根據(jù)數(shù)據(jù)手冊(cè)嚴(yán)格控制時(shí)序,就沒(méi)有什么協(xié)議是不能搞定的!
- 一文看懂SPI協(xié)議
- SPI接口通信協(xié)議詳解:SPI時(shí)序、2線、3線、4線SPI及4種常用工作模式
- 直角走線對(duì)信號(hào)的影響資料下載
- PCB三種特殊走線技巧:直角走線,差分走線,蛇形線資料下載
- 關(guān)于時(shí)鐘線/數(shù)據(jù)線/地址線上串聯(lián)電阻及其作用資料下載
- FR4敷銅板上走線和過(guò)孔的電流承載能力的方案和測(cè)試資料下載
- 一張表總結(jié)常規(guī)DDR3的走線設(shè)計(jì)資料下載
- SPI總線協(xié)議介紹(接口定義,傳輸時(shí)序)資料下載
- PCB LAYOUT的直角走線、差分走線、蛇形線資料下載
- 用現(xiàn)成IP不寫(xiě)任何代碼怎么實(shí)現(xiàn)三線制SPI資料下載
- 電磁流量計(jì)接線圖及信號(hào)線、勵(lì)磁線、電源線等型號(hào)規(guī)格資料下載
- 數(shù)字電路4線步進(jìn)電機(jī)控制的仿真資料免費(fèi)下載 14次下載
- 使用nRF51822驅(qū)動(dòng)天馬4線SPI的LCD彩屏的程序免費(fèi)下載
- 4線SPI彩屏局部刷屏偏移應(yīng)該如何解決
- 4線單極性步進(jìn)馬達(dá)線 技術(shù)資料 7次下載
- 負(fù)載電流是線電流還是相電流 1138次閱讀
- GitHub Copilot+ESP開(kāi)發(fā)實(shí)戰(zhàn)-SPI 484次閱讀
- MSPM0L1306開(kāi)發(fā)板教程-SPI 2609次閱讀
- SPI接口如何幫助減少系統(tǒng)板設(shè)計(jì)中的數(shù)字GPIO數(shù)量 1190次閱讀
- K線診斷協(xié)議驅(qū)動(dòng)器的工作原理及如何實(shí)現(xiàn)設(shè)計(jì) 6257次閱讀
- 二線三線的溫度傳感器怎么接線? 3.8w次閱讀
- 詳解SPI總線協(xié)議與時(shí)序圖 1.4w次閱讀
- SPI總線協(xié)議的通信原理解析 4456次閱讀
- 串行外設(shè)接口SPI通信協(xié)議的應(yīng)用 1900次閱讀
- 重點(diǎn)介紹常用的4線SPI接口 1.9w次閱讀
- 深入剖析4線SPI器件 1.2w次閱讀
- 介紹常用的4線SPI接口 6.5w次閱讀
- 兩線制、三線制、四線制它們的定義 1.3w次閱讀
- 線編程技術(shù) STC單片機(jī)的下載線設(shè)計(jì) 4143次閱讀
- 硬線和軟線的區(qū)別在哪?家裝硬線好還是軟線好?空調(diào)軟線好還是硬線好? 1.6w次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 11次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5DIY動(dòng)手組裝LED電子顯示屏
- 0.98 MB | 3次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)PM2.5檢測(cè)系統(tǒng)程序
- 0.83 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537797次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191186次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論