0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于SPI通訊的精講 SPI協(xié)議的特點(diǎn)和工作機(jī)制

嵌入式應(yīng)用開發(fā) ? 來(lái)源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-05-08 19:55 ? 次閱讀

1、SPI協(xié)議簡(jiǎn)介

1.1 SPI協(xié)議概括

SPI,是英語(yǔ)Serial Peripheral interface的縮寫,顧名思義就是串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在 EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片集成了這種通信協(xié)議,比如MSP430單片機(jī)系列處理器。

1.2 SPI優(yōu)點(diǎn)

1):支持全雙工通信

2):通信簡(jiǎn)單

3):數(shù)據(jù)傳輸速率快

1.3 缺點(diǎn)
沒有指定的流控制,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù),所以跟IIC總線協(xié)議比較在數(shù)據(jù)
可靠性上有一定的缺陷。

2、 特點(diǎn)

2.1 采用主-從模式(Master-Slave) 的控制方式

SPI 規(guī)定了兩個(gè) SPI 設(shè)備之間通信必須由主設(shè)備 (Master) 來(lái)控制次設(shè)備 (Slave)。 一個(gè) Master 設(shè)備可以通過提供 Clock 以及對(duì) Slave 設(shè)備進(jìn)行片選 (Slave Select) 來(lái)控制多個(gè) Slave 設(shè)備,SPI 協(xié)議還規(guī)定 Slave 設(shè)備的 Clock 由 Master 設(shè)備通過 SCK 管腳提供給 Slave 設(shè)備, Slave 設(shè)備本身不能產(chǎn)生或控制 Clock,沒有 Clock 則 Slave 設(shè)備不能正常工作。

2.2 采用同步方式(Synchronous)傳輸數(shù)據(jù)

Master 設(shè)備會(huì)根據(jù)將要交換的數(shù)據(jù)來(lái)產(chǎn)生相應(yīng)的時(shí)鐘脈沖(Clock Pulse),時(shí)鐘脈沖組成了時(shí)鐘信號(hào)(Clock Signal) ,時(shí)鐘信號(hào)通過時(shí)鐘極性 (CPOL) 和 時(shí)鐘相位 (CPHA) 控制著兩個(gè) SPI 設(shè)備間何時(shí)數(shù)據(jù)交換以及何時(shí)對(duì)接收到的數(shù)據(jù)進(jìn)行采樣,來(lái)保證數(shù)據(jù)在兩個(gè)設(shè)備之間是同步傳輸?shù)?/strong>。

pYYBAGJ3gy-AI_ZHAABsA60gq2c387.jpg

2.3 數(shù)據(jù)交換(Data Exchanges)

SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換是因?yàn)?SPI 協(xié)議規(guī)定一個(gè) SPI 設(shè)備不能在數(shù)據(jù)通信過程中僅僅只充當(dāng)一個(gè) "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)"。在每個(gè) Clock 周期內(nèi),SPI 設(shè)備都會(huì)發(fā)送并接收一個(gè) bit 大小的數(shù)據(jù)(不管主設(shè)備好還是從設(shè)備),相當(dāng)于該設(shè)備有一個(gè) bit 大小的數(shù)據(jù)被交換了。一個(gè) Slave 設(shè)備要想能夠接收到 Master 發(fā)過來(lái)的控制信號(hào),必須在此之前能夠被 Master 設(shè)備進(jìn)行訪問 (Access)。所以,Master 設(shè)備必須首先通過 SS/CS pin 對(duì) Slave 設(shè)備進(jìn)行片選, 把想要訪問的 Slave 設(shè)備選上。 在數(shù)據(jù)傳輸?shù)倪^程中,每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣。如果之前接收到的數(shù)據(jù)沒有被讀取,那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會(huì)被丟棄,導(dǎo)致 SPI 物理模塊最終失效。因此,在程序中一般都會(huì)在 SPI 傳輸完數(shù)據(jù)后,去讀取 SPI 設(shè)備里的數(shù)據(jù), 即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無(wú)用的(雖然發(fā)送后緊接著的讀取是無(wú)意義的,但仍然需要從寄存器中讀出來(lái))。

2.5 SPI只有主模式和從模式之分

SPI沒有讀和寫的說法,因?yàn)閷?shí)質(zhì)上每次SPI是主從設(shè)備在交換數(shù)據(jù)。也就是說,你發(fā)一個(gè)數(shù)據(jù)必然會(huì)收到一個(gè)數(shù)據(jù);你要收一個(gè)數(shù)據(jù)必須也要先發(fā)一個(gè)數(shù)據(jù)。

3、 工作機(jī)制

3.1 概述

