孫 斌, 胡越黎, 王 昆
(上海大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,上海200072)
SPI總線用于雙處理器通信的數(shù)據(jù)鏈路層設(shè)計(jì)及其實(shí)現(xiàn)
孫 斌, 胡越黎, 王 昆
(上海大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,上海200072)
提出一種基于串行外設(shè)接口(serial peripheral interface,SPI)總線的雙處理器間通信的數(shù)據(jù)鏈路層設(shè)計(jì)方法.該方法中的雙向SPI總線具有占用引腳少(僅比SPI總線多一根線)、有完善的數(shù)據(jù)鏈路層協(xié)議控制的優(yōu)點(diǎn),能夠保證數(shù)據(jù)透明地在雙處理器之間進(jìn)行傳輸.以一款帶有顯示單元的車身總線控制器為應(yīng)用對(duì)象,采用ARM9和S12作為雙處理器實(shí)現(xiàn)雙向通信,并對(duì)這一通信方法的實(shí)現(xiàn)和應(yīng)用情況進(jìn)行描述.實(shí)驗(yàn)表明,采用該方法設(shè)計(jì)的協(xié)議比較完善,能夠滿足實(shí)際工程中的需求,對(duì)于其他SPI的應(yīng)用也有很好的借鑒價(jià)值.
雙向通信;串行外設(shè)接口;雙處理器通信;數(shù)據(jù)鏈路層
Abstract:This paper proposes a data link layer design method for dual-processor communication based on serial peripheral interface(SPI)bus.Advantages of the two-way SPI bus in this design include using less pins(only one line more than the SPI bus)and perfect data link layer protocol control.These can ensure transparent data transfer between the two processors.An automotive body bus controller with a display unit was used as an application.It uses ARM9 and S12 as dual-processors to achieve two-way communication.Implementation and application of the method are described.Experiments show that the protocol is effective in engineering practices,and provides a reference to other SPI applications.
Key words:two-way communication;serial peripheral interface(SPI);dual-processor communication;data link layer
系統(tǒng)級(jí)處理器間通信的方式有很多種,其中RS-232,I2C等串行通信總線都已經(jīng)成為較為普遍的選擇之一,但對(duì)高速處理而言,這些串行通信總線速率都比較低.相對(duì)而言,串行外設(shè)接口(serialperipheral interface,SPI)作為一種高速的、全雙工、同步的通信總線,其通信速率基本可以按照通信雙方處理器的處理速度來設(shè)定,滿足了高速處理器對(duì)于通信的要求.
SPI總線系統(tǒng)是一種同步串行外設(shè)接口總線,它采用主從工作方式,即在這種模式下通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,其中主機(jī)控制數(shù)據(jù)傳輸,從機(jī)配合主機(jī)完成傳輸任務(wù).在硬件資源上,SPI通常采用四線制進(jìn)行雙向通信,三線制實(shí)現(xiàn)單向傳輸.在整個(gè)通信過程中信號(hào)線只能由主設(shè)備控制,從機(jī)對(duì)通信過程沒有控制作用.但這種通信方式主要存在如下缺點(diǎn):①缺少組幀機(jī)制;② 通信過程中沒有指定的數(shù)據(jù)流,缺少確認(rèn)是否收到數(shù)據(jù)的應(yīng)答機(jī)制[1];③無任何校驗(yàn),缺少控制傳輸差錯(cuò)的機(jī)制;④缺少對(duì)數(shù)據(jù)流的控制;⑤缺少對(duì)數(shù)據(jù)鏈路的維護(hù)機(jī)制,無建立、維持、釋放的管理機(jī)制等.
從開放式系統(tǒng)互聯(lián)(open system interconnect,OSI)七層模型的角度而言,SPI通信本身僅僅規(guī)定了通信的物理層協(xié)議,而缺少數(shù)據(jù)鏈路層的協(xié)議.
就目前的研究和應(yīng)用現(xiàn)狀而言,SPI通信作為一種物理層通信協(xié)議,對(duì)于其作為雙向通信時(shí)的通信方式,已有了很多應(yīng)用.Gao[2]采用兩組SPI總線為雙DSP提供雙向通信;Akos等[3]使用多從機(jī)選通信號(hào)(slave select,SS),將SPI總線作為多處理器通信的基礎(chǔ);桑偉等[4]描述了一種基于SPI的雙向通信方式,主設(shè)備和任一從設(shè)備之間至少包括了4條握手信號(hào)線;夏冰等[5]描述了一種基于SPI總線的多核通信的方式,使用了一根帶有下拉電阻R1的公共握手信號(hào)線.
本研究在上述應(yīng)用的基礎(chǔ)上,完成了一種用于雙向通信的SPI的物理層修改和數(shù)據(jù)鏈路層設(shè)計(jì),設(shè)計(jì)中主要包括如下處理與改進(jìn):①針對(duì)缺少組幀機(jī)制,建立一組有效的幀結(jié)構(gòu),適應(yīng)雙處理器通信的環(huán)境;②針對(duì)缺少應(yīng)答機(jī)制等,基于SPI主從通信方式,采用基于單線握手信號(hào)的方式使其支持雙向通信;③針對(duì)無校驗(yàn)的情況,建立基于循環(huán)冗余校驗(yàn)(cyclic redundancy check,CRC)方式的可靠通信;④針對(duì)缺少數(shù)據(jù)流控制的情況,采用緩沖區(qū)控制的方式,實(shí)現(xiàn)SPI流量控制;⑤ 針對(duì)缺少鏈路維護(hù)機(jī)制,建立基于握手信號(hào)和幀支持相結(jié)合的數(shù)據(jù)鏈路維護(hù)機(jī)制.總地來說,就是建立起一套完整的數(shù)據(jù)鏈路層,以適應(yīng)雙處理器通信的環(huán)境.本研究將帶有數(shù)據(jù)鏈路層的SPI協(xié)議稱為two-way SPI.
2.1 物理層設(shè)計(jì)
為了能夠?qū)崿F(xiàn)SPI的數(shù)據(jù)鏈路層機(jī)制,本研究在SPI的四線制基礎(chǔ)上增加一條接有上拉電阻的握手信號(hào)線——HandShaking(簡(jiǎn)稱“HS”),這是一條單向(從機(jī)到主機(jī))的信號(hào)線(見圖1).HS信號(hào)的作用主要是告知主機(jī):從機(jī)有數(shù)據(jù)需要發(fā)送.
圖1 Two-way SPI物理層Fig.1 Two-way SPI physical layer
2.2 信息傳輸格式
本研究采用了“0比特插入法”,并將“確認(rèn)字符”(0x7E)作為流量控制的一個(gè)標(biāo)志.作為主從通信方式,本研究設(shè)計(jì)的幀格式主要包括發(fā)送方幀格式和接收方幀格式兩種.2.2.1 發(fā)送方幀格式
發(fā)送方幀結(jié)構(gòu)如圖2所示.為了能夠滿足發(fā)送方的業(yè)務(wù)需求,增加了地址段、控制段和CRC段,其中控制段信息包括功能ID和長(zhǎng)度信息,在采用8位傳輸?shù)那闆r下,功能ID和長(zhǎng)度信息均為4 bit;在采用16位傳輸?shù)那闆r下,功能ID和長(zhǎng)度信息均為8 bit.這里的長(zhǎng)度信息主要是指信息段的長(zhǎng)度.
圖2 信息幀結(jié)構(gòu)Fig.2 Information frame
2.2.2 接收方幀格式
為了能夠有效控制數(shù)據(jù)流,考慮到SPI接收方的特點(diǎn),接收方的同步反饋信息為奇數(shù)字節(jié)時(shí),為接收端處理器的“接收緩沖區(qū)剩余容量”;為偶數(shù)字節(jié)時(shí),為接收端處理器之前接收到的數(shù)據(jù)是否處理完的標(biāo)志,即“確認(rèn)字符”(0x7E).接收端處理器在接收到發(fā)送端處理器發(fā)送的第N字節(jié)時(shí),完整的反饋數(shù)據(jù)發(fā)送順序及內(nèi)容如圖3所示.
圖3 反饋?zhàn)止?jié)Fig.3 Feedback bytes
圖4 發(fā)送及確認(rèn)過程Fig.4 Sending and confirmation process
當(dāng)發(fā)送方發(fā)送奇數(shù)字節(jié)(第1,3,5,…字節(jié))時(shí),接收方反饋回發(fā)送方的信息為“接收緩沖區(qū)剩余容量”;當(dāng)發(fā)送方發(fā)送偶數(shù)字節(jié)(第2,4,6,…字節(jié))時(shí),接收方反饋回發(fā)送方的信息為“確認(rèn)字符”(0x7E).當(dāng)發(fā)送方連續(xù)發(fā)送多個(gè)字節(jié)時(shí),接受方反饋過程如圖4所示.
這種接收方式能夠有效地控制每一個(gè)字的傳輸速度,避免前一字節(jié)尚未傳輸完成,就已經(jīng)開始傳輸下一個(gè)字節(jié)的情況出現(xiàn).同時(shí),發(fā)送方對(duì)接收方的接收緩沖區(qū)大小也是能預(yù)測(cè)的,當(dāng)接收緩沖區(qū)將要溢出時(shí),發(fā)送方可以進(jìn)行處理,減少接收方的負(fù)擔(dān).
2.3 同步機(jī)制
基于SPI總線已經(jīng)規(guī)定的片選(chip select,CS)信號(hào)線和新建立的HS握手信號(hào)線,整個(gè)同步過程按照主機(jī)發(fā)起和從機(jī)發(fā)起,結(jié)果有所差異.
2.3.1 主機(jī)起始發(fā)送方式
由主機(jī)發(fā)起的數(shù)據(jù)傳送與普通的SPI傳送并沒有區(qū)別,也就是說,這種方式完全兼容傳統(tǒng)的SPI通信,其時(shí)序圖可參考文獻(xiàn)[2].
2.3.2 從機(jī)起始發(fā)送方式
從機(jī)發(fā)起的通信由HS信號(hào)向主機(jī)申請(qǐng)開始發(fā)送,主機(jī)在接收到HS信號(hào)后,開始SPI發(fā)送(見圖5).由于絕大多數(shù)微控制器(micro control unit,MCU)的中斷處理以下降沿處理為主,因此,采用了外部上拉,由從機(jī)MCU置0的方式.在主機(jī)響應(yīng)中斷后,HS信號(hào)在從機(jī)發(fā)送結(jié)束后被取消.
2.4 流量控制
本研究采用如下方式進(jìn)行流量控制.在發(fā)送方發(fā)送過程中,每?jī)蓚€(gè)Bytes就有一個(gè)接收緩沖區(qū)剩余容量(Cb)單元(見圖4).當(dāng)接收方回應(yīng)的接收緩沖區(qū)容量小于2(Cb<2)時(shí),則發(fā)送方應(yīng)停止發(fā)送;若當(dāng)前正在發(fā)送過程中,則中斷當(dāng)前幀.對(duì)于主機(jī)起始發(fā)送來說,即將CS信號(hào)拉高;對(duì)于從機(jī)起始發(fā)送來說,即將HS信號(hào)拉高.發(fā)送方等待隨機(jī)時(shí)間間隔后,重新嘗試發(fā)起發(fā)送.
圖5 從機(jī)發(fā)起的SPI通信流程Fig.5 SPI communication processes launched by slave
2.5 錯(cuò)誤處理
在這種鏈路層協(xié)議中,主要有以下兩種錯(cuò)誤:一是接收方CRC錯(cuò)誤;二是確認(rèn)字符錯(cuò)誤.
本研究中的CRC采用16 bit CRC碼,其生成多項(xiàng)式為X16+X12+X5+1.當(dāng)出現(xiàn)CRC錯(cuò)誤時(shí),接收方將接收緩沖區(qū)剩余容量(Cb)置為0,即中止原發(fā)送方的繼續(xù)發(fā)送;然后接收方發(fā)起發(fā)送,將控制段中的控制ID置為錯(cuò)誤標(biāo)識(shí)符0xf,即控制段為0xf0.發(fā)送的數(shù)據(jù)幀如圖6所示.
圖6 接收方發(fā)送的錯(cuò)誤幀標(biāo)識(shí)Fig.6 Error frame mark sent by receiver
第二種錯(cuò)誤是確認(rèn)字符錯(cuò)誤,即發(fā)送方?jīng)]有在偶字節(jié)接收到“確認(rèn)字符”(0x7E),則發(fā)送方中斷本次發(fā)送,即將CS信號(hào)(主機(jī)端)或者HS信號(hào)(從機(jī)端)拉高;然后,在隨機(jī)時(shí)間間隔后重新發(fā)起發(fā)送.
以上介紹了一套完整的基于SPI進(jìn)行雙處理器通信的數(shù)據(jù)鏈路層協(xié)議.本研究將協(xié)議two-way SPI應(yīng)用于一種新型的帶有顯示功能的車身總線網(wǎng)絡(luò)控制器中,并取得了良好的效果.
3.1 系統(tǒng)硬件架構(gòu)
在本研究提出的設(shè)計(jì)方案中,系統(tǒng)主要以高級(jí)精簡(jiǎn)指令集處理器9(advanced RISC machines 9,ARM9)系列模塊和Freescale生產(chǎn)的S12處理器模塊為核心.系統(tǒng)的架構(gòu)如圖7所示.
圖7 系統(tǒng)架構(gòu)圖Fig.7 System architecture
圖7 中的ARM9模塊和S12處理器之間采用two-way SPI總線作為通信接口.由S12處理器負(fù)責(zé)KWP2000總線、CAN總線和 LIN總線的通信,由ARM9模塊負(fù)責(zé)觸摸屏的顯示和觸摸操作,其中ARM9的地址段為0x00,S12處理器的地址段為0x01,即ARM9為主處理器,S12為從處理器.
系統(tǒng)中ARM9運(yùn)行的是Linux操作系統(tǒng),S12運(yùn)行在uC/OS-Ⅱ操作系統(tǒng)上.對(duì)于Linux操作系統(tǒng)而言,其中斷處理模式與簡(jiǎn)單的裸機(jī)程序有所不同,需要進(jìn)行相應(yīng)的硬件驅(qū)動(dòng)的設(shè)計(jì).在本研究中,主要是SPI總線硬件驅(qū)動(dòng)的設(shè)計(jì)[6-9].
3.2 系統(tǒng)軟件的實(shí)現(xiàn)
3.2.1 系統(tǒng)中的two-way SPI通信
ARM9和S12的通信模塊都通過two-way SPI總線協(xié)議進(jìn)行通信,這一協(xié)議的具體實(shí)現(xiàn)過程如下.
主機(jī)發(fā)起通信的流程圖包括圖8所示的主機(jī)處理流程圖和圖9所示的從機(jī)接收處理流程圖.
圖8 ARM9發(fā)起的two-way SPI通信過程中的主機(jī)處理流程Fig.8 Host processor sending flow chart in two-way SPI communication process launched by host processor(ARM9)
圖9 ARM9發(fā)起的two-way SPI通信過程中的從機(jī)處理流程Fig.9 Slave processor receive flow in two-way SPI communication process launched by host processor(ARM9)
圖10為ARM9作為通信發(fā)起方的實(shí)驗(yàn)情況,發(fā)送的ID為0x00,發(fā)送的數(shù)據(jù)段為0xFC,0x7C.經(jīng)過0 bit插入后,變成0xFa,0x3E 和0x00.為了保證反饋?zhàn)止?jié)能夠滿足偶數(shù),又加入了一個(gè)0x00;然后是CRC段(0x51,0xb8).經(jīng)過組幀后,主機(jī)開始按照two-way SPI總線協(xié)議發(fā)送,并在發(fā)送過程中不斷接收S12反饋回的接收狀態(tài)信息,包括“接收緩沖區(qū)剩余容量”和“確認(rèn)字符”(0x7E).
圖10 主機(jī)發(fā)起two-way SPI通信的測(cè)試情況Fig.10 Test case for two-way SPI communication launched by host
當(dāng)從機(jī)發(fā)起通信時(shí),其主從機(jī)處理流程和圖8、圖9的通信處理流程正好互換,即主機(jī)使用圖9的處理流程,而從機(jī)使用圖8的通信流程.
圖11為S12作為通信發(fā)起方的實(shí)驗(yàn)情況.從圖10和圖11中可以看出,雙方通過two-way SPI都可以很好地完成雙向通信,步驟清楚,數(shù)據(jù)傳輸正常.3.2.2 系統(tǒng)功能的實(shí)現(xiàn)
經(jīng)過實(shí)際測(cè)試,two-way SPI作為底層雙處理器通信協(xié)議,在實(shí)際系統(tǒng)中運(yùn)行穩(wěn)定,并且能夠滿足CAN總線、LIN總線和KWP2000總線在1 MHz通訊速率時(shí)的數(shù)據(jù)處理和網(wǎng)絡(luò)分析等功能[10].可見,本研究中的two-way SPI總線通信具有較高的實(shí)際工程應(yīng)用價(jià)值.
3.2.3 Two-way SPI總線穩(wěn)定性分析
影響本研究中two-way SPI總線穩(wěn)定性的因素主要包括:①當(dāng)主、從機(jī)同時(shí)需要進(jìn)行數(shù)據(jù)發(fā)送時(shí);②從機(jī)在HS信號(hào)使用后,出現(xiàn)處理異常的情況,而沒有將HS信號(hào)復(fù)位為高電平.
針對(duì)情況①,當(dāng)主、從機(jī)同時(shí)需要進(jìn)行數(shù)據(jù)發(fā)送時(shí),從物理層上表述,即HS信號(hào)和CS信號(hào)同時(shí)被置為低電平.從主機(jī)角度而言,其會(huì)開始傳遞數(shù)據(jù),但是在two-way SPI數(shù)據(jù)鏈路層上,由于主機(jī)不能接收到從機(jī)反饋的“確認(rèn)字符”,所以其會(huì)停止發(fā)送,開始等待隨機(jī)時(shí)間間隔.就從機(jī)角度而言,也會(huì)出現(xiàn)相同情況.由于主、從機(jī)的隨機(jī)時(shí)間間隔并不同,所以下一次出現(xiàn)沖突的概率就更低.
針對(duì)情況②,如果從機(jī)的HS信號(hào)始終沒有置為高電平,主機(jī)在多次嘗試標(biāo)準(zhǔn)SPI傳輸,并且從機(jī)發(fā)出的數(shù)據(jù)始終不符合規(guī)定的CRC后,主機(jī)應(yīng)該提示從機(jī)端工作不正常.這種狀態(tài)實(shí)質(zhì)上是從機(jī)系統(tǒng)崩潰的一種狀態(tài),該狀態(tài)應(yīng)該是單處理器系統(tǒng)設(shè)計(jì)的合理性考量,而非本研究通信過程穩(wěn)定性的問題.
綜上,本研究中的two-way SPI通信方式的穩(wěn)定性還是較好的.
圖11 從機(jī)發(fā)起two-way SPI通信的測(cè)試情況Fig.11 Test case for two-way SPI communication launched by slave
本研究提出了一種基于SPI總線的雙處理器間通信的數(shù)據(jù)鏈路層設(shè)計(jì),并將該設(shè)計(jì)應(yīng)用到實(shí)際的工程實(shí)踐中.該two-way SPI總線具有占用很少引腳(僅比SPI總線多一根線)、有完善的數(shù)據(jù)鏈路層協(xié)議控制的優(yōu)點(diǎn),能夠保證數(shù)據(jù)透明地在雙處理器之間進(jìn)行傳輸.在實(shí)際工程應(yīng)用中,本研究采用了ARM9和S12通信的方式,并對(duì)這一通信的過程和實(shí)際應(yīng)用情況作了描述.通過實(shí)驗(yàn)可以證明,該協(xié)議設(shè)計(jì)比較完善,能夠滿足實(shí)際工程中的需求,對(duì)于其他SPI的應(yīng)用,也有很好的借鑒價(jià)值.
[1] SUN B, HU Y L. Automatic body control model experimental platform design based on CAN-bus[J].Advanced Materials Research,2012,383:4269-4273.
[2] GAO Z.Implementation of SPI and CRC algorithm in data communication between two DSPs[J].Electronic Engineering& Product World,2011,18(1):46-48.
[3] AKOS S,TIBOR S,ZOLTAN H.Realising the SPI communication in a multiprocessor system[C]∥ 5th International Symposium on Intelligent Systems and Informations.2007:213-216.
[4] 桑偉,潘時(shí)林.一種基于SPI實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)姆椒ê拖到y(tǒng):中國(guó),200910141461[P].2009-05-15.
[5] 夏冰,曾敬,李榮正.基于SPI結(jié)構(gòu)模型雙向式身份識(shí)別及信息交互平臺(tái)及方法:中國(guó),200810039686[P].2008-06-26.
[6] SANGTAE H,INJONG R.Taming the elephants:New TCP slow start[J].Computer Network,2011,55(9):2092-2110.
[7] WANG T K,CHANG F R,LIN S Y.Multidevice time measurement system via a PTPD network[J].IEEE Transactions on Instrumentation and Measurement,2011,60(7):2304-2307.
[8] BAHLMANN C,BURKHARDT H.The writer independent online handwriting recognition system frog on hand and cluster generative statistical dynamic time warping [J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2004,26(3):299-310.
[9] SALAH K,QAHTAN A.Implementation and experimental performance evaluation of a hybrid interrupt-handling scheme[J].Computer Communications,2009,32(1):179-188.
[10] SUN B,HU Y L,WANG K.Diagnosis design based on KWP2000 in body control module[C]∥ ICMTMA 2011.2011:1071-1074.
Data Link Layer Design and Implementation Based on SPI Bus for Dual-Processor Communication
SUN Bin, HU Yue-li, WANG Kun
(School of Mechatronics Engineering and Automation,Shanghai University,Shanghai 200072,China)
TP 29
A
1007-2861(2012)05-0513-06
10.3969/j.issn.1007-2861.2012.05.014
2011-09-21
上海市科委集成電路專項(xiàng)資金資助項(xiàng)目(09706201300);上海市經(jīng)濟(jì)與信息化委員會(huì)資助項(xiàng)目(090344);上海市高新技術(shù)產(chǎn)業(yè)化新能源汽車資助項(xiàng)目(09625029);上海大學(xué)研究生創(chuàng)新基金資助項(xiàng)目
胡越黎(1959~),男,教授,博士生導(dǎo)師,博士,研究方向?yàn)槲㈦娮优c集成電路設(shè)計(jì)、汽車電子與系統(tǒng)集成、機(jī)器視覺與片上多處理系統(tǒng)架構(gòu).E-mail:huyueli@shu.edu.cn