劉 彪,白衛(wèi)偉,鐘 韋
(北京交通大學(xué) 電氣工程學(xué)院,北京 100044)
基于三級(jí)隊(duì)列緩存的FlexRay網(wǎng)絡(luò)監(jiān)控平臺(tái)
劉 彪,白衛(wèi)偉,鐘 韋
(北京交通大學(xué) 電氣工程學(xué)院,北京 100044)
FlexRay以其實(shí)時(shí)性、靈活性、高帶寬的優(yōu)勢(shì),被稱為“下一代車載網(wǎng)絡(luò)”;然而其協(xié)議相對(duì)復(fù)雜,網(wǎng)絡(luò)組網(wǎng)調(diào)試過(guò)程較困難;目前的輔助調(diào)試工具如CANoe不能進(jìn)一步分析網(wǎng)絡(luò)性能,在應(yīng)用上具有局限性;針對(duì)上述問(wèn)題,提出了一種同時(shí)對(duì)多個(gè)數(shù)據(jù)采集與存儲(chǔ)的解決方案,并以FPGA為核心設(shè)計(jì)了FlexRay網(wǎng)絡(luò)監(jiān)控平臺(tái),利用SPI和USB總線設(shè)計(jì)了通信協(xié)議,在數(shù)據(jù)緩存方面設(shè)計(jì)了三級(jí)隊(duì)列緩存方案;該平臺(tái)實(shí)現(xiàn)了通信數(shù)據(jù)監(jiān)測(cè)功能,可以獲取結(jié)點(diǎn)CPU中寄存器狀態(tài)、記錄數(shù)據(jù)幀到達(dá)時(shí)間,進(jìn)而分析網(wǎng)絡(luò)運(yùn)行及故障狀態(tài),同時(shí)解決了大量數(shù)據(jù)緩存溢出的問(wèn)題;經(jīng)過(guò)測(cè)試表明:系統(tǒng)能夠穩(wěn)定運(yùn)行,適用于快速、優(yōu)化地設(shè)計(jì)FlexRay網(wǎng)絡(luò)。
FlexRay;測(cè)試平臺(tái);FPGA;三級(jí)緩存
FlexRay具有10 MHz帶寬、雙通道冗余、消息發(fā)送時(shí)間的確定性等優(yōu)點(diǎn)[1-4],更適用于日益復(fù)雜的車載主干網(wǎng)絡(luò)以及對(duì)實(shí)時(shí)性要求嚴(yán)苛的線控系統(tǒng)[5]。然而FlexRay協(xié)議較復(fù)雜,需要完成四類參數(shù)——全局參數(shù)、節(jié)點(diǎn)參數(shù)、物理層參數(shù)與輔助參數(shù)共計(jì)超過(guò)70個(gè)參數(shù)的配置[6],同時(shí)由于啟動(dòng)和同步過(guò)程的特殊性,在開(kāi)發(fā)初期的結(jié)點(diǎn)組網(wǎng)調(diào)試過(guò)程中很不方便。
目前國(guó)外的一些商業(yè)化的輔助調(diào)試工具,比如Vector公司的CANoe.FlexRay環(huán)境及配套采集結(jié)點(diǎn)VN7600,可以協(xié)助完成組網(wǎng),但作為集成產(chǎn)品只能獲取通信數(shù)據(jù),不能進(jìn)行進(jìn)一步的網(wǎng)絡(luò)性能分析,無(wú)法獲取網(wǎng)絡(luò)運(yùn)行狀態(tài)參數(shù),在通信故障情況下無(wú)法獲得運(yùn)行參數(shù),也無(wú)法解決FlexRay網(wǎng)絡(luò)數(shù)據(jù)大量緩存的問(wèn)題,在應(yīng)用上還有一定的局限性。
本文提出了一種同時(shí)采集多個(gè)數(shù)據(jù)采集與存儲(chǔ)的解決方案,并基于此方案設(shè)計(jì)了FlexRay網(wǎng)絡(luò)監(jiān)控平臺(tái),此平臺(tái)除了可以監(jiān)測(cè)通信數(shù)據(jù)以外,還可以獲取網(wǎng)絡(luò)運(yùn)行及故障狀態(tài)并且解決了大量數(shù)據(jù)緩存溢出的問(wèn)題,能夠幫助工程師更快速、更優(yōu)化地設(shè)計(jì)FlexRay網(wǎng)絡(luò),同時(shí)成本相對(duì)于CANoe大大降低。
FlexRay是由BWM和Daimler Chrysler等公司形成的FlexRay聯(lián)盟(FlexRay Consortium)為了滿足未來(lái)汽車的通信需求而共同開(kāi)發(fā)的車載網(wǎng)絡(luò)協(xié)議。FlexRay是一個(gè)高速、容錯(cuò)的車輛總線系統(tǒng),核心概念是時(shí)間觸發(fā)的網(wǎng)絡(luò)通信協(xié)議,更加關(guān)注汽車行業(yè)的一些核心需求,比如數(shù)據(jù)傳輸率,數(shù)據(jù)通信的靈活性,更全面的拓?fù)溥x擇等。FlexRay電氣物理層為一個(gè)發(fā)送與一個(gè)或多個(gè)接收通信模塊提供了一種差分電壓連接(即總線),差分電壓通過(guò)測(cè)量?jī)蓚€(gè)表示為BP(總線正)和BM(總線負(fù))的信號(hào)線得到[7]。相較傳統(tǒng)的車用總線,F(xiàn)1exRay在很多方面都有突出的表現(xiàn),其優(yōu)點(diǎn)如下:
1)傳輸速率高:F1exRay有兩條分離的通信信道,相比于CAN總線1 Mbps的傳輸速率,F(xiàn)1exRay信道的數(shù)據(jù)最高傳輸速率為10 Mbps,雙通道運(yùn)行時(shí),數(shù)據(jù)的傳輸速率可以達(dá)到20 Mbps。
2)預(yù)知消息的到達(dá)時(shí)間:根據(jù)F1exRay總線的通信機(jī)制,消息是在不斷循環(huán)的周期中進(jìn)行發(fā)送的。各類消息在通信周期中所占的位置己事先設(shè)定,所以各類消息的接收節(jié)點(diǎn)可以提前知道消息到達(dá)的時(shí)間。
3)可靠性高:F1exRay有通信冗余能力,采用分布的時(shí)鐘同步機(jī)制,實(shí)時(shí)糾正相位合速率偏差,提供了多個(gè)等級(jí)的容錯(cuò)功能;并且可以采用雙通道冗余通信。
4)靈活性強(qiáng):F1exRay可以實(shí)現(xiàn)同步和異步的數(shù)據(jù)傳輸,也可進(jìn)行網(wǎng)絡(luò)進(jìn)度的檢測(cè);FlexRay可以實(shí)現(xiàn)總線、星型和混合拓?fù)渚W(wǎng)絡(luò)結(jié)構(gòu)的靈活配置,通過(guò)采用一種或結(jié)合兩種或兩種以上的拓?fù)浣Y(jié)構(gòu)來(lái)進(jìn)行分布式系統(tǒng)的配置;FlexRay媒體訪問(wèn)機(jī)制靈活,靜態(tài)段采用基于時(shí)間觸發(fā)的媒體訪問(wèn)機(jī)制,保證了數(shù)據(jù)通信的可預(yù)測(cè)性和時(shí)鐘同步,動(dòng)態(tài)段采用基于事件觸發(fā)的媒體訪問(wèn)機(jī)制,更有利于不同帶寬消息的傳輸,可以有效提高帶寬利用率。
依據(jù)FlexRay總線的特點(diǎn),該監(jiān)控平臺(tái)需要實(shí)現(xiàn)如下功能:能夠接收多路FlexRay結(jié)點(diǎn)中CPU的數(shù)據(jù)幀;能夠查看CPU的寄存器;能夠接收錯(cuò)誤類消息;能夠獲取數(shù)據(jù)幀到達(dá)時(shí)間,數(shù)據(jù)收集器能夠?qū)?shù)據(jù)發(fā)送至上位機(jī)進(jìn)行存儲(chǔ)、分析。
本監(jiān)控平臺(tái)的總體方案包括由3個(gè)FlexRay結(jié)點(diǎn)組成的通信網(wǎng)絡(luò);基于FPGA進(jìn)行搭建的用于對(duì)通信網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)采集的數(shù)據(jù)收集器以及上位機(jī)。3個(gè)FlexRay節(jié)點(diǎn)之間通過(guò)FlexRay總線進(jìn)行數(shù)據(jù)通信,F(xiàn)lexRay節(jié)點(diǎn)和FPGA通過(guò)SPI總線連接,F(xiàn)PGA和上位機(jī)之間通過(guò)USB總線進(jìn)行數(shù)據(jù)交互[8]。該監(jiān)控平臺(tái)采用的總體方案如圖1所示。
圖1 FlexRay網(wǎng)絡(luò)監(jiān)控平臺(tái)總體設(shè)計(jì)方案
該監(jiān)控平臺(tái)采用的FPGA是基于Altera公司的EP4CE10F17C8芯片。USB接口是基于Cypress的CY7C68031A芯片,該芯片支持高速USB2.0協(xié)議。該監(jiān)控平臺(tái)需要為FlexRay結(jié)點(diǎn)中的CPU嵌入一段數(shù)據(jù)打包及一段用于SPI數(shù)據(jù)通信的程序,為了提高兼容性,采用通用IO模擬SPI接口。
如圖2所示,該平臺(tái)中涉及到FlexRay結(jié)點(diǎn)CPU、FPGA(Field-Programmable Gate Arrary現(xiàn)場(chǎng)可編程器件)[9]和上位機(jī)的數(shù)據(jù)交互以及SPI總線和USB總線通信。數(shù)據(jù)通信協(xié)議設(shè)計(jì)為4層,如圖2所示。SPI字節(jié)流用于完成CPU和FPGA之間一個(gè)字節(jié)的發(fā)送,SPI幀用于CPU和FPGA之間一幀數(shù)據(jù)的傳輸,USB幀用于FPGA和上位機(jī)之間的數(shù)據(jù)傳輸。其中單片機(jī)到電腦的數(shù)據(jù)傳輸過(guò)程為,單片機(jī)將應(yīng)用層數(shù)據(jù)打包成SPI幀,SPI幀之后被拆解成單個(gè)的字節(jié)流發(fā)送至FPGA,F(xiàn)PGA將字節(jié)流組成SPI幀,之后FPGA將SPI幀打包成為USB幀發(fā)送至PC,F(xiàn)PGA和PC之間的底層通信由Cypress的USB控制器完成。最后PC應(yīng)用層拆解USB幀,再拆解SPI幀即可得到FlexRay結(jié)點(diǎn)CPU的應(yīng)用數(shù)據(jù)。PC和FPGA之間的通信方式為PC上位機(jī)將數(shù)據(jù)打包成USB幀發(fā)送至FPGA,F(xiàn)PGA拆解USB幀即可得到數(shù)據(jù)。
圖2 通信協(xié)議架構(gòu)圖
SPI幀分為3種:寄存器數(shù)據(jù)觀測(cè)格式、不帶時(shí)間戳和帶時(shí)間戳的FlexRay通信數(shù)據(jù)觀測(cè)格式,如表1、表2、表3所示。
表1 寄存器數(shù)據(jù)觀測(cè)格式
表2 不帶時(shí)間戳的FlexRay通信數(shù)據(jù)觀測(cè)格式
表3 帶時(shí)間戳的FlexRay通信數(shù)據(jù)觀測(cè)格式
帶時(shí)間戳的SPI幀記錄數(shù)據(jù)到達(dá)FPGA的時(shí)間,可以一次發(fā)送多幀F(xiàn)lexRay幀數(shù)據(jù),不帶時(shí)間戳的SPI幀不記錄幀到達(dá)FPGA的時(shí)間,只能一次發(fā)送一條FlexRay幀數(shù)據(jù)。
在FlexRay結(jié)點(diǎn)CPU中嵌入SPI幀發(fā)送程序,首先按照上述表中數(shù)據(jù)格式生成SPI幀,采用了隊(duì)列形式實(shí)現(xiàn)多幀的存儲(chǔ),包含隊(duì)列創(chuàng)建、1幀數(shù)據(jù)壓入隊(duì)列、3種幀格式的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建和將1個(gè)隊(duì)列中存儲(chǔ)的1幀數(shù)據(jù)發(fā)送。
USB幀數(shù)據(jù)用于FPGA和上位機(jī)之間的通信,本文設(shè)計(jì)3中USB幀格式,如表4~6所示。
表4 數(shù)據(jù)內(nèi)容格式
表5 控制命令格式
表6 錯(cuò)誤命令格式
本監(jiān)控平臺(tái)采用了Altera的FPGA,其內(nèi)部集成的SPI IP核模塊和定時(shí)器模塊一般是作為主機(jī)設(shè)計(jì)的,本平臺(tái)需要將FPGA作為從機(jī)設(shè)計(jì),所以SPI模塊和定時(shí)器模塊的程序都是通過(guò)Verilog HDL語(yǔ)言進(jìn)行描述;另外Altera的FPGA內(nèi)部嵌入了Nios II處理器,該處理器是用HDL語(yǔ)言進(jìn)行描述之后映射到FPGA的通用邏輯單元中。
利用FPGA中的Nios II處理器完成控制功能。由于需要與多個(gè)FlexRay結(jié)點(diǎn)連接,F(xiàn)PGA在存儲(chǔ)SPI幀數(shù)據(jù)時(shí)采用隊(duì)列形式,本文共設(shè)計(jì)了三級(jí)隊(duì)列緩存,以4個(gè)FlexRay結(jié)點(diǎn)為例的隊(duì)列緩存如圖3所示,其中Queue2_1表示第2號(hào)結(jié)點(diǎn)的一級(jí)緩存。一級(jí)緩存用于收集離散的字節(jié),二級(jí)緩存用于存儲(chǔ)一個(gè)SPI模塊的幀數(shù)據(jù),三級(jí)緩存用于向USB輸出數(shù)據(jù)。
圖3 SPI幀數(shù)據(jù)三級(jí)緩存
Nios II CPU使用Nios II 11.1 Software Build Tools軟件開(kāi)發(fā),使用c語(yǔ)言進(jìn)行編程。Nios II 程序開(kāi)發(fā)軟件開(kāi)發(fā)環(huán)境和JAVA編程語(yǔ)言的開(kāi)發(fā)環(huán)境類似,都是基于Eclipse IDE制作的。其重要部分分為初始化程序,SPI握手程序,CRC校驗(yàn)程序,SPI組幀程序,數(shù)據(jù)管理程序,USB幀封裝程序,隊(duì)列模塊程序。二級(jí)緩存數(shù)據(jù)管理和將三級(jí)緩存中的SPI幀封裝成USB幀的程序?qū)崿F(xiàn)均在Nios II軟核中實(shí)現(xiàn)。
二級(jí)緩存數(shù)據(jù)管理的流程如圖4所示。
圖4 二級(jí)緩存數(shù)據(jù)管理流程圖
二級(jí)緩存向第三級(jí)緩存輸出時(shí)采用依次從每個(gè)二級(jí)緩存中取一幀數(shù)據(jù)到第三級(jí)緩存中,如果數(shù)據(jù)幀有錯(cuò)誤則將對(duì)應(yīng)的SPI模塊錯(cuò)誤標(biāo)志位置1,并且將SPI幀轉(zhuǎn)換USB幀。錯(cuò)誤處理函數(shù)會(huì)將對(duì)應(yīng)的SPI模塊的二級(jí)緩存清零,直到第三級(jí)的緩存等于400字節(jié)或者第三級(jí)緩存加上一幀的數(shù)據(jù)大于400字節(jié)。
圖5是將三級(jí)緩存中的SPI幀數(shù)據(jù)封裝成USB數(shù)據(jù)幀的流程圖。
圖5 SPI幀封裝成USB幀的流程圖
其中q1和q2是兩個(gè)隊(duì)列,q1中存儲(chǔ)了SPI幀數(shù)據(jù),q2中存儲(chǔ)了USB幀數(shù)據(jù)流,q1是二級(jí)緩存,q2是三級(jí)緩存。
當(dāng)上位機(jī)發(fā)起USB請(qǐng)求時(shí),Nios II處理器會(huì)進(jìn)入U(xiǎn)SB中斷程序,將 USB幀數(shù)據(jù)從三級(jí)緩存的數(shù)據(jù)塊轉(zhuǎn)成無(wú)符號(hào)整型數(shù)據(jù)存入到無(wú)符號(hào)整型的數(shù)據(jù)塊中。USB的中斷程序的流程如圖6所示,起始第三級(jí)緩存存入數(shù)據(jù)塊即為將字節(jié)流轉(zhuǎn)換為128個(gè)無(wú)符號(hào)整型的數(shù)據(jù)塊。
圖6 USB中斷流程圖
該測(cè)試平臺(tái)PC端軟件的功能有采集USB數(shù)據(jù)、USB界面交互、對(duì)數(shù)據(jù)進(jìn)行解碼、將數(shù)據(jù)存入數(shù)據(jù)庫(kù)、靜態(tài)段時(shí)槽規(guī)劃、數(shù)據(jù)顯示以及軟件測(cè)試等。限于篇幅,此處不再介紹。
針對(duì)一個(gè)3結(jié)點(diǎn)的FlexRay網(wǎng)絡(luò)進(jìn)行了測(cè)試。
首先對(duì)FPGA中SPI利用Modelsim[10]進(jìn)行時(shí)序仿真,如圖7所示。Cs端口為外部使能功能,Clk為時(shí)鐘輸入,SI為數(shù)據(jù)輸入端口,SO為數(shù)據(jù)輸出端口。Indata是16位內(nèi)部數(shù)據(jù)輸入端口,InterCs是內(nèi)部使能端口,OutEven是數(shù)據(jù)輸出通知端口,DataOut是16bits數(shù)據(jù)輸出端口。
實(shí)際測(cè)試中,SPI時(shí)鐘頻率設(shè)定為500 kHz,利用邏輯分析儀采集到的SPI時(shí)序信號(hào)如圖8所示。通道0中采集的信號(hào)為主機(jī)MISO管腳,通道1中采集的信號(hào)為主機(jī)的SCK管腳,通道2采集的為主機(jī)的片選信號(hào),通道3采集的是主機(jī)的MOSI管腳。
圖7 SPI模塊仿真時(shí)序圖
圖8 SPI時(shí)序信號(hào)
在FPGA中的數(shù)據(jù)需要使用,NIOS II Sofware Build Tools軟件查看其中的數(shù)據(jù),如圖9所示,隊(duì)列FlexRay_node2_queue2接入接收到了來(lái)自節(jié)點(diǎn)1的數(shù)據(jù),該數(shù)據(jù)為寄存器數(shù)據(jù)。
圖9 FPGA中隊(duì)列中的數(shù)據(jù)
將FPGA數(shù)據(jù)采集器通過(guò)USB接口與上位機(jī)進(jìn)行連接,通信網(wǎng)絡(luò)中的數(shù)據(jù)就能通過(guò)查詢數(shù)據(jù)界面進(jìn)行顯示,并轉(zhuǎn)存到數(shù)據(jù)庫(kù)中,USB通訊程序查詢數(shù)據(jù)界面如圖10所示。
從上位機(jī)數(shù)據(jù)庫(kù)中可以查詢FlexRay通信數(shù)據(jù),查詢結(jié)果如圖11所示。
圖10 USB通訊程序查詢數(shù)據(jù)
圖11 FlexRay通信數(shù)據(jù)展示界面
圖10和圖11表明,測(cè)試平臺(tái)能夠正常收集FlexRay節(jié)點(diǎn)的通信數(shù)據(jù),通過(guò)對(duì)比FlexRay網(wǎng)絡(luò)實(shí)際發(fā)送數(shù)據(jù),沒(méi)有出現(xiàn)緩存溢出及數(shù)據(jù)丟失情況。
本文利用FPGA及NIOS II開(kāi)發(fā)技術(shù),設(shè)計(jì)了針對(duì)FlexRay網(wǎng)絡(luò)的監(jiān)控平臺(tái),結(jié)合SPI和USB總線設(shè)計(jì)了四層網(wǎng)絡(luò)通信協(xié)議,設(shè)計(jì)了三級(jí)緩存來(lái)解決大量數(shù)據(jù)溢出的問(wèn)題。經(jīng)過(guò)測(cè)試,F(xiàn)PGA中SPI模塊時(shí)序運(yùn)行正常,可以正確接收到FlexRay網(wǎng)絡(luò)結(jié)點(diǎn)CPU的寄存器狀態(tài)以及數(shù)據(jù)到達(dá)的時(shí)間,在大量數(shù)據(jù)發(fā)送的情況下也沒(méi)有出現(xiàn)緩存溢出及數(shù)據(jù)丟失的情況。本文所設(shè)計(jì)的監(jiān)控平臺(tái)針對(duì)FlexRay開(kāi)發(fā)初期中組網(wǎng)調(diào)試能夠提供較大的便利,從而縮短開(kāi)發(fā)周期。
[1]陳 龍. 車載FlexRay主干網(wǎng)的構(gòu)建與性能分析[D].哈爾濱:哈爾濱工業(yè)大學(xué),2008.
[2] 包 玥. FlexRay車載網(wǎng)絡(luò)的調(diào)度與控制協(xié)同設(shè)計(jì)[D].武漢:武漢理工大學(xué), 2014.
[3] 孫 雨. FlexRay網(wǎng)絡(luò)通信協(xié)議在車載系統(tǒng)中的應(yīng)用與研究[D].長(zhǎng)沙:中南大學(xué), 2014.
[4] FlexRay Communications System - Protocol Specification, Version 3.0.1[S]. FlexRay Consortium, Oct. 2010.
[5] Paulitsch, M. Hall, B..FlexRay in aerospace and safety-sensitive systems[J]. IEEE Aerospace and Electronic Systems Magazine, 2008, 23(9):4-13.
[6] 莊江麗. FlexRay總線的組網(wǎng)及其在混合動(dòng)力客車上的應(yīng)用[D].北京:北京交通大學(xué), 2012.
[7] 苑利維,李治國(guó),朱曉榮. 一種FlexRay總線通訊測(cè)試系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)測(cè)量與控制,2016,24(11):20-23.
[8] 楊建軍. CAN總線技術(shù)在汽車中的應(yīng)用[J].上海汽車,2007(6):32-34.
[9] 曹 晶. FPGA在智能交通產(chǎn)品中的應(yīng)用研究[J].電子技術(shù)與軟件工程,2016(6):139.
[10]張桂興,張英敏,張 鵬. 基于IP核與ModelSim的正弦波發(fā)生器仿真平臺(tái)建立[J].測(cè)控技術(shù),2011,30(1):28-31.
FlexRay Network Monitoring Platform Based on Tri-stage Queue Buffer
Liu Biao, Bai Weiwei, Zhong Wei
(College of Electrical Engineering, Beijing Jiaotong University, Beijing 100044,China)
FlexRay is known as "the next generation of vehicle network" with the advantages of real-time, flexibility and high bandwidth. However, the complex protocol makes it difficult to build and debug the node network. Currently debugging tools can not be used to further analyze the network performance, which is the limitation in application, such as CANoe. In order to solve the problems above, a solution for multiple datas acquisition and storage at the same time is presented,and the FlexRay network monitoring platform is designed with FPGA as the core,where the protocol is based on the SPI and USB bus and tri-stage queue buffer is used for data cache.It realizes the monitoring function of the communication data, obtains the register state of the node CPU, records the arrival time of the frame, and then analyzes the network operation and fault state, and solves the problem of massive data buffer overflow. The result shows that the system can run stably and is suitable for designing FlexRay network quickly and optimally.
FlexRay; test platform; FPGA;tri-stage buffer
2017-02-09;
2017-02-28。
國(guó)家自然科學(xué)基金(61401017);中央高校基本科研業(yè)務(wù)費(fèi)(2014JBM112)。
劉 彪(1982-),男,河北保定人,副教授,主要從事智能檢測(cè)技術(shù)和現(xiàn)場(chǎng)總線與控制網(wǎng)絡(luò)方向的研究。
1671-4598(2017)08-0139-04
10.16526/j.cnki.11-4762/tp.2017.08.036
TP368
A