找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9133|回復(fù): 0
收起左側(cè)

SPI數(shù)據(jù)發(fā)送與接收機(jī)制(共6頁(yè)pdf教程下載)

[復(fù)制鏈接]
ID:408932 發(fā)表于 2018-10-13 11:15 | 顯示全部樓層 |閱讀模式
1SPI簡(jiǎn)介

SPI 是一個(gè)環(huán)形總線結(jié)構(gòu),以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè) 從設(shè)備,需要至少 4 根線(單向傳輸時(shí),3 根線也可以),由ss(cs)、sck、sdi、sdo 構(gòu)成, 其時(shí)序其實(shí)很簡(jiǎn)單,主要是在 sck 的控制下,兩個(gè)雙向移位寄存器進(jìn)行數(shù)據(jù)交換,允許 MCU 以全雙工的同步串行方式。只規(guī)定了每一幀數(shù)據(jù)如何傳輸,并未對(duì)幀結(jié)構(gòu)的組成做介紹。



2SPI特點(diǎn)


2.1采用主-從模式的控制方式

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


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

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


2.3數(shù)據(jù)交換(DataExchanges)

SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換,是因?yàn)?SPI 協(xié)議規(guī)定一個(gè) SPI 設(shè)備不 能在數(shù)據(jù)通信過(guò)程中僅僅只充當(dāng)一個(gè)"發(fā)送者(Transmitter)"或者"接收者(Receiver)"。在每個(gè) Clock 周期內(nèi),SPI 設(shè)備都會(huì)發(fā)送并接收一個(gè) bit 大小的數(shù)據(jù),相當(dāng)于該設(shè)備有一個(gè) bit 大小 的數(shù)據(jù)被交換了。

一個(gè)從設(shè)備要想能夠接收到 Master 發(fā)過(guò)來(lái)的控制信號(hào),必須在此之前能夠被 Master 設(shè) 備進(jìn)行訪問(wèn)(Access)。所以,Master 設(shè)備必須首先通過(guò) SS/CSpin 對(duì)從設(shè)備進(jìn)行片選,把想要 訪問(wèn)的從設(shè)備選上。

在數(shù)據(jù)傳輸?shù)倪^(guò)程中,每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣。如果之前


接收到的數(shù)據(jù)沒(méi)有被讀取,那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會(huì)被丟棄,導(dǎo)致 SPI 物理 模塊最終失效。因此,在程序中一般都會(huì)在 SPI 傳輸完數(shù)據(jù)后,去讀取 SPI 設(shè)備里的數(shù)據(jù), 即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無(wú)用的。


3SPI數(shù)據(jù)發(fā)送與接收機(jī)制


3.1概述


SSPBUF(Synchronous Serial Port Buffer),泛指 SPI 設(shè)備里面的內(nèi)部緩沖區(qū),一般在物 理上是以 FIFO 的形式,保存?zhèn)鬏斶^(guò)程中的臨時(shí)數(shù)據(jù);

SSPSR(Synchronous Serial Port Register ),泛指 SPI 設(shè)備里面的移位寄存器(Shift

Regitser),它的作用是根據(jù)設(shè)置好的數(shù)據(jù)位寬(bit-width)把數(shù)據(jù)移入或者移出 SSPBUF;

Controller,泛指 SPI 設(shè)備里面的控制寄存器,可以通過(guò)配置它們來(lái)設(shè)置 SPI 總線的傳輸 模式。

通常情況下,我們只需要對(duì)上圖所描述的四個(gè)管腳(pin)進(jìn)行編程即可控制整個(gè) SPI 設(shè)備 之間的數(shù)據(jù)通信:SCK,Serial Clock,主要的作用是 Master 設(shè)備往從設(shè)備傳輸時(shí)鐘信號(hào), 控制數(shù)據(jù)交換的時(shí)機(jī)以及速率;

SS/CS,Slave Select/Chip Select,用于 Master 設(shè)備片選從設(shè)備,使被選中的從設(shè)備能夠 被 Master 設(shè)備所訪問(wèn);

