寧壽輝 石小磊
摘要:簡要介紹多功能車輛總線(MVB )總線及PCIE總線的特點(diǎn),給出了基于X86處理器、PCIE總線接口的MVB通信網(wǎng)卡的硬件架構(gòu)及設(shè)計方法,MVB網(wǎng)卡驅(qū)動軟件、通信軟件設(shè)計開發(fā)流程。
關(guān)鍵詞:MVB;PCIE;X86;通信網(wǎng)卡;驅(qū)動;通信
中圖分類號:TP334.7 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2020)01-0142-03
0 引言
目前,符合TCN標(biāo)準(zhǔn)的通信產(chǎn)品在鐵路上已經(jīng)得到廣泛應(yīng)用,該標(biāo)準(zhǔn)定義了兩種用于列車車載數(shù)據(jù)通信的現(xiàn)場總線:絞線式列車總線(WTB)和多功能車輛總線(MVB)。MVB總線將車廂內(nèi),即機(jī)車內(nèi)、客車車輛內(nèi)或貨車車輛內(nèi)的設(shè)備連在一起構(gòu)成一個局域網(wǎng)。其中,以基于PC/104架構(gòu)的MVB通信設(shè)備應(yīng)用最為廣泛。隨著PCI總線技術(shù)向工業(yè)控制領(lǐng)域滲透,以支持熱插拔操作為顯著特征的PCI總線的MVB通信設(shè)備擁有良好的應(yīng)用前景。PCI總線技術(shù)具有無法忽視的優(yōu)點(diǎn),如更高的總線頻率、獨(dú)立于處理器、支持突發(fā)讀寫傳輸、自動配置、支持自動的設(shè)備檢測與配置及低功耗等。PCI-Express (PCIE)作為最新一代的總線接口,其點(diǎn)對點(diǎn)的串行設(shè)計以及雙通道高帶寬的傳輸模式,大大提高了數(shù)據(jù)的傳輸速率,它的廣泛應(yīng)用將全面取代PCI、AGP等總線。本文設(shè)計了一種基于X86及PCIE總線的MVB通信網(wǎng)卡,并完成軟硬件設(shè)計開發(fā)。
1 MVB網(wǎng)卡硬件設(shè)計
1.1 總體硬件架構(gòu)
MVB網(wǎng)卡硬件架構(gòu)如圖1所示,MVB網(wǎng)卡由現(xiàn)場可編程邏輯陣列FPGA和MVB物理接口單元兩部分組成?,F(xiàn)場可編程邏輯陣列FPGA完成PCIE總線數(shù)據(jù)編解碼、MVB數(shù)據(jù)幀收發(fā)以及PCIE總線與MVB核之間的數(shù)據(jù)交互,MVB物理接口單元完成MVB數(shù)據(jù)的編解碼(RS485格式)和符合IEC61375-1標(biāo)準(zhǔn)的TCN網(wǎng)絡(luò)物理接入。
1.2 MVB接口單元設(shè)計
MVB接口單元完成MVB差分信號隔離、RS485信號編解碼和收發(fā)器控制,接口標(biāo)準(zhǔn)符合IEC61357-1協(xié)議。
接口單元硬件原理如圖2所示,隔離變壓器采用PULSE公司X-1729NL,RS485收發(fā)器采用MAX3088,LCDA05完成差分信號的過壓鉗位保護(hù)。
1.3 PCIE轉(zhuǎn)MVB單元設(shè)計
PCIE轉(zhuǎn)MVB單元硬件原理如圖3所示, XILINX公司FPGA完成PCIE協(xié)議轉(zhuǎn)換和MVB核設(shè)計,PCIE協(xié)議轉(zhuǎn)換完成PCIE總線控制命令解析,MVB核完成MVB數(shù)據(jù)幀解析和收發(fā)功能。
2 MVB網(wǎng)卡軟件設(shè)計
2.1 驅(qū)動軟件設(shè)計
本設(shè)計采用X86工控機(jī)及Windows7操作系統(tǒng),為了實現(xiàn)操作系統(tǒng)應(yīng)用程序?qū)τ贛VB網(wǎng)卡的控制操作,需要開發(fā)設(shè)備驅(qū)動程序。這里選用WDK7.1開發(fā)工具軟件,結(jié)合VS2013進(jìn)行PCIE驅(qū)動程序開發(fā)。WDK是微軟推出的一款完全集成的驅(qū)動程序開發(fā)工具,它包含Windows DDK,用于測試Windows驅(qū)動器的可靠性和穩(wěn)定性,是專門為開發(fā)人員推出的,支持Win7以上所有操作系統(tǒng)。
首先要進(jìn)行開發(fā)環(huán)境的搭建。在Windows7操作系統(tǒng)中,依次安裝Visual Studio 2013及WDK7.1開發(fā)工具。安裝結(jié)束后,要完成WDK7.1編譯環(huán)境的配置,選擇checked build環(huán)境編譯包含debug信息的驅(qū)動。
整個WDF驅(qū)動程序工程共包含3個源文件(Driver.c, Device.c, Queue.c)。device.c源碼文件主要包含設(shè)備創(chuàng)建、設(shè)備資源獲取和釋放的功能代碼。PortIODeviceCreate()為設(shè)備創(chuàng)建函數(shù),供PNP調(diào)用。PortIODeviceGetHw()為硬件資源獲取函數(shù),供PNP調(diào)用,順序獲取PCI/PCIE設(shè)備所使用的IO和Memeoy空間資源并對memory空間進(jìn)行映射,PortIODeviceReleaseHw()為硬件資源釋放函數(shù),供PNP調(diào)用,對已映射的memory空間進(jìn)行釋放。
driver.c源碼文件主要功能為生成驅(qū)動對象。DriverEntry DriverEntry()為驅(qū)動程序入口函數(shù);PortIOEvtDeviceAdd()為設(shè)備添加函數(shù)。
queue.c源碼文件創(chuàng)建用于與客戶應(yīng)用程序通訊的IO隊列對象,PortIOEvtIoDeviceControl()回調(diào)函數(shù)對于用戶操作進(jìn)行分發(fā)處理。
將以上源代碼通過VS2013+WDK7.1編譯就能生成相應(yīng)PCIE硬件板卡的Windows驅(qū)動程序genport.sys文件。安裝驅(qū)動程序后,應(yīng)用程序可以調(diào)用設(shè)備驅(qū)動接口與硬件設(shè)備進(jìn)行通信。
驅(qū)動程序調(diào)度流程如圖4所示,具體實現(xiàn)過程如下:
(1)首先通過Win32API函數(shù)GP_LoadDev打開設(shè)備。
(2)然后調(diào)用GP_GetIOResourceInfo函數(shù)獲取設(shè)備資源列表情況。資源列表信息保存在RESINFO結(jié)構(gòu)體中。
typedef struct {
ULONG PortBase[6];? //基地址列表
ULONG PortCount[6];? //基地址段長度列表
ULONG PortMemoryType[6];//基地址的類型,1表示是IO空間,0表示是Memory空間
ULONG PortMemoryResourceCount;//有效的基地址數(shù)量
} RESINFO, *PRESINFO;
(3)接下來調(diào)用GP_SetBusInterfaceData函數(shù)完成PCIE配置空間的配置。
(4)最后調(diào)用GP_WritePort及GP_ReadPort函數(shù)實現(xiàn)與驅(qū)動程序通信,即讀寫數(shù)據(jù),當(dāng)應(yīng)用程序退出時,調(diào)用GP_CloseDev函數(shù)關(guān)閉設(shè)備。
2.2 通信軟件設(shè)計
根據(jù)MVB設(shè)備的分類標(biāo)準(zhǔn),MVB設(shè)備按性能可分為5類。本文設(shè)計的MVB網(wǎng)卡支持過程數(shù)據(jù)、消息數(shù)據(jù)、監(jiān)視數(shù)據(jù)的收發(fā),也具備總線管理能力,實現(xiàn)了MVB4類設(shè)備的全部功能。設(shè)計中沒有采用傳統(tǒng)的利用MVB專用通訊控制器的設(shè)計方法,而是采用了當(dāng)今流行的FPGA代替MVB專用通訊控制器的方案。
MVB網(wǎng)卡的通信采用客戶端-服務(wù)器模式,如圖5所示。主機(jī)也稱作上位機(jī),是指可以直接發(fā)出控制命令的計算機(jī)設(shè)備,可以通過界面顯示各種變化信號的狀態(tài),實現(xiàn)良好的人機(jī)交互。下位機(jī)為MVB網(wǎng)卡,將接收到的主機(jī)命令解釋成為時序信號,直接來控制相應(yīng)的硬件設(shè)備,并且實時讀取設(shè)備的狀態(tài)數(shù)據(jù),將此狀態(tài)數(shù)據(jù)轉(zhuǎn)化成數(shù)字信號反饋給主機(jī)。本論文中,主機(jī)軟件就是應(yīng)用程序,其功能是實現(xiàn)與硬件設(shè)備的驅(qū)動程序進(jìn)行通信,發(fā)送指令并接收由硬件設(shè)備傳遞來的實時數(shù)據(jù)。主機(jī)軟件采用VS2013軟件工具來進(jìn)行編程,采用面向?qū)ο蟮腃++語言,在與硬件驅(qū)動程序進(jìn)行通信的同時,將實時數(shù)據(jù)顯示在主機(jī)界面上,實現(xiàn)硬件與軟件的協(xié)同工作。服務(wù)器端的驅(qū)動程序由MVB網(wǎng)卡中的FPGA實現(xiàn)。
主機(jī)與MVB網(wǎng)卡的接口采用UART仿真(UART Emulation)模式,即利用一種類似于通用異步收發(fā)器UART16C450的基本通信模式實現(xiàn)數(shù)據(jù)通信,在這種模式下,數(shù)據(jù)“仿佛是通過一根串行線路”進(jìn)行傳輸,數(shù)據(jù)以高速連續(xù)方式發(fā)送和接收。主機(jī)對MVB鏈路層的接口訪問主要通過使用UART寄存器組的方式實現(xiàn)。主機(jī)使用發(fā)送指令的方式訪問UART寄存器組。MVB控制器將處理分析指令中的信息,從而對MVB進(jìn)行相關(guān)的操作。主機(jī)用戶應(yīng)用程序與MVB通信協(xié)議棧之間的接口由應(yīng)用程序接口API實現(xiàn),如過程數(shù)據(jù)鏈路層接口LPI、過程數(shù)據(jù)應(yīng)用層接口AVI及消息數(shù)據(jù)應(yīng)用層接口AMI等。
MVB通信軟件調(diào)度流程如下:首先讀取MVB配置文件進(jìn)行配置信息解析;然后完成MVB監(jiān)視數(shù)據(jù)接口初始化、過程數(shù)據(jù)接口初始化、通信存儲器初始化、過程數(shù)據(jù)端口配置;之后啟動MVB設(shè)備;最后就可以進(jìn)行MVB過程數(shù)據(jù)收發(fā)及處理。
MVB數(shù)據(jù)的接收指主機(jī)從MVB網(wǎng)絡(luò)上讀取數(shù)據(jù),用于相應(yīng)的應(yīng)用。MVB數(shù)據(jù)的發(fā)送指應(yīng)用通過主機(jī)將需要發(fā)送的數(shù)據(jù)發(fā)送至MVB網(wǎng)絡(luò)。主機(jī)與MVB網(wǎng)卡進(jìn)行數(shù)據(jù)交互,完成MVB數(shù)據(jù)的收發(fā),其收發(fā)流程如圖6所示。進(jìn)行數(shù)據(jù)收發(fā)之前首先讀取狀態(tài)寄存器,判斷發(fā)送緩沖區(qū)為空還是接收緩沖區(qū)為空,當(dāng)發(fā)送緩沖區(qū)為空時,先傳遞發(fā)送指令,然后將數(shù)據(jù)寫入發(fā)送緩沖區(qū),數(shù)據(jù)發(fā)送完畢,結(jié)束本次發(fā)送。接收過程與發(fā)送過程類似。
3 結(jié)語
本文在研究多功能車輛總線(MVB)的基礎(chǔ)上,提出了一種基于PCIE總線接口、FPGA通信控制器、X86處理器的MVB通信網(wǎng)卡的設(shè)計方法,并完成了最終實現(xiàn)。利用Visual Studio 2013及WDK7.1開發(fā)工具,完成了WDF模型驅(qū)動程序的開發(fā)。完成了基于客戶端-服務(wù)器模式及UART仿真技術(shù)的MVB通信軟件設(shè)計。在Windows7操作系統(tǒng)下,驅(qū)動程序和通信軟件能夠穩(wěn)定運(yùn)行。利用該類網(wǎng)卡組成的地鐵車輛網(wǎng)絡(luò)控制系統(tǒng),通過實驗室聯(lián)調(diào)試驗,驗證了系統(tǒng)信息傳遞的可靠性、準(zhǔn)確性和實時性,以及與其他產(chǎn)品的兼容性。實驗表明,所設(shè)計的基于PCIE接口的MVB網(wǎng)卡可以很好地滿足地鐵車輛控制系統(tǒng)要求。目前該網(wǎng)卡已研制成功并批量裝車使用,運(yùn)行穩(wěn)定可靠,已成為地鐵車輛控制的關(guān)鍵設(shè)備。
參考文獻(xiàn)
[1] IEC61375-1.Electric Railway Equipment-Train Bus-Part 1:Train Communication Network[S].2007.
[2] 王齊.PCI Express體系結(jié)構(gòu)導(dǎo)讀[M].北京:機(jī)械工業(yè)出版社,2010.
[3] 王曉慶,周曉波,趙強(qiáng).PCIE高速數(shù)據(jù)采集系統(tǒng)的驅(qū)動及上位機(jī)軟件開發(fā)[J].計算機(jī)應(yīng)用與軟件,2013(9):331-333.
[4] 劉娟,田澤,黎小玉.PCI-E接口驅(qū)動軟件設(shè)計與實現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2012(8):53-55+59.