■李宏偉
(太原城市職業技術學院,山西 太原 030027)
在時代的推動下,各類飛行設備承擔的任務更加紛繁復雜。為能夠提高數據可靠性,系統內部往往需要針對不同的工作設備選擇合適的總線通訊方式。在發揮各類總線通信的最大優勢的同時,總線之間的轉換傳輸也受到越來越多的關注。CAN總線與1553B總線均以數據傳輸可靠性高、傳輸速度快等優點,廣泛應用于飛行設備中[1]。對于兩總線之間的數據交互,傳統的解決辦法一般是采用FPGA+ARM雙處理器實現,但國產ARM芯片價格高,制板時周期相對較長[2]。系統采用單芯片FPGA實現CAN總線與1553B總線之間的通信,利用FPGA能夠并行處理數據的架構以及具有編程靈活的優勢,編寫總線底層傳輸協議,用軟件的方式實現數據的快速轉換與傳輸[3]。
CAN總線與1553B總線之間通訊的系統總體設計框圖如圖1所示。系統數據流由FPGA控制,參與實現CAN總線與1553B總線之間通信的模塊主要包括CAN控制器模塊、數據轉換模塊、1553B協議模塊和RS422發送模塊。

圖1 系統總體設計框圖
CAN總線與1553B總線之間的通信是雙向的,以從1553B總線發送數據至CAN總線為例,該數據流的工作流程為:上電初始化所有模塊,FPGA通過編寫1553B底層協議模塊實現與1553B總線的數據交互,1553B底層協議模塊作為終端,接收總線發送來的數據并根據1553B協議對數據進行解析及格式轉換,然后通過CAN總線控制器模塊將轉換后的數據發送至CAN控制器SJA1000,最后驅動收發器完成數據的上傳,完成單向數據流的傳輸。為驗證總線間的傳輸無誤,采用RS422發送模塊將CAN控制器模塊接收到的數據發送至上位機進行顯示,對比1553B總線上發送的數據與上位機接收到的數據,判斷數據傳輸的可靠與否。從CAN總線發送數據至1553B總線的數據傳輸流程與上述類似。
系統CAN模塊主要由CAN控制器及CAN收發器組成[4],其中CAN控制器通過SPI接口與FPGA進行信息交互,然后控制器與收發器串行相連,CAN收發器將控制器中的數據按照物理層的數據協議進行轉換并實現與CAN總線的通信,CAN收發器與CAN總線通信即實現單端信號與差分信號的相互轉換[5]。系統選用NXP公司生產的CAN控制器SJA1000,符合CAN2.0協議規范,支持高速數據傳輸,速率高達1Mbps[6]。CAN收發器選用PCA82C250,它實現的是數據協議層的轉換傳輸,其傳輸速率與CAN控制器一致,最高為1Mbps[7]。系統主頻為80 Mbps,通過分頻模塊后提供給CAN控制器芯片的時鐘頻率為16 MHz。由于FPGA的I/O口電平為3.3 V,而CAN控制器芯片的工作電壓為5 V[8],因此為實現兩芯片間的正常通訊,在數據進行傳輸時,需對其進行電平轉換。該模塊的工作原理圖如圖2所示,終端管腳INTE需上拉至3.3 V[9]。

圖2 CAN模塊工作原理
數據轉換模塊主要實現的是兩種總線協議下的數據位寬的轉變。由于1553B總線與CAN總線的數據傳輸速率不一致,為避免數據在總線交互過程中出現幀丟失或幀錯誤的現象,需對兩總線間的速率進行平衡。設計采用雙口RAM來解決速率匹配的問題[10],根據協議要求,CAN模塊的數據輸入輸出寬度均為1 Byte,而1553B協議模塊的數據輸入輸出寬度均為2 Byte。因此,針對兩個方向的數據流采用2個RAM來對數據分別進行緩存。數據由CAN總線傳輸到1553B總線上的雙口RAM緩存設計如圖3所示。

圖3 雙口RAM緩存設計
1.CAN控制器模塊初始化
系統加電后,CAN控制器默認為復位狀態。FPGA需要對該控制器中的相關寄存器進行初始化配置,實現對其內部寄存器的配置,為其進入正常工作模式做準備[11]。初始化完成后,配置CAN控制器進入工作模式。CAN控制器模塊初始化過程如圖4所示。

圖4 CAN控制器模塊初始化過程
2.CAN控制器模塊接收設計
CAN控制器模塊中的接收模塊主要實現了CAN總線報文的接收。CAN控制器SJA1000接收CAN總線報文后產生中斷信號并使能接收模塊,通過該模塊調用SPI接口進行CAN報文接收,一幀報文接收完成后,將接收到的報文傳遞到接收報文分類模塊中,傳遞完成后通過處理器清除CAN控制器SJA1000芯片中斷使能信號[12],為下次中斷做準備。接收報文分類模塊實現了對接收到CAN報文進一步判斷與緩存功能。若接收到的報文ID符合判斷條件時即與CAN控制器在初始化配置時所要求的一致,則對報文進行緩存并傳輸至數據格式轉換模塊。CAN控制器接收報文的過程如圖5所示。