SDO/MOSI,Serial Data Output/Master Out Slave In,在 Master 上面也被稱為 Tx-Channel, 作為數(shù)據(jù)的出口,主要用于 SPI 設(shè)備發(fā)送數(shù)據(jù);

SDI/MISO,Serial Data Input/Master In Slave Out,在 Master 上面也被稱為 Rx-Channel, 作為數(shù)據(jù)的入口,主要用于 SPI 設(shè)備接收數(shù)據(jù);

SPI 設(shè)備在進(jìn)行通信的過(guò)程中,Master 設(shè)備和從設(shè)備之間會(huì)產(chǎn)生一個(gè)數(shù)據(jù)鏈路回環(huán)(Data

Loop),就像上圖所畫(huà)的那樣,通過(guò) SDO 和 SDI 管腳,SSPSR 控制數(shù)據(jù)移入移出 SSPBUF,


Controller 確定 SPI 總線的通信模式,SCK 傳輸時(shí)鐘信號(hào)。


3.2Timing

CPOL:時(shí)鐘極性,表示 SPI 在空閑時(shí),時(shí)鐘信號(hào)是高電平還是低電平。若 CPOL 被設(shè) 為 1,那么該設(shè)備在空閑時(shí) SCK 管腳下的時(shí)鐘信號(hào)為高電平。當(dāng)CPOL 被設(shè)為 0 時(shí)則正好 相反。

CPHA:時(shí)鐘相位,表示 SPI 設(shè)備是在 SCK 管腳上的時(shí)鐘信號(hào)變?yōu)樯仙貢r(shí)觸發(fā)數(shù)據(jù) 采樣,還是在時(shí)鐘信號(hào)變?yōu)橄陆笛貢r(shí)觸發(fā)數(shù)據(jù)采樣。若 CPHA 被設(shè)置為 1,則 SPI 設(shè)備在時(shí) 鐘信號(hào)變?yōu)橄陆笛貢r(shí)觸發(fā)數(shù)據(jù)采樣,在上升沿時(shí)發(fā)送數(shù)據(jù)。當(dāng) CPHA 被設(shè)為 0 時(shí)也正好相 反。

上圖使用的 SPI 數(shù)據(jù)傳輸模式被設(shè)置成 CPOL=1,CPHA=1。


3.3SSPSR


SSPSR 是 SPI 設(shè)備內(nèi)部的移位寄存器(ShiftRegister)。它的主要作用是根據(jù) SPI 時(shí)鐘信號(hào) 狀態(tài) , 往 SSPBUF 里 移入或者 移出數(shù)據(jù) , 每次移動(dòng)的 數(shù)據(jù)大小由 Bus-Width 以及 Channel-Width 所決定。



Bus-Width 的作用是指定地址總線到 Master 設(shè)備之間數(shù)據(jù)傳輸?shù)膯挝弧?例如,我們想要往 Master 設(shè)備里面的 SSPBUF 寫(xiě)入 16Byte 大小的數(shù)據(jù):首先,給Master

設(shè)備的配置寄存器設(shè)置 Bus-Width 為 Byte;然后往 Master 設(shè)備的 Tx-Data 移位寄存器在地 址總線的入口寫(xiě)入數(shù)據(jù),每次寫(xiě)入 1Byte 大小的數(shù)據(jù)(使用 writeb 函數(shù));寫(xiě)完 1Byte 數(shù)據(jù)之 后,Master 設(shè)備里面的 Tx-Data 移位寄存器會(huì)自動(dòng)把從地址總線傳來(lái)的 1Byte 數(shù)據(jù)移入 SSPBUF 里;上述動(dòng)作一共需要重復(fù)執(zhí)行 16次。

Channel-Width 的作用是指定 Master 設(shè)備與從設(shè)備之間數(shù)據(jù)傳輸?shù)膯挝。與 Bus-Width 相似,Master 設(shè)備內(nèi)部的移位寄存器會(huì)依據(jù) Channel-Width 自動(dòng)地把數(shù)據(jù)從 Master-SSPBUF 里通過(guò) Master-SDO 管腳搬運(yùn)到從設(shè)備里的 Slave-SDI 引腳,Slave-SSPSR 再把每次接收的 數(shù)據(jù)移入 Slave-SSPBUF 里。