poYBAGJ3gy-ARK0nAABdZAogIIg413.jpg

上圖只是對(duì) SPI 設(shè)備間通信的一個(gè)簡(jiǎn)單的描述, 下面就來(lái)解釋一下圖中所示的幾個(gè)組件:

  • SSPBUF:泛指 SPI 設(shè)備里面的內(nèi)部緩沖區(qū),一般在物理上是以 FIFO 的形式,保存?zhèn)鬏斶^程中的臨時(shí)數(shù)據(jù);
  • SSPSR:泛指 SPI 設(shè)備里面的移位寄存器,它的作用是根據(jù)設(shè)置好的數(shù)據(jù)位寬(bit-width) 把數(shù)據(jù)移入或者移出 SSPBUF;
  • Controller:泛指 SPI 設(shè)備里面的控制寄存器,可以通過配置它們來(lái)設(shè)置 SPI 總線的傳輸模式。

通常情況下,我們只需要對(duì)上圖所描述的四個(gè)管腳(pin) 進(jìn)行編程即可控制整個(gè) SPI 設(shè)備之間的數(shù)據(jù)通信:

  • SCK:主要的作用是 Master(主)設(shè)備往 Slave(從)設(shè)備傳輸時(shí)鐘信號(hào), 控制數(shù)據(jù)交換的時(shí)機(jī)以及速率;
  • SS/CS:用于 Master(主)設(shè)備片選 Slave (從)設(shè)備,使被選中的 Slave(從)設(shè)備能夠被 Master(主)設(shè)備所訪問;
  • SDO/MOSI:在 Master(主)上面也被稱為 Tx-Channel,作為數(shù)據(jù)的出口,主要用于 SPI 設(shè)備發(fā)送數(shù)據(jù);
  • SDI/MISO:在 Master(主)上面也被稱為 Rx-Channel,作為數(shù)據(jù)的入口,主要用于SPI 設(shè)備接收數(shù)據(jù);

SPI 設(shè)備在進(jìn)行通信的過程中,Master 設(shè)備和 Slave 設(shè)備之間會(huì)產(chǎn)生一個(gè)數(shù)據(jù)鏈路回環(huán)(Data Loop),就像上圖所畫的那樣, 通過 SDO 和 SDI 管腳, SSPSR 控制數(shù)據(jù)移入移出 SSPBUF,Controller 確定 SPI 總線的通信模式,SCK 傳輸時(shí)鐘信號(hào)。

SDI(數(shù)據(jù)輸入)、SDO(數(shù)據(jù)輸出)、SCK(時(shí)鐘)、CS(片選)

(1)、SDO/MOSI – 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入;

(2)、SDI/MISO – 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出;

(3)、SCK – 時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生;

(4)、CS/SS – 從設(shè)備使能信號(hào),由主設(shè)備控制。當(dāng)有多個(gè)從設(shè)備的時(shí)候,因?yàn)槊總€(gè)從設(shè)備上都有一個(gè)片選引腳接入到主設(shè)備機(jī)中,當(dāng)我們的主設(shè)備和某個(gè)從設(shè)備通信時(shí)將需要將從設(shè)備對(duì)應(yīng)的片選引腳電平拉低或者是拉高。

pYYBAGJ3gzCAc8-zAABiGJNvPUs575.jpg

3.2 SPI相關(guān)的縮寫或說法

SPI的極性Polarity和相位Phase,最常見的寫法是CPOLCPHA,不過也有一些其他寫法,簡(jiǎn)單總結(jié)如下:

  • CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時(shí)鐘)極性
  • CKPHA (Clock Phase) = CPHA = PHA = Phase = (時(shí)鐘)相位
  • SCK=SCLK=SPI的時(shí)鐘
  • Edge=邊沿,即時(shí)鐘電平變化的時(shí)刻,即上升沿(rising edge)或者下降沿(falling edge)對(duì)于一個(gè)時(shí)鐘周期內(nèi),有兩個(gè)edge,分別稱為:
  • Leading edge=前一個(gè)邊沿=第一個(gè)邊沿,對(duì)于開始電壓是1,那么就是1變成0的時(shí)候,對(duì)于開始電壓是0,那么就是0變成1的時(shí)候;
  • Trailing edge=后一個(gè)邊沿=第二個(gè)邊沿,對(duì)于開始電壓是1,那么就是0變成1的時(shí)候(即在第一次1變成0之后,才可能有后面的0變成1),對(duì)于開始電壓是0,那么就是1變成0的時(shí)候;

3.3 SPI總線的極性和相位

CPOL配置SPI總線的極性,CPHA配置SPI總線的相位。

3.3.1 SPI總線的極性

