資源描述:
《SPI數(shù)據(jù)發(fā)送與接收機(jī)制》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、SPI數(shù)據(jù)發(fā)送與接收機(jī)制1SPI簡介SPI是一個環(huán)形總線結(jié)構(gòu),以主從方式工作,這種模式通常有一個主設(shè)備和一個或多個從設(shè)備,需要至少4根線(單向傳輸時,3根線也可以),由ss(cs)、sck、sdi、sdo構(gòu)成,其時序其實(shí)很簡單,主要是在sck的控制下,兩個雙向移位寄存器進(jìn)行數(shù)據(jù)交換,允許MCU以全雙工的同步串行方式。只規(guī)定了每一幀數(shù)據(jù)如何傳輸,并未對幀結(jié)構(gòu)的組成做介紹。2SPI特點(diǎn)2.1采用主-從模式的控制方式兩個SPI設(shè)備之間通信必須由主設(shè)備來控制次設(shè)備。一個主設(shè)備可以通過提供Clock以及對從設(shè)備進(jìn)行片選(SlaveSelect/ss)來控制多個從設(shè)備,SPI協(xié)議還
2、規(guī)定從設(shè)備的Clock由Master設(shè)備通過SCK管腳提供給從設(shè)備,從設(shè)備本身不能產(chǎn)生或控制Clock,沒有Clock則從設(shè)備不能正常工作。2.2采用同步方式傳輸數(shù)據(jù)Master設(shè)備會根據(jù)將要交換的數(shù)據(jù)來產(chǎn)生相應(yīng)的時鐘脈沖(ClockPulse),時鐘脈沖組成了時鐘信號(ClockSignal),時鐘信號通過時鐘極性(CPOL)和時鐘相位(CPHA)控制著兩個SPI設(shè)備間何時數(shù)據(jù)交換以及何時對接收到的數(shù)據(jù)進(jìn)行采樣,來保證數(shù)據(jù)在兩個設(shè)備之間是同步傳輸?shù)摹?.3數(shù)據(jù)交換(DataExchanges)SPI設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換,是因為SPI協(xié)議規(guī)定一個SPI
3、設(shè)備不能在數(shù)據(jù)通信過程中僅僅只充當(dāng)一個"發(fā)送者(Transmitter)"或者"接收者(Receiver)"。在每個Clock周期內(nèi),SPI設(shè)備都會發(fā)送并接收一個bit大小的數(shù)據(jù),相當(dāng)于該設(shè)備有一個bit大小的數(shù)據(jù)被交換了。一個從設(shè)備要想能夠接收到Master發(fā)過來的控制信號,必須在此之前能夠被Master設(shè)備進(jìn)行訪問(Access)。所以,Master設(shè)備必須首先通過SS/CSpin對從設(shè)備進(jìn)行片選,把想要訪問的從設(shè)備選上。在數(shù)據(jù)傳輸?shù)倪^程中,每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣。如果之前接收到的數(shù)據(jù)沒有被讀取,那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會被丟棄,導(dǎo)
4、致SPI物理模塊最終失效。因此,在程序中一般都會在SPI傳輸完數(shù)據(jù)后,去讀取SPI設(shè)備里的數(shù)據(jù),即使這些數(shù)據(jù)(DummyData)在我們的程序里是無用的。3SPI數(shù)據(jù)發(fā)送與接收機(jī)制3.1概述SSPBUF(SynchronousSerialPortBuffer),泛指SPI設(shè)備里面的內(nèi)部緩沖區(qū),一般在物理上是以FIFO的形式,保存?zhèn)鬏斶^程中的臨時數(shù)據(jù);SSPSR(SynchronousSerialPortRegister),泛指SPI設(shè)備里面的移位寄存器(ShiftRegitser),它的作用是根據(jù)設(shè)置好的數(shù)據(jù)位寬(bit-width)把數(shù)據(jù)移入或者移出SSPBUF;Co
5、ntroller,泛指SPI設(shè)備里面的控制寄存器,可以通過配置它們來設(shè)置SPI總線的傳輸模式。通常情況下,我們只需要對上圖所描述的四個管腳(pin)進(jìn)行編程即可控制整個SPI設(shè)備之間的數(shù)據(jù)通信:SCK,SerialClock,主要的作用是Master設(shè)備往從設(shè)備傳輸時鐘信號,控制數(shù)據(jù)交換的時機(jī)以及速率;SS/CS,SlaveSelect/ChipSelect,用于Master設(shè)備片選從設(shè)備,使被選中的從設(shè)備能夠被Master設(shè)備所訪問;SDO/MOSI,SerialDataOutput/MasterOutSlaveIn,在Master上面也被稱為Tx-Channel,作
6、為數(shù)據(jù)的出口,主要用于SPI設(shè)備發(fā)送數(shù)據(jù);SDI/MISO,SerialDataInput/MasterInSlaveOut,在Master上面也被稱為Rx-Channel,作為數(shù)據(jù)的入口,主要用于SPI設(shè)備接收數(shù)據(jù);SPI設(shè)備在進(jìn)行通信的過程中,Master設(shè)備和從設(shè)備之間會產(chǎn)生一個數(shù)據(jù)鏈路回環(huán)(DataLoop),就像上圖所畫的那樣,通過SDO和SDI管腳,SSPSR控制數(shù)據(jù)移入移出SSPBUF,Controller確定SPI總線的通信模式,SCK傳輸時鐘信號。3.2TimingCPOL:時鐘極性,表示SPI在空閑時,時鐘信號是高電平還是低電平。若CPOL被設(shè)為1,
7、那么該設(shè)備在空閑時SCK管腳下的時鐘信號為高電平。當(dāng)CPOL被設(shè)為0時則正好相反。CPHA:時鐘相位,表示SPI設(shè)備是在SCK管腳上的時鐘信號變?yōu)樯仙貢r觸發(fā)數(shù)據(jù)采樣,還是在時鐘信號變?yōu)橄陆笛貢r觸發(fā)數(shù)據(jù)采樣。若CPHA被設(shè)置為1,則SPI設(shè)備在時鐘信號變?yōu)橄陆笛貢r觸發(fā)數(shù)據(jù)采樣,在上升沿時發(fā)送數(shù)據(jù)。當(dāng)CPHA被設(shè)為0時也正好相反。上圖使用的SPI數(shù)據(jù)傳輸模式被設(shè)置成CPOL=1,CPHA=1。3.3SSPSRSSPSR是SPI設(shè)備內(nèi)部的移位寄存器(ShiftRegister)。它的主要作用是根據(jù)SPI時鐘信號狀態(tài),往SSPBUF里移入或者移