通常情況下,Bus-Width 總是會(huì)大于或等于 Channel-Width,這樣能保證不會(huì)出現(xiàn)因 Master 與 Slave 之間數(shù)據(jù)交換的頻率比地址總線與 Master 之間的數(shù)據(jù)交換頻率要快,導(dǎo)致 SSPBUF 里面存放的數(shù)據(jù)為無(wú)效數(shù)據(jù)這樣的情況。


3.4SSPBUF。

我們知道,在每個(gè)時(shí)鐘周期內(nèi),Master 與 Slave 之間交換的數(shù)據(jù)其實(shí)都是 SPI 內(nèi)部移位 寄存器從 SSPBUF 里面拷貝的。我們可以通過(guò)往 SSPBUF 對(duì)應(yīng)的寄存器(Tx-Data/Rx-Data register)里讀寫(xiě)數(shù)據(jù),間接地操控 SPI 設(shè)備內(nèi)部的 SSPBUF。例如,在發(fā)送數(shù)據(jù)之前,我們 應(yīng)該先往 Master 的 Tx-Data 寄存器寫(xiě)入將要發(fā)送出去的數(shù)據(jù),這些數(shù)據(jù)會(huì)被 Master-SSPSR 移位寄存器根據(jù) Bus-Width 自動(dòng)移入 Master-SSPBUF 里,然后這些數(shù)據(jù)又會(huì)被 Master-SSPSR 根據(jù) Channel-Width從 Master-SSPBUF 中移出,通過(guò) Master-SDO 管腳傳給 Slave-SDI 管腳, Slave-SSPSR 則把從 Slave-SDI 接收到的數(shù)據(jù)移入 Slave-SSPBUF 里 。 與此同時(shí) ,Slave-SSPBUF 里面的數(shù)據(jù)根據(jù)每次接收數(shù)據(jù)的大小(Channel-Width),通過(guò) Slave-SDO 發(fā)往



Master-SDI,Master-SSPSR 再把從 Master-SDI 接收的數(shù)據(jù)移入 Master-SSPBUF。在單次數(shù) 據(jù)傳輸完成之后,用戶程序可以通過(guò)從 Master 設(shè)備的 Rx-Data 寄存器讀取 Master 設(shè)備數(shù)據(jù) 交換得到的數(shù)據(jù)。


3.5Controller。

Master 設(shè)備 里面的 Controller 主要通過(guò)時(shí)鐘信號(hào)(ClockSignal)以及片選信號(hào)(SlaveSelect Signal)來(lái)控制從


設(shè)備。從設(shè)備會(huì)一直等待,直到接收到 Master 設(shè)備發(fā)過(guò)來(lái)的片選信號(hào),然后根據(jù)時(shí)鐘信號(hào) 來(lái)工作。

Master 設(shè)備的片選操作必須由程序所實(shí)現(xiàn)。例如:由程序把 SS/CS 管腳的時(shí)鐘信號(hào)拉 低電平,完成 SPI 設(shè)備數(shù)據(jù)通信的前期工作;當(dāng)程序想讓 SPI 設(shè)備結(jié)束數(shù)據(jù)通信時(shí),再把 SS/CS 管腳上的時(shí)鐘信號(hào)拉高電平


3.6綜合舉例

假設(shè)主機(jī)和從機(jī)初始化就緒:并且主機(jī)的 sbuff=0xaa,從機(jī)的 sbuff=0x55,下面將分步 對(duì) SPI 的 8 個(gè)時(shí)鐘周期的數(shù)據(jù)情況演示一遍:假設(shè)上升沿發(fā)送數(shù)據(jù),這樣就完成了兩個(gè)寄存 器 8 位的交換,上面的上表示上升沿、下表示下降沿,SDI、SDO 相對(duì)于主機(jī)而言的。




完整的pdf格式文檔51黑下載地址(共6頁(yè)):
SPI數(shù)據(jù)發(fā)送與接收機(jī)制.pdf (341.3 KB, 下載次數(shù): 61)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表