極性,會(huì)直接影響SPI總線空閑時(shí)的時(shí)鐘信號(hào)是高電平還是低電平。

CPOL = 1:表示空閑時(shí)是高電平;

CPOL = 0:表示空閑時(shí)是低電平。

由于數(shù)據(jù)傳輸往往是從跳變沿開始的,也就表示開始傳輸數(shù)據(jù)的時(shí)候,是下降沿還是上升沿。如下圖:

poYBAGJ3gzCAAourAABid430hVU004.jpg

3.3.2 SPI總線的相位

一個(gè)時(shí)鐘周期會(huì)有2個(gè)跳變沿。而相位,直接決定SPI總線從那個(gè)跳變沿開始采樣數(shù)據(jù)。

CPHA = 0:表示從第一個(gè)跳變沿開始采樣;

CPHA = 1:表示從第二個(gè)跳變沿開始采樣。

pYYBAGJ3gzCAXlP_AABFD8L2-hk301.jpg

至于跳變沿究竟是上升沿還是下降沿,這取決于 CPOL。記住, CPHA 只決定是哪個(gè)跳變沿采樣。

3.4 SPI總線傳輸?shù)乃姆N模式

CPOL 和 CPHA 的不同組合,形成了SPI總線的不同模式。

poYBAGJ3gzCAGT7KAAAnILvp2Nw470.jpg

時(shí)鐘極性CPOL是用來(lái)配置SCLK的電平出于哪種狀態(tài)時(shí)是空閑態(tài)或者有效態(tài),時(shí)鐘相位CPHA
是用來(lái)配置數(shù)據(jù)采樣是在第幾個(gè)邊沿:
CPOL=0,表示當(dāng)SCLK=0時(shí)處于空閑態(tài),所以有效狀態(tài)就是SCLK處于高電平時(shí)。
CPOL=1,表示當(dāng)SCLK=1時(shí)處于空閑態(tài),所以有效狀態(tài)就是SCLK處于低電平時(shí)。
CPHA=0,表示數(shù)據(jù)采樣是在第1個(gè)邊沿,數(shù)據(jù)發(fā)送在第2個(gè)邊沿。
CPHA=1,表示數(shù)據(jù)采樣是在第2個(gè)邊沿,數(shù)據(jù)發(fā)送在第1個(gè)邊沿。

例如:
CPOL=0,CPHA=0:此時(shí)空閑態(tài)時(shí),SCLK處于低電平,數(shù)據(jù)采樣是在第1個(gè)邊沿,也就是
SCLK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。

CPOL=0,CPHA=1:此時(shí)空閑態(tài)時(shí),SCLK處于低電平,數(shù)據(jù)發(fā)送是在第1個(gè)邊沿,也就是
SCLK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。

CPOL=1,CPHA=0:此時(shí)空閑態(tài)時(shí),SCLK處于高電平,數(shù)據(jù)采集是在第1個(gè)邊沿,也就是
SCLK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。

CPOL=1,CPHA=1:此時(shí)空閑態(tài)時(shí),SCLK處于高電平,數(shù)據(jù)發(fā)送是在第1個(gè)邊沿,也就是
SCLK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。

pYYBAGJ3gzCAYAfLAAECKXAh6zw827.jpgpoYBAGJ3gzCAalErAACNrCmseMA588.jpg

