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