■李宏偉
(太原城市職業(yè)技術(shù)學(xué)院,山西 太原 030027)
在時(shí)代的推動(dòng)下,各類飛行設(shè)備承擔(dān)的任務(wù)更加紛繁復(fù)雜。為能夠提高數(shù)據(jù)可靠性,系統(tǒng)內(nèi)部往往需要針對不同的工作設(shè)備選擇合適的總線通訊方式。在發(fā)揮各類總線通信的最大優(yōu)勢的同時(shí),總線之間的轉(zhuǎn)換傳輸也受到越來越多的關(guān)注。CAN總線與1553B總線均以數(shù)據(jù)傳輸可靠性高、傳輸速度快等優(yōu)點(diǎn),廣泛應(yīng)用于飛行設(shè)備中[1]。對于兩總線之間的數(shù)據(jù)交互,傳統(tǒng)的解決辦法一般是采用FPGA+ARM雙處理器實(shí)現(xiàn),但國產(chǎn)ARM芯片價(jià)格高,制板時(shí)周期相對較長[2]。系統(tǒng)采用單芯片F(xiàn)PGA實(shí)現(xiàn)CAN總線與1553B總線之間的通信,利用FPGA能夠并行處理數(shù)據(jù)的架構(gòu)以及具有編程靈活的優(yōu)勢,編寫總線底層傳輸協(xié)議,用軟件的方式實(shí)現(xiàn)數(shù)據(jù)的快速轉(zhuǎn)換與傳輸[3]。
CAN總線與1553B總線之間通訊的系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。系統(tǒng)數(shù)據(jù)流由FPGA控制,參與實(shí)現(xiàn)CAN總線與1553B總線之間通信的模塊主要包括CAN控制器模塊、數(shù)據(jù)轉(zhuǎn)換模塊、1553B協(xié)議模塊和RS422發(fā)送模塊。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
CAN總線與1553B總線之間的通信是雙向的,以從1553B總線發(fā)送數(shù)據(jù)至CAN總線為例,該數(shù)據(jù)流的工作流程為:上電初始化所有模塊,F(xiàn)PGA通過編寫1553B底層協(xié)議模塊實(shí)現(xiàn)與1553B總線的數(shù)據(jù)交互,1553B底層協(xié)議模塊作為終端,接收總線發(fā)送來的數(shù)據(jù)并根據(jù)1553B協(xié)議對數(shù)據(jù)進(jìn)行解析及格式轉(zhuǎn)換,然后通過CAN總線控制器模塊將轉(zhuǎn)換后的數(shù)據(jù)發(fā)送至CAN控制器SJA1000,最后驅(qū)動(dòng)收發(fā)器完成數(shù)據(jù)的上傳,完成單向數(shù)據(jù)流的傳輸。為驗(yàn)證總線間的傳輸無誤,采用RS422發(fā)送模塊將CAN控制器模塊接收到的數(shù)據(jù)發(fā)送至上位機(jī)進(jìn)行顯示,對比1553B總線上發(fā)送的數(shù)據(jù)與上位機(jī)接收到的數(shù)據(jù),判斷數(shù)據(jù)傳輸?shù)目煽颗c否。從CAN總線發(fā)送數(shù)據(jù)至1553B總線的數(shù)據(jù)傳輸流程與上述類似。
系統(tǒng)CAN模塊主要由CAN控制器及CAN收發(fā)器組成[4],其中CAN控制器通過SPI接口與FPGA進(jìn)行信息交互,然后控制器與收發(fā)器串行相連,CAN收發(fā)器將控制器中的數(shù)據(jù)按照物理層的數(shù)據(jù)協(xié)議進(jìn)行轉(zhuǎn)換并實(shí)現(xiàn)與CAN總線的通信,CAN收發(fā)器與CAN總線通信即實(shí)現(xiàn)單端信號與差分信號的相互轉(zhuǎn)換[5]。系統(tǒng)選用NXP公司生產(chǎn)的CAN控制器SJA1000,符合CAN2.0協(xié)議規(guī)范,支持高速數(shù)據(jù)傳輸,速率高達(dá)1Mbps[6]。CAN收發(fā)器選用PCA82C250,它實(shí)現(xiàn)的是數(shù)據(jù)協(xié)議層的轉(zhuǎn)換傳輸,其傳輸速率與CAN控制器一致,最高為1Mbps[7]。系統(tǒng)主頻為80 Mbps,通過分頻模塊后提供給CAN控制器芯片的時(shí)鐘頻率為16 MHz。由于FPGA的I/O口電平為3.3 V,而CAN控制器芯片的工作電壓為5 V[8],因此為實(shí)現(xiàn)兩芯片間的正常通訊,在數(shù)據(jù)進(jìn)行傳輸時(shí),需對其進(jìn)行電平轉(zhuǎn)換。該模塊的工作原理圖如圖2所示,終端管腳INTE需上拉至3.3 V[9]。
圖2 CAN模塊工作原理
數(shù)據(jù)轉(zhuǎn)換模塊主要實(shí)現(xiàn)的是兩種總線協(xié)議下的數(shù)據(jù)位寬的轉(zhuǎn)變。由于1553B總線與CAN總線的數(shù)據(jù)傳輸速率不一致,為避免數(shù)據(jù)在總線交互過程中出現(xiàn)幀丟失或幀錯(cuò)誤的現(xiàn)象,需對兩總線間的速率進(jìn)行平衡。設(shè)計(jì)采用雙口RAM來解決速率匹配的問題[10],根據(jù)協(xié)議要求,CAN模塊的數(shù)據(jù)輸入輸出寬度均為1 Byte,而1553B協(xié)議模塊的數(shù)據(jù)輸入輸出寬度均為2 Byte。因此,針對兩個(gè)方向的數(shù)據(jù)流采用2個(gè)RAM來對數(shù)據(jù)分別進(jìn)行緩存。數(shù)據(jù)由CAN總線傳輸?shù)?553B總線上的雙口RAM緩存設(shè)計(jì)如圖3所示。
圖3 雙口RAM緩存設(shè)計(jì)
1.CAN控制器模塊初始化
系統(tǒng)加電后,CAN控制器默認(rèn)為復(fù)位狀態(tài)。FPGA需要對該控制器中的相關(guān)寄存器進(jìn)行初始化配置,實(shí)現(xiàn)對其內(nèi)部寄存器的配置,為其進(jìn)入正常工作模式做準(zhǔn)備[11]。初始化完成后,配置CAN控制器進(jìn)入工作模式。CAN控制器模塊初始化過程如圖4所示。
圖4 CAN控制器模塊初始化過程
2.CAN控制器模塊接收設(shè)計(jì)
CAN控制器模塊中的接收模塊主要實(shí)現(xiàn)了CAN總線報(bào)文的接收。CAN控制器SJA1000接收CAN總線報(bào)文后產(chǎn)生中斷信號并使能接收模塊,通過該模塊調(diào)用SPI接口進(jìn)行CAN報(bào)文接收,一幀報(bào)文接收完成后,將接收到的報(bào)文傳遞到接收報(bào)文分類模塊中,傳遞完成后通過處理器清除CAN控制器SJA1000芯片中斷使能信號[12],為下次中斷做準(zhǔn)備。接收報(bào)文分類模塊實(shí)現(xiàn)了對接收到CAN報(bào)文進(jìn)一步判斷與緩存功能。若接收到的報(bào)文ID符合判斷條件時(shí)即與CAN控制器在初始化配置時(shí)所要求的一致,則對報(bào)文進(jìn)行緩存并傳輸至數(shù)據(jù)格式轉(zhuǎn)換模塊。CAN控制器接收報(bào)文的過程如圖5所示。
圖5 CAN模塊接收報(bào)文時(shí)的流程圖
1.1553B協(xié)議模塊設(shè)計(jì)
系統(tǒng)中1553B協(xié)議模塊作為終端(RT),主要實(shí)現(xiàn)對1553B總線(BC)上數(shù)據(jù)的收發(fā)與解析。RT端向BC端數(shù)據(jù)傳輸時(shí),1553B協(xié)議模塊首先需要檢測同步字,同步字中包含的信息用于區(qū)分字的類型[13]。RT端發(fā)送的數(shù)據(jù)信息經(jīng)過了曼徹斯特編碼,因此在對接收數(shù)據(jù)進(jìn)行解析前需要對其進(jìn)行譯碼。譯碼后通過數(shù)據(jù)信息中的同步字判斷該條信息的字類型,若字類型為命令字,需對同步字之后的相關(guān)數(shù)據(jù)進(jìn)行解析,BC端依照該條命令字執(zhí)行相應(yīng)的操作;若字類型為接收數(shù)據(jù)字命令字,BC端需對后續(xù)RT端發(fā)送的數(shù)據(jù)字進(jìn)行緩存,并發(fā)送狀態(tài)字至RT端;若字類型為發(fā)送數(shù)據(jù)字命令字,BC端需讀取緩存的數(shù)據(jù)至RT端。1553B協(xié)議模塊設(shè)計(jì)框圖如圖6所示。
圖6 CAN1553B協(xié)議模塊設(shè)計(jì)框圖
2.1553B協(xié)議字格式
依照1553B傳輸協(xié)議,數(shù)據(jù)在總線上傳輸時(shí)其允許最大長度為32個(gè)字,每個(gè)字包含20 bit[14]。數(shù)據(jù)幀按照不同的類型劃分可以分為命令、狀態(tài)、數(shù)據(jù)。不同類型的字格式見圖7所示。
圖7 不同類型的字格式
3.1553B協(xié)議數(shù)據(jù)字收發(fā)
1553B總線控制器(BC端)與1553B協(xié)議模塊(RT端)通訊時(shí),BC端占有絕對控制權(quán)。因此,不論RT端接收還是發(fā)送數(shù)據(jù),均由BC端控制。當(dāng)RT端收到接收數(shù)據(jù)的命令字時(shí),根據(jù)該命令字中的信息獲取數(shù)據(jù)字的個(gè)數(shù)情況,判斷RAM接收到的經(jīng)過譯碼后的數(shù)據(jù)字的個(gè)數(shù)是否正確,發(fā)送相應(yīng)的狀態(tài)字給BC端。接收數(shù)據(jù)字流程如圖8所示。
圖8 1553B協(xié)議模塊接收數(shù)據(jù)字流程
當(dāng)RT端收到發(fā)送數(shù)據(jù)的命令字時(shí),根據(jù)該命令字中的信息讀取RAM中的指定字節(jié)個(gè)數(shù)的數(shù)據(jù)字,并對其進(jìn)行曼徹斯特編碼后發(fā)送至BC端。
為驗(yàn)證CAN模塊收發(fā)數(shù)據(jù)的正確性,對收發(fā)模塊均進(jìn)行仿真測試。當(dāng)CAN總線收發(fā)器檢測到CAN總線上有數(shù)據(jù)時(shí),產(chǎn)生中斷信號給CAN控制器,然后將數(shù)據(jù)寫入CAN控制器的接收緩存區(qū)中。接收完數(shù)據(jù)之后,清除中斷標(biāo)志。CAN口接收數(shù)據(jù)仿真圖如圖9所示。
圖9 CAN口接收數(shù)據(jù)仿真圖
向CAN總線上傳輸數(shù)據(jù)時(shí),按照CAN協(xié)議幀格式,將數(shù)據(jù)首先發(fā)送至CAN總線控制器的發(fā)送緩存區(qū)中,然后驅(qū)動(dòng)通過SPI接口發(fā)送數(shù)據(jù)至CAN總線上。CAN口發(fā)送報(bào)文仿真圖如圖10所示。
圖10 CAN口發(fā)送數(shù)據(jù)仿真圖
為驗(yàn)證1553B協(xié)議模塊數(shù)據(jù)收發(fā)的正確性,編寫測試文件,模擬BC端發(fā)送數(shù)據(jù)給RT端,其中RT端的地址為5'b00111。首先RT端發(fā)送命令字16'h3943,然后發(fā)送3個(gè)數(shù)據(jù)字16'hCA1C,16'hED9B,16'h8C93。BC端通過對接收到的命令字進(jìn)行解析可知,BC端需要執(zhí)行的操作是接收3個(gè)數(shù)據(jù)字。BC端將接收到的數(shù)據(jù)進(jìn)行緩存之后發(fā)送狀態(tài)字給RT端。RT端通過解析接收到的狀態(tài)字可判斷出數(shù)據(jù)是否被接收。1553B協(xié)議模塊接收數(shù)據(jù)時(shí)的仿真圖如圖11所示。
圖11 1553B協(xié)議模塊接收數(shù)據(jù)仿真圖
為驗(yàn)證系統(tǒng)中兩總線之間的通信正確,分兩部分進(jìn)行測試。
1.由1553B總線發(fā)送數(shù)據(jù)字,經(jīng)過1553B協(xié)議模塊、數(shù)據(jù)格式轉(zhuǎn)換模塊,最后通過CAN模塊將數(shù)據(jù)發(fā)送至CAN總線上。1553B總線上發(fā)送命令字16'h3D43,然后發(fā)送 3個(gè)數(shù)據(jù)字16'hC1C3,16'hE1CB,16'hE9D3。采用在線邏輯分析儀SignalTap對數(shù)據(jù)格式轉(zhuǎn)換模塊的輸入信號進(jìn)行抓取,如圖12所示。
圖12 數(shù)據(jù)格式轉(zhuǎn)換模塊的輸入信號波形
為可以直觀地觀察到數(shù)據(jù)傳輸?shù)恼_與否,將CAN控制器中緩存的數(shù)據(jù)經(jīng)由RS422發(fā)送模塊發(fā)送至上位機(jī)進(jìn)行顯示,如圖13所示。對比圖12中的數(shù)據(jù)與串口助手收到的數(shù)據(jù),驗(yàn)證了該數(shù)據(jù)流向的正確性。
圖13 RS422發(fā)送的CAN總線數(shù)據(jù)
2.從CAN總線至1553B總線的傳輸驗(yàn)證與(1)相反。采用串口助手發(fā)送數(shù)據(jù)至CAN控制器接收緩存器中,然后通過數(shù)據(jù)格式轉(zhuǎn)換模塊,最后通過1553B協(xié)議模塊將數(shù)據(jù)上發(fā)至1553B總線上。串口助手發(fā)送的數(shù)據(jù)為8'hCA,8'h9A,8'h8A,8'hC1,8'hC2,8'hE 2,8'hF1,8'h22。同樣地,采用 SignalTap對輸入到1553B協(xié)議模塊的信號進(jìn)行采集,如圖14所示。對比串口發(fā)送的數(shù)據(jù)與圖14中的波形,可知該數(shù)據(jù)流向正確。
圖14 輸入到1553B協(xié)議模塊的信號采集
系統(tǒng)采用FPGA實(shí)現(xiàn)CAN總線與1553B總線之間的通信,充分發(fā)揮FPGA并行處理的優(yōu)勢,代替了ARM處理器實(shí)現(xiàn)1553B的通信,一方面縮減了產(chǎn)品的制造費(fèi)用,另一方面使得產(chǎn)品的研發(fā)時(shí)間變短。經(jīng)系統(tǒng)驗(yàn)證,該設(shè)計(jì)能夠?qū)崿F(xiàn)CAN總線與1553B總線之間的正確通信,滿足了設(shè)計(jì)需求,對其他總線間的通訊提供了可靠的參考價(jià)值。
太原城市職業(yè)技術(shù)學(xué)院學(xué)報(bào)2021年5期