武宏吉,陳凌珊
(201620 上海市 上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院)
隨著汽車無(wú)人駕駛技術(shù)的迅速發(fā)展,汽車數(shù)據(jù)傳輸量越來(lái)越大,對(duì)車載網(wǎng)絡(luò)的性能提出了更高的要求。當(dāng)前車載網(wǎng)絡(luò)使用的CAN 總線傳輸速率最高為1 Mb/s,無(wú)法滿足未來(lái)車載網(wǎng)絡(luò)的需求。同時(shí)CAN 總線使用的是電傳輸,容易被電磁干擾,不能滿足完全無(wú)人駕駛技術(shù)高可靠性的要求[1]。
FC-AE-1553(簡(jiǎn)稱1553)總線是在MILSTD-1553B 總線的基礎(chǔ)上誕生的,作為軍用總線標(biāo)準(zhǔn),具備極高的傳輸速率與傳輸帶寬,雙冗余的拓?fù)浣Y(jié)構(gòu)與光纖傳輸?shù)奈锢斫橘|(zhì)也使它擁有較高的傳輸穩(wěn)定性[2]。與CAN 總線相比,1553 總線的優(yōu)勢(shì)在于速率快、可靠性高,缺點(diǎn)是成本高,實(shí)時(shí)性差[3]。如果將1553 總線應(yīng)用到車載網(wǎng)絡(luò)中,在關(guān)鍵鏈路使用1553 通信,在非關(guān)鍵鏈路使用CAN 通信,可以顯著提高通信速度與可靠性,同時(shí)又不會(huì)大幅提高成本[4]。對(duì)于1553 總線和CAN 總線的轉(zhuǎn)換,商偉峰[5]提出了基于FPGA 芯片的實(shí)現(xiàn)方法,其優(yōu)點(diǎn)是具有高內(nèi)聚性,可以減少板卡面積,降低開(kāi)發(fā)成本;缺點(diǎn)是靈活性小,只能使用硬編碼實(shí)現(xiàn)。
基于目前的設(shè)計(jì)方法,本文提出使用APSoC芯片實(shí)現(xiàn)CAN 與1553 的轉(zhuǎn)換。相較于FPGA,APSoC 具有更高的靈活性,支持軟硬件結(jié)合開(kāi)發(fā),降低了研發(fā)難度,并可以運(yùn)行操作系統(tǒng)提高總線轉(zhuǎn)換性能。選用復(fù)旦微公司的FMQL45T900 APSoC芯片作為總線通信模塊的核心實(shí)現(xiàn)部分,該芯片分為PS 與PL 兩大部分,PS 部分包括ARM 核心與2個(gè)CAN 控制器,運(yùn)行銳華實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn)CAN通信以及內(nèi)存管理[6];PL 部分類似FPGA 芯片,用于實(shí)現(xiàn)1553 總線功能[7]。利用PS 與PL 之間的AXI 通道實(shí)現(xiàn)CAN 與1553 的轉(zhuǎn)換。
總線通信模塊系統(tǒng)框圖如圖1 所示,該模塊功能分為2 個(gè)方向,分別是CAN 轉(zhuǎn)1553 與1553轉(zhuǎn)CAN。CAN 轉(zhuǎn)1553 方向:CAN 收發(fā)芯片收到CAN 總線上的數(shù)據(jù),處理后發(fā)送到與其相連的CAN控制器。CAN 控制器收到數(shù)據(jù)后會(huì)發(fā)送中斷信號(hào)給ARM 處理器,ARM 處理器上運(yùn)行銳華系統(tǒng),系統(tǒng)收到中斷信號(hào)后會(huì)觸發(fā)中斷服務(wù)函數(shù),將CAN 控制器收到的數(shù)據(jù)放入提前規(guī)劃好的內(nèi)存空間中[8]。當(dāng)CAN 數(shù)據(jù)進(jìn)入內(nèi)存空間后,預(yù)先設(shè)計(jì)的系統(tǒng)線程會(huì)將CAN 數(shù)據(jù)從內(nèi)存通過(guò)AXI 通道轉(zhuǎn)移到PL 部分的BRAM 中,并配置相應(yīng)的寄存器告訴1553 模塊本次傳輸?shù)臄?shù)據(jù)大小與數(shù)據(jù)位置,最后1553 模塊會(huì)將BRAM 中的CAN 數(shù)據(jù)打包成1553 格式發(fā)送到光模塊中,光模塊完成光電轉(zhuǎn)換功能,將轉(zhuǎn)化完成的1553 數(shù)據(jù)發(fā)送出去。
圖1 總線通信模塊系統(tǒng)框圖Fig.1 Bus communication module system block diagram
1553 轉(zhuǎn)CAN 方向:1553 模塊首先收到光模塊傳送過(guò)來(lái)的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行處理,將1553 數(shù)據(jù)幀中包含的CAN 幀抽取出來(lái),保存到指定的BRAM 中,同時(shí)配置相應(yīng)的寄存器,發(fā)送中斷信號(hào)給ARM 處理器。ARM 處理器根據(jù)寄存器中的信息判斷CAN 數(shù)據(jù)存放的位置與大小,通過(guò)AXI 通道傳輸?shù)紻DR 當(dāng)中。之后系統(tǒng)線程會(huì)對(duì)CAN 數(shù)據(jù)進(jìn)行解析,并發(fā)送到指定的CAN 控制器中,完成1553 總線到CAN 總線的轉(zhuǎn)換過(guò)程。
CAN 功能基于FMQL45T900 的CAN 控制器與銳華實(shí)時(shí)操作系統(tǒng)開(kāi)發(fā),CAN 控制器的寄存器手冊(cè)如表1 所示。
表1 CAN 控制器寄存器手冊(cè)Tab.1 CAN controller register manual
通過(guò)操作系統(tǒng)對(duì)MOD、CMR、SR、BTR 等寄存器進(jìn)行操控以實(shí)現(xiàn)CAN 通信功能。進(jìn)入系統(tǒng)后,首先為CAN 控制器抽象出2 個(gè)結(jié)構(gòu)體用于表示CAN 的各個(gè)寄存器功能,然后根據(jù)2 個(gè)CAN 控制器的基地址為結(jié)構(gòu)體進(jìn)行指針賦值,讓它們產(chǎn)生實(shí)際意義。根據(jù)需求對(duì)結(jié)構(gòu)體進(jìn)行初始化,配置波特率并進(jìn)入正常工作模式,再設(shè)置接收掩碼[9],最后為CAN 控制器注冊(cè)中斷服務(wù)函數(shù),當(dāng)CAN 控制器接收到數(shù)據(jù)時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用中斷函數(shù)將數(shù)據(jù)放置到指定內(nèi)存位置。CAN 控制器的整體工作流程如圖2 所示。
圖2 CAN 軟件工作流程Fig.2 CAN software workflow
在發(fā)送部分,本次設(shè)計(jì)使用了2 種數(shù)據(jù)幀,分別是SFF(標(biāo)準(zhǔn)幀)與EFF(擴(kuò)展幀),前者的ID 號(hào)為11 位,后者的ID 號(hào)為29 位,ID 號(hào)越小表示該幀的優(yōu)先級(jí)越高,為了避免ID 號(hào)干擾測(cè)試結(jié)果,固定ID 號(hào)為0X400[10]。
在接收部分,因?yàn)镃AN 的中斷觸發(fā)速率較快,而將CAN 數(shù)據(jù)從內(nèi)存搬運(yùn)到BRAM 的速率較慢,為了解決這個(gè)問(wèn)題,采用了生產(chǎn)者—消費(fèi)者模型,如圖3 所示。首先在內(nèi)存中創(chuàng)建1 個(gè)循環(huán)隊(duì)列用于存放數(shù)據(jù),循環(huán)隊(duì)列上每個(gè)單元可以存放1 個(gè)CAN 幀。當(dāng)CAN 控制器收到數(shù)據(jù)后,系統(tǒng)調(diào)用中斷服務(wù)函數(shù),中斷服務(wù)函數(shù)再調(diào)用進(jìn)隊(duì)列函數(shù),將數(shù)據(jù)放到循環(huán)隊(duì)列的單元中,并記錄這個(gè)單元的位置,之后再利用銳華系統(tǒng)中的信號(hào)量機(jī)制,使用系統(tǒng)函數(shù)sem_post 給消費(fèi)者線程發(fā)送信號(hào)。在CAN工作之前,先使用系統(tǒng)函數(shù)pthread_create 注冊(cè)1個(gè)消費(fèi)者線程,該線程會(huì)一直循環(huán)等待生產(chǎn)者給其發(fā)出的信號(hào),當(dāng)收到信號(hào)后調(diào)用出隊(duì)列函數(shù),將節(jié)點(diǎn)中的CAN 數(shù)據(jù)取出,同樣也記錄節(jié)點(diǎn)的位置,一般這個(gè)節(jié)點(diǎn)不會(huì)和生產(chǎn)者使用的節(jié)點(diǎn)重合。如果循環(huán)隊(duì)列的節(jié)點(diǎn)已經(jīng)被用完,則生產(chǎn)者會(huì)覆蓋最原始的數(shù)據(jù),并通知消費(fèi)者,讓其從被覆蓋節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)取出數(shù)據(jù)。通過(guò)這種模型,可以很好地解決數(shù)據(jù)接收過(guò)快導(dǎo)致無(wú)法及時(shí)處理的問(wèn)題。
圖3 生產(chǎn)者-消費(fèi)者模型示意圖Fig.3 Schematic diagram of producer-consumer model
為支持1553 光纖信號(hào)多路收發(fā)功能,光模塊選用中航光電的HTA8537-MD-T002YY,該模塊支持12 路并行光收發(fā)一體,中心波長(zhǎng)850 nm,單通道傳輸速率為10.312 5 Gbps,具備I2C 通信監(jiān)控功能,使用3.3 V 單電源供電,原理圖如圖4 所示。
圖4 HTA8537-MD-T002YY 原理圖Fig.4 Schematic diagram of HTA8537-MD-T002YY
為了防止光模塊狀態(tài)異常導(dǎo)致?lián)p壞,使用I2C通信對(duì)其進(jìn)行溫度與電壓監(jiān)控,電壓轉(zhuǎn)換公式為
溫度轉(zhuǎn)換公式如式(2),溫度為可正可負(fù)的有符號(hào)值。
在1553 協(xié)議中,共存在3 種信息單元,分別是命令幀、數(shù)據(jù)幀與狀態(tài)幀。命令幀一般由NC 節(jié)點(diǎn)發(fā)出,用于控制NT 節(jié)點(diǎn),數(shù)據(jù)幀用于各個(gè)節(jié)點(diǎn)之間傳輸數(shù)據(jù),狀態(tài)幀一般用于NT 節(jié)點(diǎn)向NC 節(jié)點(diǎn)反饋?zhàn)约旱臓顟B(tài),使NC 節(jié)點(diǎn)可以發(fā)出正確的命令[11]。1553 協(xié)議規(guī)定了10 種傳輸格式,本次設(shè)計(jì)實(shí)現(xiàn)了3 種最常見(jiàn)的格式,分別是NC-NT、NTNC、NT-NT。
(1)NC-NT 傳輸:NC 先給NT 發(fā)送命令幀,告知NT 節(jié)點(diǎn)即將給其發(fā)送數(shù)據(jù),然后再發(fā)送數(shù)據(jù)幀,最后NT 節(jié)點(diǎn)向NC 節(jié)點(diǎn)反饋一個(gè)狀態(tài)幀,告知其數(shù)據(jù)接收情況;(2)NT-NC 傳輸:NC 先給NT 節(jié)點(diǎn)發(fā)送命令幀,詢問(wèn)NT 節(jié)點(diǎn)是否有數(shù)據(jù)要發(fā)送,如果NT 節(jié)點(diǎn)有數(shù)據(jù),會(huì)先給NC 節(jié)點(diǎn)發(fā)送一個(gè)狀態(tài)幀表明即將發(fā)送數(shù)據(jù),最后發(fā)送數(shù)據(jù)幀;(3)NT-NT 傳輸:NC 節(jié)點(diǎn)先給主NT 節(jié)點(diǎn)發(fā)送命令幀,詢問(wèn)其是否有數(shù)據(jù)要發(fā)送給從NT 節(jié)點(diǎn)。如果有,主NT 節(jié)點(diǎn)會(huì)發(fā)送給從NT 節(jié)點(diǎn)命令幀,讓從NT 節(jié)點(diǎn)準(zhǔn)備接收數(shù)據(jù),然后再發(fā)送數(shù)據(jù)幀。最后主NT 節(jié)點(diǎn)會(huì)發(fā)送狀態(tài)幀給NC 節(jié)點(diǎn),告知本次傳輸已經(jīng)結(jié)束。
1553 模塊功能框圖如圖5 所示。根據(jù)1553 協(xié)議的冗余設(shè)計(jì)要求,1553 模塊收發(fā)有A 和B 兩個(gè)通道,默認(rèn)選擇A 通道。如果A 通道出現(xiàn)故障,則立即切換到B 通道收發(fā)數(shù)據(jù)。如果兩個(gè)通道同時(shí)出現(xiàn)故障,則向處理器報(bào)告錯(cuò)誤。串行數(shù)據(jù)速率為2.125 Gb/s,串并轉(zhuǎn)換模塊按照該速率將串行數(shù)據(jù)轉(zhuǎn)換成10位寬的并行數(shù)據(jù)以滿足編解碼的需求,編碼與解碼模塊通過(guò)查表的方式實(shí)現(xiàn)8 b/10 b 編解碼。端口狀態(tài)控制一直監(jiān)控解碼模塊的輸出數(shù)據(jù),如果監(jiān)控到1553 協(xié)議規(guī)定的原語(yǔ)序列,狀態(tài)機(jī)則會(huì)根據(jù)當(dāng)前狀態(tài)進(jìn)行跳轉(zhuǎn),輸出對(duì)應(yīng)的原語(yǔ)直到端口鏈接成功。發(fā)送數(shù)據(jù)組幀模塊會(huì)根據(jù)發(fā)送寄存器的控制去讀取發(fā)送BRAM 中的數(shù)據(jù),按照FC 幀的格式為其添加上SOF、幀頭、CRC 以及EOF,完成組幀過(guò)程然后發(fā)送出去。接收數(shù)據(jù)解析模塊會(huì)一直監(jiān)控解碼模塊的輸出信號(hào),當(dāng)檢測(cè)到SOF 時(shí),說(shuō)明有數(shù)據(jù)進(jìn)入,開(kāi)始接收數(shù)據(jù)一直檢測(cè)到EOF 停止。解析模塊先進(jìn)行幀處理,去除SOF、CRC 與EOF,然后將剩余的數(shù)據(jù)寫(xiě)入接收BRAM,同時(shí)配置接收寄存器,告知處理器此次接收數(shù)據(jù)的大小與位置。
圖5 1553 模塊功能框圖Fig.5 1553 module function block diagram
1553 的功能基于Vivado 軟件使用verilog 語(yǔ)言進(jìn)行開(kāi)發(fā),在進(jìn)行實(shí) 際測(cè)試之前,先對(duì)1553 模塊進(jìn)行波形仿真以驗(yàn)證功能是否正常,仿真結(jié)果如圖6所示。共設(shè)計(jì)了3 種速率的時(shí)鐘125、100、50 M以適應(yīng)不同的要求,當(dāng)sys_en 信號(hào)被拉高后,NT節(jié)點(diǎn)進(jìn)入工作狀態(tài),rx_cmd 為NC 節(jié)點(diǎn)發(fā)送給NT節(jié)點(diǎn)的命令幀,命令幀的字長(zhǎng)為32 位,幀頭部分的數(shù)據(jù)包含了幀類型、目標(biāo)節(jié)點(diǎn)ID、源節(jié)點(diǎn)ID、優(yōu)先級(jí)、序列位置等信息,共有12 字,本次設(shè)計(jì)所使用的命令幀幀頭部分組成如表2 所示。
表2 命令幀幀頭(部分)Tab.2 Command frame header (partial)
圖6 NT 節(jié)點(diǎn)仿真結(jié)果Fig.6 NT node simulation result
NT 節(jié)點(diǎn)會(huì)解析這些信息,然后根據(jù)NC 節(jié)點(diǎn)的指令發(fā)送狀態(tài)幀給NC 節(jié)點(diǎn),狀態(tài)幀的字長(zhǎng)也為32 位,幀頭前6 字和命令幀一樣,另有兩字的可選幀頭用于NT-NT 的傳輸中,本次仿真并未使用,tx_data 表示NT 節(jié)點(diǎn)反饋給NC 節(jié)點(diǎn)的帶有數(shù)據(jù)的狀態(tài)幀,共12 字。當(dāng)rx_valid 信號(hào)拉高時(shí),提示PL 部分的其它功能模塊rx_cmd 的信號(hào)有效,tx_valid 信號(hào)同理。當(dāng)NT 節(jié)點(diǎn)完成了數(shù)據(jù)的接收或發(fā)送后,會(huì)將rx_done 或tx_done 信號(hào)拉高1 個(gè)脈沖,用于通知PS 部分傳輸已經(jīng)完成。NC 節(jié)點(diǎn)向NT 節(jié)點(diǎn)發(fā)送命令幀詢問(wèn)其是否有數(shù)據(jù)要發(fā)送給NC節(jié)點(diǎn),NT 節(jié)點(diǎn)反饋給NC 節(jié)點(diǎn)一個(gè)包含數(shù)據(jù)的狀態(tài)幀,仿真結(jié)果符合預(yù)期。
CAN 控制器收到的數(shù)據(jù)會(huì)存放到PS 部分的內(nèi)存中,1553 功能模塊收到的數(shù)據(jù)會(huì)存放到PL 部分的內(nèi)存中,為了實(shí)現(xiàn)1553 總線與CAN 總線的轉(zhuǎn)換,核心任務(wù)是實(shí)現(xiàn)PS 內(nèi)存與PL 內(nèi)存之間的交互。PS 部分的內(nèi)存使用DDR 內(nèi)存芯片,PL 部分使用了BRAM 軟核內(nèi)存。BRAM 是由Xilinx 公司推出的IP 核,是PL 部分的存儲(chǔ)器陣列,PS 和PL通過(guò)對(duì)BRAM 進(jìn)行讀寫(xiě)操作實(shí)現(xiàn)數(shù)據(jù)的交互[12]。BRAM 的優(yōu)點(diǎn)是空間大小可靈活配置,成本低,適用于數(shù)據(jù)地址不連續(xù)、長(zhǎng)度不規(guī)則的情況,同時(shí)因?yàn)锽RAM 是軟核IP,使用成本比內(nèi)存芯片低。BRAM 是按照4 字節(jié)尋址,與1553 協(xié)議的字長(zhǎng)相同,所以使用BRAM 去存儲(chǔ)1553 數(shù)據(jù)開(kāi)發(fā)難度較小。PS 部分通過(guò)DDR 控制器去讀取DDR 中的數(shù)據(jù),通過(guò)AXI 接口去操控BRAM 控制器,進(jìn)而去控制BRAM 的讀寫(xiě),可以實(shí)現(xiàn)內(nèi)存之間的交互,內(nèi)存設(shè)計(jì)示意圖如圖7 所示。
圖7 內(nèi)存設(shè)計(jì)示意圖Fig.7 Memory design diagram
在PS 的DDR 內(nèi)存中,預(yù)留出4 塊空間分別用于兩路CAN 的收發(fā),這4 塊內(nèi)存都有與其對(duì)應(yīng)的BRAM。在CAN 轉(zhuǎn)1553 的方向,前文中設(shè)計(jì)的消費(fèi)者線程會(huì)將CAN 數(shù)據(jù)從DDR 內(nèi)存搬運(yùn)到發(fā)送BRAM 中,同時(shí)配置REG 寄存器,告知1553 模塊數(shù)據(jù)存放的位置與大小,1553 模塊對(duì)數(shù)據(jù)進(jìn)行處理,完成CAN 轉(zhuǎn)1553。在1553 轉(zhuǎn)CAN 的方向,當(dāng)1553 模塊將接收到的數(shù)據(jù)儲(chǔ)存到接收BRAM 中,同時(shí)根據(jù)數(shù)據(jù)的大小與儲(chǔ)存位置配置寄存器,最后發(fā)送1 個(gè)中斷信號(hào)給處理器,通知其準(zhǔn)備接收數(shù)據(jù)。處理器在接收到中斷信號(hào)后,從接收BRAM 中將數(shù)據(jù)搬運(yùn)到相對(duì)應(yīng)的DDR 內(nèi)存空間,之后CAN 控制器對(duì)數(shù)據(jù)進(jìn)行處理,完成1553 轉(zhuǎn)CAN。
本次設(shè)計(jì)的總線通信模塊實(shí)物圖如圖8 所示。板1 用于連接串口、網(wǎng)口、JTAG、CAN 接口等,板2 是轉(zhuǎn)換模塊的核心處理板,板1 與板2 用J63A 接口連接,測(cè)試所用的CAN 盒用于轉(zhuǎn)換模塊與上位機(jī)之間的CAN 通信。
圖8 總線通信模塊實(shí)物圖Fig.8 Picture of communication module
本次測(cè)試環(huán)境示意如圖9 所示。CAN 收發(fā)上位機(jī)通過(guò)控制CAN 盒發(fā)送CAN 報(bào)文,總線通信模塊收到CAN 報(bào)文后,將其轉(zhuǎn)換為1553 報(bào)文格式的光纖信號(hào)發(fā)送到1553 收發(fā)模塊,1553 收發(fā)模塊不具備總線轉(zhuǎn)換功能,只能收發(fā)1553 數(shù)據(jù),通過(guò)PCIE 與數(shù)據(jù)監(jiān)控上位機(jī)連接。1553 收發(fā)模塊收到數(shù)據(jù)后發(fā)送給數(shù)據(jù)監(jiān)控上位機(jī),數(shù)據(jù)監(jiān)控上位機(jī)運(yùn)行1553 軟件,可以監(jiān)控1553 數(shù)據(jù)的收發(fā)情況,至此完成CAN 到1553 的轉(zhuǎn)換測(cè)試。反方向,數(shù)據(jù)監(jiān)控上位機(jī)控制1553 收發(fā)模塊主動(dòng)發(fā)送數(shù)據(jù),則可以完成1553 到CAN 的轉(zhuǎn)換測(cè)試??偩€通信模塊發(fā)送數(shù)據(jù)則作NC 節(jié)點(diǎn),接收數(shù)據(jù)則作NT 節(jié)點(diǎn)。
圖9 測(cè)試環(huán)境示意圖Fig.9 Schematic diagram of test environment
實(shí)驗(yàn)測(cè)試了多組不同大小的數(shù)據(jù)轉(zhuǎn)換,結(jié)果如表3 所示。通過(guò)測(cè)試結(jié)果可以看出,在數(shù)據(jù)小于500 B 時(shí),通信模塊可以正常實(shí)現(xiàn)總線轉(zhuǎn)換;當(dāng)數(shù)據(jù)大于500 B 時(shí),通信模塊會(huì)出現(xiàn)小部分?jǐn)?shù)據(jù)轉(zhuǎn)換失敗的現(xiàn)象,原因是數(shù)據(jù)量過(guò)大造成通道堵塞,進(jìn)而引發(fā)數(shù)據(jù)丟失。
表3 總線轉(zhuǎn)換測(cè)試結(jié)果Tab.3 Bus conversion test result
(1)本文設(shè)計(jì)的通信模塊可以實(shí)現(xiàn)CAN 與1553 的轉(zhuǎn)換功能;
(2)APSoC 芯片應(yīng)用于總線轉(zhuǎn)換功能時(shí),具有靈活性高、開(kāi)發(fā)難度低、可軟硬件結(jié)合的特點(diǎn);
(3)將1553 總線應(yīng)用于車載網(wǎng)絡(luò)中,可極大提高車載網(wǎng)絡(luò)的通信速率;
(4)目前該通信模塊還不適用于大數(shù)據(jù)量的轉(zhuǎn)換,需要進(jìn)一步進(jìn)行改進(jìn),擴(kuò)寬數(shù)據(jù)通道。