基于X86及PCIE的MVB通信网卡设计
2020-04-21宁寿辉石小磊
宁寿辉 石小磊
摘要:简要介绍多功能车辆总线(MVB )总线及PCIE总线的特点,给出了基于X86处理器、PCIE总线接口的MVB通信网卡的硬件架构及设计方法,MVB网卡驱动软件、通信软件设计开发流程。
关键词:MVB;PCIE;X86;通信网卡;驱动;通信
中图分类号:TP334.7 文献标识码:A 文章编号:1007-9416(2020)01-0142-03
0 引言
目前,符合TCN标准的通信产品在铁路上已经得到广泛应用,该标准定义了两种用于列车车载数据通信的现场总线:绞线式列车总线(WTB)和多功能车辆总线(MVB)。MVB总线将车厢内,即机车内、客车车辆内或货车车辆内的设备连在一起构成一个局域网。其中,以基于PC/104架构的MVB通信设备应用最为广泛。随着PCI总线技术向工业控制领域渗透,以支持热插拔操作为显著特征的PCI总线的MVB通信设备拥有良好的应用前景。PCI总线技术具有无法忽视的优点,如更高的总线频率、独立于处理器、支持突发读写传输、自动配置、支持自动的设备检测与配置及低功耗等。PCI-Express (PCIE)作为最新一代的总线接口,其点对点的串行设计以及双通道高带宽的传输模式,大大提高了数据的传输速率,它的广泛应用将全面取代PCI、AGP等总线。本文设计了一种基于X86及PCIE总线的MVB通信网卡,并完成软硬件设计开发。
1 MVB网卡硬件设计
1.1 总体硬件架构
MVB网卡硬件架构如图1所示,MVB网卡由现场可编程逻辑阵列FPGA和MVB物理接口单元两部分组成。现场可编程逻辑阵列FPGA完成PCIE总线数据编解码、MVB数据帧收发以及PCIE总线与MVB核之间的数据交互,MVB物理接口单元完成MVB数据的编解码(RS485格式)和符合IEC61375-1标准的TCN网络物理接入。
1.2 MVB接口单元设计
MVB接口单元完成MVB差分信号隔离、RS485信号编解码和收发器控制,接口标准符合IEC61357-1協议。
接口单元硬件原理如图2所示,隔离变压器采用PULSE公司X-1729NL,RS485收发器采用MAX3088,LCDA05完成差分信号的过压钳位保护。
1.3 PCIE转MVB单元设计
PCIE转MVB单元硬件原理如图3所示, XILINX公司FPGA完成PCIE协议转换和MVB核设计,PCIE协议转换完成PCIE总线控制命令解析,MVB核完成MVB数据帧解析和收发功能。
2 MVB网卡软件设计
2.1 驱动软件设计
本设计采用X86工控机及Windows7操作系统,为了实现操作系统应用程序对于MVB网卡的控制操作,需要开发设备驱动程序。这里选用WDK7.1开发工具软件,结合VS2013进行PCIE驱动程序开发。WDK是微软推出的一款完全集成的驱动程序开发工具,它包含Windows DDK,用于测试Windows驱动器的可靠性和稳定性,是专门为开发人员推出的,支持Win7以上所有操作系统。
首先要进行开发环境的搭建。在Windows7操作系统中,依次安装Visual Studio 2013及WDK7.1开发工具。安装结束后,要完成WDK7.1编译环境的配置,选择checked build环境编译包含debug信息的驱动。
整个WDF驱动程序工程共包含3个源文件(Driver.c, Device.c, Queue.c)。device.c源码文件主要包含设备创建、设备资源获取和释放的功能代码。PortIODeviceCreate()为设备创建函数,供PNP调用。PortIODeviceGetHw()为硬件资源获取函数,供PNP调用,顺序获取PCI/PCIE设备所使用的IO和Memeoy空间资源并对memory空间进行映射,PortIODeviceReleaseHw()为硬件资源释放函数,供PNP调用,对已映射的memory空间进行释放。
driver.c源码文件主要功能为生成驱动对象。DriverEntry DriverEntry()为驱动程序入口函数;PortIOEvtDeviceAdd()为设备添加函数。
queue.c源码文件创建用于与客户应用程序通讯的IO队列对象,PortIOEvtIoDeviceControl()回调函数对于用户操作进行分发处理。
将以上源代码通过VS2013+WDK7.1编译就能生成相应PCIE硬件板卡的Windows驱动程序genport.sys文件。安装驱动程序后,应用程序可以调用设备驱动接口与硬件设备进行通信。
驱动程序调度流程如图4所示,具体实现过程如下:
(1)首先通过Win32API函数GP_LoadDev打开设备。
(2)然后调用GP_GetIOResourceInfo函数获取设备资源列表情况。资源列表信息保存在RESINFO结构体中。
typedef struct {
ULONG PortBase[6]; //基地址列表
ULONG PortCount[6]; //基地址段长度列表
ULONG PortMemoryType[6];//基地址的类型,1表示是IO空间,0表示是Memory空间
ULONG PortMemoryResourceCount;//有效的基地址数量
} RESINFO, *PRESINFO;
(3)接下来调用GP_SetBusInterfaceData函数完成PCIE配置空间的配置。
(4)最后调用GP_WritePort及GP_ReadPort函数实现与驱动程序通信,即读写数据,当应用程序退出时,调用GP_CloseDev函数关闭设备。
2.2 通信软件设计
根据MVB设备的分类标准,MVB设备按性能可分为5类。本文设计的MVB网卡支持过程数据、消息数据、监视数据的收发,也具备总线管理能力,实现了MVB4类设备的全部功能。设计中没有采用传统的利用MVB专用通讯控制器的设计方法,而是采用了当今流行的FPGA代替MVB专用通讯控制器的方案。
MVB网卡的通信采用客户端-服务器模式,如图5所示。主机也称作上位机,是指可以直接发出控制命令的计算机设备,可以通过界面显示各种变化信号的状态,实现良好的人机交互。下位机为MVB网卡,将接收到的主机命令解释成为时序信号,直接来控制相应的硬件设备,并且实时读取设备的状态数据,将此状态数据转化成数字信号反馈给主机。本论文中,主机软件就是应用程序,其功能是实现与硬件设备的驱动程序进行通信,发送指令并接收由硬件设备传递来的实时数据。主机软件采用VS2013软件工具来进行编程,采用面向对象的C++语言,在与硬件驱动程序进行通信的同时,将实时数据显示在主机界面上,实现硬件与软件的协同工作。服务器端的驱动程序由MVB网卡中的FPGA实现。
主机与MVB网卡的接口采用UART仿真(UART Emulation)模式,即利用一种类似于通用异步收发器UART16C450的基本通信模式实现数据通信,在这种模式下,数据“仿佛是通过一根串行线路”进行传输,数据以高速连续方式发送和接收。主机对MVB鏈路层的接口访问主要通过使用UART寄存器组的方式实现。主机使用发送指令的方式访问UART寄存器组。MVB控制器将处理分析指令中的信息,从而对MVB进行相关的操作。主机用户应用程序与MVB通信协议栈之间的接口由应用程序接口API实现,如过程数据链路层接口LPI、过程数据应用层接口AVI及消息数据应用层接口AMI等。
MVB通信软件调度流程如下:首先读取MVB配置文件进行配置信息解析;然后完成MVB监视数据接口初始化、过程数据接口初始化、通信存储器初始化、过程数据端口配置;之后启动MVB设备;最后就可以进行MVB过程数据收发及处理。
MVB数据的接收指主机从MVB网络上读取数据,用于相应的应用。MVB数据的发送指应用通过主机将需要发送的数据发送至MVB网络。主机与MVB网卡进行数据交互,完成MVB数据的收发,其收发流程如图6所示。进行数据收发之前首先读取状态寄存器,判断发送缓冲区为空还是接收缓冲区为空,当发送缓冲区为空时,先传递发送指令,然后将数据写入发送缓冲区,数据发送完毕,结束本次发送。接收过程与发送过程类似。
3 结语
本文在研究多功能车辆总线(MVB)的基础上,提出了一种基于PCIE总线接口、FPGA通信控制器、X86处理器的MVB通信网卡的设计方法,并完成了最终实现。利用Visual Studio 2013及WDK7.1开发工具,完成了WDF模型驱动程序的开发。完成了基于客户端-服务器模式及UART仿真技术的MVB通信软件设计。在Windows7操作系统下,驱动程序和通信软件能够稳定运行。利用该类网卡组成的地铁车辆网络控制系统,通过实验室联调试验,验证了系统信息传递的可靠性、准确性和实时性,以及与其他产品的兼容性。实验表明,所设计的基于PCIE接口的MVB网卡可以很好地满足地铁车辆控制系统要求。目前该网卡已研制成功并批量装车使用,运行稳定可靠,已成为地铁车辆控制的关键设备。
参考文献
[1] IEC61375-1.Electric Railway Equipment-Train Bus-Part 1:Train Communication Network[S].2007.
[2] 王齐.PCI Express体系结构导读[M].北京:机械工业出版社,2010.
[3] 王晓庆,周晓波,赵强.PCIE高速数据采集系统的驱动及上位机软件开发[J].计算机应用与软件,2013(9):331-333.
[4] 刘娟,田泽,黎小玉.PCI-E接口驱动软件设计与实现[J].计算机技术与发展,2012(8):53-55+59.