需要注意的是:我們的主設(shè)備能夠控制時(shí)鐘,因?yàn)镾PI通信并不像UART或者IIC通信那樣有專門的通信周期,有專門的通信起始信號(hào),有專門的通信結(jié)束信號(hào);所以SPI協(xié)議能夠通過控制時(shí)鐘信號(hào)線,當(dāng)沒有數(shù)據(jù)交流的時(shí)候我們的時(shí)鐘線要么是保持高電平要么是保持低電平。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1669

    瀏覽量

    90731
  • SPI協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    8335
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SPI是什么?SPI特點(diǎn)有哪些呢

    SPI是什么?SPI特點(diǎn)有哪些呢?STM32的SPI工作機(jī)制有哪些呢?
    發(fā)表于 11-03 07:14

    探討一下SPI通訊協(xié)議

    來(lái)到SPI通訊協(xié)議了。廢話兩句,“SPI很重要”,這是我在學(xué)校時(shí)候聽那些單片機(jī)開發(fā)工程師說的。出來(lái)實(shí)習(xí),到后來(lái)工作,確實(shí)如此,
    發(fā)表于 02-17 07:30

    基于SPI協(xié)議的SD卡讀寫機(jī)制與實(shí)現(xiàn)方法

    基于SPI協(xié)議的SD卡讀寫機(jī)制與實(shí)現(xiàn)方法。
    發(fā)表于 03-25 11:21 ?27次下載
    基于<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>的SD卡讀寫<b class='flag-5'>機(jī)制</b>與實(shí)現(xiàn)方法

    軟件模擬SPI協(xié)議

    軟件模擬SPI協(xié)議什么是SPISPI的通訊模式通訊協(xié)議詳細(xì)程序簡(jiǎn)寫程序結(jié)語(yǔ)最近在學(xué)習(xí)51單片機(jī)的內(nèi)容,為了防止自己學(xué)過就忘,在這里寫一些平時(shí)
    發(fā)表于 12-22 19:14 ?14次下載
    軟件模擬<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    SPI協(xié)議

    目錄SPI協(xié)議簡(jiǎn)介SPI物理層SPI協(xié)議SPI協(xié)議
    發(fā)表于 12-22 19:17 ?32次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    SPI通訊協(xié)議介紹

    來(lái)到SPI通訊協(xié)議了。廢話兩句,“SPI很重要”,這是我在學(xué)校時(shí)候聽那些單片機(jī)開發(fā)工程師說的。出來(lái)實(shí)習(xí),到后來(lái)工作,確實(shí)如此,
    發(fā)表于 12-22 19:18 ?11次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>通訊</b><b class='flag-5'>協(xié)議</b>介紹

    SPI通信協(xié)議講解

    SPI通信協(xié)議講解SPI通信概念SPI通信SPI 物理層協(xié)議
    發(fā)表于 12-22 19:19 ?26次下載
    <b class='flag-5'>SPI</b>通信<b class='flag-5'>協(xié)議</b>講解

    spi協(xié)議介紹

    文章目錄前言一、SPI介紹1.SPI總線2.尋址方式二、通信原理1.通信過程2.極性和相位3.四種工作模式三、SPI與I2C的異同1.相同點(diǎn)2.不同點(diǎn)總結(jié)前言
    發(fā)表于 12-22 19:21 ?19次下載
    <b class='flag-5'>spi</b><b class='flag-5'>協(xié)議</b>介紹

    SPI通訊協(xié)議必備知識(shí)。

    SPI被廣泛地使用在 ADC、LCD 等設(shè)備與 MCU 間,要求通訊速率較高的場(chǎng)合,也是學(xué)習(xí)STM32必需要掌握的知識(shí)。...
    發(fā)表于 12-22 19:21 ?13次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>通訊</b><b class='flag-5'>協(xié)議</b>必備知識(shí)。

    FPGA實(shí)現(xiàn)的SPI協(xié)議(一)----SPI驅(qū)動(dòng)

    1、什么是SPI協(xié)議SPI(Serial Peripheral Interface,串行外圍設(shè)備接口)通訊協(xié)議,是 Motorola 公司提
    發(fā)表于 12-22 19:29 ?19次下載
    FPGA實(shí)現(xiàn)的<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>(一)----<b class='flag-5'>SPI</b>驅(qū)動(dòng)

    STM32學(xué)習(xí)筆記(15)——SPI協(xié)議

    STM32學(xué)習(xí)筆記(15)——SPI協(xié)議一、SPI協(xié)議簡(jiǎn)介1. 物理層2. 協(xié)議層(1) 通訊
    發(fā)表于 12-22 19:34 ?16次下載
    STM32學(xué)習(xí)筆記(15)——<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    STM32入門(二十六)----SPI—讀寫串行FLASH

    SPI—讀寫串行FLASHSPI協(xié)議SPI物理層的特點(diǎn)SPI協(xié)議
    發(fā)表于 12-29 19:35 ?4次下載
    STM32入門(二十六)----<b class='flag-5'>SPI</b>—讀寫串行FLASH

    一文看懂SPI協(xié)議

    作者:王超首發(fā):電子電路開發(fā)學(xué)習(xí)都有哪些內(nèi)容?SPI協(xié)議簡(jiǎn)介4線還是3線?4種工作模式多種傳輸速率SPI協(xié)議的時(shí)序
    發(fā)表于 01-25 18:35 ?38次下載
    一文看懂<b class='flag-5'>SPI</b><b class='flag-5'>協(xié)議</b>

    什么是SPI機(jī)制

    1、前言 在之前的 JVM 分析系列之類加載 提到過 Java SPI 機(jī)制,主要是類加載器反雙親委派的實(shí)現(xiàn)(第三方包不在指定jdk路徑,一般類加載器無(wú)法加載,需要特殊
    的頭像 發(fā)表于 10-08 15:03 ?931次閱讀
    什么是<b class='flag-5'>SPI</b><b class='flag-5'>機(jī)制</b>