圖5 CAN模塊接收報文時的流程圖
1.1553B協議模塊設計
系統中1553B協議模塊作為終端(RT),主要實現對1553B總線(BC)上數據的收發與解析。RT端向BC端數據傳輸時,1553B協議模塊首先需要檢測同步字,同步字中包含的信息用于區分字的類型[13]。RT端發送的數據信息經過了曼徹斯特編碼,因此在對接收數據進行解析前需要對其進行譯碼。譯碼后通過數據信息中的同步字判斷該條信息的字類型,若字類型為命令字,需對同步字之后的相關數據進行解析,BC端依照該條命令字執行相應的操作;若字類型為接收數據字命令字,BC端需對后續RT端發送的數據字進行緩存,并發送狀態字至RT端;若字類型為發送數據字命令字,BC端需讀取緩存的數據至RT端。1553B協議模塊設計框圖如圖6所示。

圖6 CAN1553B協議模塊設計框圖
2.1553B協議字格式
依照1553B傳輸協議,數據在總線上傳輸時其允許最大長度為32個字,每個字包含20 bit[14]。數據幀按照不同的類型劃分可以分為命令、狀態、數據。不同類型的字格式見圖7所示。

圖7 不同類型的字格式
3.1553B協議數據字收發
1553B總線控制器(BC端)與1553B協議模塊(RT端)通訊時,BC端占有絕對控制權。因此,不論RT端接收還是發送數據,均由BC端控制。當RT端收到接收數據的命令字時,根據該命令字中的信息獲取數據字的個數情況,判斷RAM接收到的經過譯碼后的數據字的個數是否正確,發送相應的狀態字給BC端。接收數據字流程如圖8所示。

圖8 1553B協議模塊接收數據字流程
當RT端收到發送數據的命令字時,根據該命令字中的信息讀取RAM中的指定字節個數的數據字,并對其進行曼徹斯特編碼后發送至BC端。
為驗證CAN模塊收發數據的正確性,對收發模塊均進行仿真測試。當CAN總線收發器檢測到CAN總線上有數據時,產生中斷信號給CAN控制器,然后將數據寫入CAN控制器的接收緩存區中。接收完數據之后,清除中斷標志。CAN口接收數據仿真圖如圖9所示。

圖9 CAN口接收數據仿真圖
向CAN總線上傳輸數據時,按照CAN協議幀格式,將數據首先發送至CAN總線控制器的發送緩存區中,然后驅動通過SPI接口發送數據至CAN總線上。CAN口發送報文仿真圖如圖10所示。

圖10 CAN口發送數據仿真圖
為驗證1553B協議模塊數據收發的正確性,編寫測試文件,模擬BC端發送數據給RT端,其中RT端的地址為5'b00111。首先RT端發送命令字16'h3943,然后發送3個數據字16'hCA1C,16'hED9B,16'h8C93。BC端通過對接收到的命令字進行解析可知,BC端需要執行的操作是接收3個數據字。BC端將接收到的數據進行緩存之后發送狀態字給RT端。RT端通過解析接收到的狀態字可判斷出數據是否被接收。1553B協議模塊接收數據時的仿真圖如圖11所示。

圖11 1553B協議模塊接收數據仿真圖
為驗證系統中兩總線之間的通信正確,分兩部分進行測試。
1.由1553B總線發送數據字,經過1553B協議模塊、數據格式轉換模塊,最后通過CAN模塊將數據發送至CAN總線上。1553B總線上發送命令字16'h3D43,然后發送 3個數據字16'hC1C3,16'hE1CB,16'hE9D3。采用在線邏輯分析儀SignalTap對數據格式轉換模塊的輸入信號進行抓取,如圖12所示。

圖12 數據格式轉換模塊的輸入信號波形
為可以直觀地觀察到數據傳輸的正確與否,將CAN控制器中緩存的數據經由RS422發送模塊發送至上位機進行顯示,如圖13所示。對比圖12中的數據與串口助手收到的數據,驗證了該數據流向的正確性。

圖13 RS422發送的CAN總線數據
2.從CAN總線至1553B總線的傳輸驗證與(1)相反。采用串口助手發送數據至CAN控制器接收緩存器中,然后通過數據格式轉換模塊,最后通過1553B協議模塊將數據上發至1553B總線上。串口助手發送的數據為8'hCA,8'h9A,8'h8A,8'hC1,8'hC2,8'hE 2,8'hF1,8'h22。同樣地,采用 SignalTap對輸入到1553B協議模塊的信號進行采集,如圖14所示。對比串口發送的數據與圖14中的波形,可知該數據流向正確。

圖14 輸入到1553B協議模塊的信號采集
系統采用FPGA實現CAN總線與1553B總線之間的通信,充分發揮FPGA并行處理的優勢,代替了ARM處理器實現1553B的通信,一方面縮減了產品的制造費用,另一方面使得產品的研發時間變短。經系統驗證,該設計能夠實現CAN總線與1553B總線之間的正確通信,滿足了設計需求,對其他總線間的通訊提供了可靠的參考價值。