王 霞
?
一種SPI全雙工通信方法討論
王 霞
深圳市中興微電子技術(shù)有限公司,江蘇 南京 210012
使用SPI全雙工通信方法,可以有效提高SPI的讀寫(xiě)速率,為雙處理器連接的項(xiàng)目提供一種高速可靠的總線接口方式。
SPI;全雙工;雙處理器;通信
SPI總線是一種通用的同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。SPI傳輸為主從模式,需要Master提供時(shí)鐘,Slave被動(dòng)接收或發(fā)送。若Slave主動(dòng)發(fā)送數(shù)據(jù)到Master,需要通知Master以提供時(shí)鐘發(fā)起數(shù)據(jù)傳輸過(guò)程[1]。
本文描述SPI的全雙工通信方式以及數(shù)據(jù)包格式。
方案采用雙線通知模式,SPIMO_INT和SPISO_INT兩根通知線。當(dāng)Master發(fā)起數(shù)據(jù)傳輸時(shí),通過(guò)SPIMO_INT通知Slave。
當(dāng)Slave發(fā)起數(shù)據(jù)傳輸時(shí),通過(guò)SPISO_INT通知Matser,而后Master發(fā)起數(shù)據(jù)傳輸。這里Master采用SPIMO_INT輸出至Slave,原因?yàn)榭墒筍lave不需要對(duì)數(shù)據(jù)包解析,通過(guò)檢測(cè)SPIMO_INT變化來(lái)結(jié)束傳輸過(guò)程。同時(shí),也可以使Slave在傳輸出錯(cuò)時(shí),能夠識(shí)別出下一次傳輸?shù)钠鹗?。Slave采用SPISO_INT輸出至Master,主要作用為以此來(lái)喚起Master發(fā)起數(shù)據(jù)傳輸過(guò)程。
圖1 SPI連接圖
在Master和Slave發(fā)送數(shù)據(jù)包不等長(zhǎng)條件下,Master需要解析Slave發(fā)送的數(shù)據(jù)包頭,判斷傳輸過(guò)程結(jié)束。使用如下方法:
Master傳輸完一包數(shù)據(jù)后,若沒(méi)有超過(guò)MAX_TRANS_SIZE,則查看是否有待發(fā)數(shù)據(jù)。若有待發(fā)數(shù)據(jù),則繼續(xù)下一包發(fā)送。若沒(méi)有待發(fā)數(shù)據(jù),則解析從Slave接收數(shù)據(jù)的包頭,查看是否從Slave接收完畢。若接收完畢,則結(jié)束傳輸。若Slave還有待發(fā)數(shù)據(jù),則Master再增補(bǔ)一段零傳輸,直到Slave的待發(fā)數(shù)據(jù)發(fā)送完畢為止。最后,結(jié)束當(dāng)前傳輸,將SPIMO_INT拉低。狀態(tài)流程轉(zhuǎn)換如圖 2描述,其中Master是否發(fā)起再次傳輸,可根據(jù)調(diào)試情況變動(dòng),但以累計(jì)發(fā)送量不超過(guò)MAX_TRANS_SIZE為基準(zhǔn)。
圖2 Master發(fā)起全雙工流程
2.1 連續(xù)包處理
Master:發(fā)送完一包數(shù)據(jù)時(shí),若不超MAX_TRANS_SIZE,可繼續(xù)進(jìn)行發(fā)送。按照連續(xù)包格式發(fā)送[2]。
Slave:發(fā)送完一包數(shù)據(jù)時(shí),若不超MAX_TRANS_SIZE,可繼續(xù)進(jìn)行發(fā)送。若產(chǎn)生FIFO溢出時(shí),放棄傳輸。由于Slave傳輸受到Master控制,若使用連續(xù)包發(fā)送,中間可能會(huì)有FIFO溢出的可能,也需要增加判別手段。因此,方案中Slave不使用連續(xù)發(fā)送方式。
由于SPI需要傳輸變長(zhǎng)數(shù)據(jù),會(huì)存在無(wú)效數(shù)據(jù),因此,需要規(guī)劃一種數(shù)據(jù)包格式,將無(wú)效數(shù)據(jù)過(guò)濾掉。當(dāng)Master和Slave間進(jìn)行傳輸時(shí),以此數(shù)據(jù)包作為單位,對(duì)接收數(shù)據(jù)進(jìn)行解析。數(shù)據(jù)的包頭信息,用于解析隨后傳輸?shù)臄?shù)據(jù)。
3.1 單數(shù)據(jù)包
單數(shù)據(jù)包格式如圖3描述:
圖3單數(shù)據(jù)包格式
數(shù)據(jù)發(fā)送方需要按照最小MIN_TRANS_SIZE來(lái)發(fā)送數(shù)據(jù)包,不足時(shí)需要增補(bǔ)無(wú)效的0x00數(shù)據(jù)。在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)長(zhǎng)度以MIN_TRANS_SIZE對(duì)齊,不足時(shí)補(bǔ)0x00數(shù)據(jù)。軟件在配置SPI FIFO觸發(fā)門(mén)限時(shí),可以配置MIN_TRANS_SIZE。最大傳輸數(shù)據(jù)包長(zhǎng)度為MAX_TRANS_SIZE,其長(zhǎng)度為以上包格式中所有字段的長(zhǎng)度和。
1)包起始標(biāo)志:標(biāo)示數(shù)據(jù)包的起始。
2)包長(zhǎng)度:數(shù)據(jù)包數(shù)據(jù)區(qū)的長(zhǎng)度,單位byte。
3)數(shù)據(jù):數(shù)據(jù)區(qū),需要傳輸?shù)臄?shù)據(jù)。
4)包結(jié)束標(biāo)志:標(biāo)示數(shù)據(jù)包的結(jié)束,可用此標(biāo)志來(lái)判斷數(shù)據(jù)包的合法性。尤其,當(dāng)Slave FIFO下溢出時(shí),Master用此標(biāo)志可以確定數(shù)據(jù)包是否正常傳輸完畢,以判斷數(shù)據(jù)的正確性[3]。
3.2 連續(xù)數(shù)據(jù)包
連續(xù)數(shù)據(jù)包格式如圖4描述:
圖4連續(xù)數(shù)據(jù)包格式
連續(xù)包是在一次數(shù)據(jù)傳輸過(guò)程中完成,接收方需要能夠解析數(shù)據(jù)包。一包數(shù)據(jù)長(zhǎng)度對(duì)齊至MIN_TRANS_SIZE,其起始標(biāo)志作為一包數(shù)據(jù)的開(kāi)始,用結(jié)束標(biāo)志判斷數(shù)據(jù)的合法性。解析時(shí),能夠過(guò)濾掉增補(bǔ)的無(wú)效0數(shù)據(jù)。
方案中,只允許Master使用連續(xù)數(shù)據(jù)包格式進(jìn)行發(fā)送。Slave進(jìn)行解析時(shí),可參考DMA實(shí)際傳輸長(zhǎng)度為解析的最大基準(zhǔn)長(zhǎng)度。
[1]陳楊,胡偉圣,馬陸.應(yīng)用于Wi-Fi衛(wèi)星通信系統(tǒng)的驗(yàn)證平臺(tái)實(shí)現(xiàn)[J].信息技術(shù),2016(6):21-26.
[2]魏小景.異步串行通信(UART)在DSP系統(tǒng)中的研究實(shí)現(xiàn)[J].科學(xué)與財(cái)富,2015(2):142.
[3]翟瑞永,張文棟,周兆英,等.SPI串行DataFlash在MEMS姿態(tài)測(cè)量系統(tǒng)中的應(yīng)用[J].電子技術(shù)應(yīng)用,2013,39(8):37-39.
A method of SPI full duplex communication
Wang Xia
Shenzhen Zhongxing Microelectronics Technology Co., Ltd., Jiangsu 210012
SPI full duplex communication method can effectively improve the read and write rate of SPI, providing a high-speed and reliable bus interface for the dual processor connected projects.
SPI; full duplex; dual processor; communication
TP368.12
A
1009-6434(2016)12-0053-02