一种飞艇半物理仿真系统ARINC429驱动的设计与实现
2016-11-17李冠林乔晋龙
李冠林,乔晋龙,2
(1.中国特种飞行器研究所,湖北 荆门 448035; 2.高速水动力航空科技重点实验室, 湖北 荆门 448035)
一种飞艇半物理仿真系统ARINC429驱动的设计与实现
李冠林1,乔晋龙1,2
(1.中国特种飞行器研究所,湖北 荆门 448035; 2.高速水动力航空科技重点实验室, 湖北 荆门 448035)
为了满足飞艇实际飞行过程对通信可靠性和实时性的需求,半物理仿真系统的飞艇模型计算机采用以PC为平台的Xpc嵌入式实时系统,飞控计算机采用以PowerPC为平台的VxWork嵌入式实时系统,通过ARINC429协议完成数据通讯;硬件上,PowerPC通过桥接芯片访问并控制PCI设备;软件上,按照Xpc系统和vxWork系统PCI设备驱动程序的编写流程,分析了xPC内存驱动框架和vxBus驱动框架关键技术点,设计了飞艇模型计算机Xpc和飞控计算机Vxwork的ARINC429通讯卡驱动程序;通过实际的应用,证实所开发的ARINC429驱动程序满足飞艇半物理仿真平台数据通讯的可靠性和实时性。
半物理仿真系统;嵌入式实时系统; ARINC429协议;驱动程序
0 引言
飞艇的半物理仿真实验是检验飞艇飞控性能的有效途径。飞艇半物理仿真系统中不同的操作系统环境,同一硬件设备原理和流程虽然一致,但具体驱动方法通常因操作系统的不同而有所差异[1]。因此,为了保证飞艇半物理仿真系统正常的ARINC429通讯,开发出满足Xpc系统和vxWork系统的ARINC429通讯卡驱动程序是十分必要的。
1 系统概述
飞艇半实物物理仿真主要由飞艇仿真平台和飞控计算机组成,硬件组成如图1所示。
图1 飞艇仿真平台硬件组成
飞艇仿真平台建立在xPC系统环境下,利用飞艇模型模拟真实飞艇的飞行,飞控计算机建立在xWork环境下,负责飞艇的飞行控制和导航,飞控计算机和飞艇仿真平台通过ARINC429总线完成二者之间的通讯。EFIS负责显示飞艇飞行过程中的各种信息参数。
2 ARINCA29
ARINCA29总线是广泛应用在航空电子系统中的一种通讯总线。它采用差分的工作方式,其结构简单、可靠性高和抗干扰性强,被广泛应用于飞机航电设备数据传输和控制命令传输。ARINC429传输字的格式如图2所示。
图2 ARINC429传输字的格式
ARINC429传输字格式主要由奇偶校验位(Odd)、符号/状态位(SSM)、数据区域(Data)、源/目标标识(SDI)和标号位(Label)组成。在通讯过程中,发送顺序依次为标号位、源/目标标识、数据区域、符号/状态位和奇偶校验位,其中标号位发送顺序为由高到低(8-1),而传输字的发送顺序都是由低到高(9-32)。当接收方接收到429传输字时,需要将Label位的进行逆序处理。
3 关键技术
3.1 飞艇仿真系统部分
xPC是基于RTW(Real-Time Workshop)的实时仿真和开发平台,其采用“双机”模式实现产品原型开发和系统的测试。宿主机运行simulink完成仿真系统模型开发,通过网线将模型加载到目标机上;目标机启动时加载实时内核,该实时内核保证仿真系统高效的运行[2]。
xPC目标机支持ISA总线和PCI总线的I/O设备,飞艇仿真模块采用PCI总线的ARINC429通讯卡。xPC 驱动程序文件即为由C语言编写函数组成的S-functions文件,主要由初始化模块、执行模块和结束模块组成,如图3所示。
图3 xPC 目标驱动程序组成
初始化模块包括由mdlInitializeSizes函数,mdlInitializeSampleTimes函数和mdlStart函数组成,mdlInitializeSizes函数和mdlInitializeSampleTimes函数主要负责输入输出参数初始化、状态量初始化和系统采样时间的初始化,mdlStart函数负责I/O设备初始化;执行部分根据仿真模型,完成相应的任务,执行部分功能集中在mdlOutputs 函数,该函数在负责PCI设备的读写操作;结束模块功能函数为mdlTerminate,在运行结束后,负责释放相关资源,使I/O设备安全退出。
xPC Target启动时,PCI总线驱动被加载,BIOS扫描挂接在PCI总线上的I/O设备,并为PCI设备分配合理的I/O空间地址、物理地址和中断号等资源,无需用户在驱动程序中为PCI设备申请相关的资源,驱动程序通过厂商标识(Vendor_ID)和设备标识(Device_ID)来获取PCI设备的配置空间信息,代码如下:
rl32eGetPCIInfo(Vendor_ID,Device_ID,&pciinfo);
pciinfo 是一个结构体变量,结构如下:
{
unsigned long BaseAddress[6];
unsigned short AddressSpaceIndicator[6];
…
unsigned short InterruptLine;
}
BIOS为每个PCI设备提供了6个基址,其中有部分基址是无效的,通过rl32eShowPCIInfo函数确定有效基址。PCI设备映射分为I/O映射和内存映射,驱动程序可以通过pciinfo中的AddressSpaceIndicator属性值来确定PCI映射类型。若PCI设备为内存映射,AddressSpaceIndicator属性值0;若PCI设备为I/O映射AddressSpaceIndicator属性值1。ARINC 429通讯卡为内存映射,pciinfo结构中的基址BaseAddress必需通过函数rl32eGetDevicePtr 转化成虚拟地址,然后用C语言的指针访问相应的虚拟地址,代码如下:
bar2Base = (char *)rl32eGetDevicePtr((char*)(pciinfo.BaseAddress[2]),
4096,RT_PG_USERREADWRITE);
*(bar2Base)= 0x12;
编译器往往会优化内存,将内存变量缓存到寄存器。当驱动程序进行写操作,volatile关键词提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量有别的程序更新了的话,将出现不一致的现象,该驱动将寄存器地址值都用volatile关键词进行修饰,以此避免寄存器内值不能及时更新的问题。
typedef struct
{
volatile uint32_T * txFifo_0; //pci429 发送通道fifo
…
volatile uint16_T * bps_sel; //dei1016波特率控制
volatile uint8_T * recEn; //8路接收使能
}Regs_429;
3.2 飞控计算机系统部分
飞控计算机处理器板与ARINC429有关的硬件如图4所示。
图4 飞控计算机处理器板示意图
桥接芯片是为PowerPC专门设计的桥芯片/存储器控制器,主要实现PowerPC到PCI的桥接功能,同时管理内存VxWorks是WindRiver公司推出的一个高效的嵌入式实时操作系统,内核可根据实际需求进行裁减,拥有良好的可靠行和卓越的实时性。由于在不同CPU架构上提供了统一的接口和相同的运行特性,VxWork的应用程序可以在不同的硬件上进行移植,被广泛地应用在通信、军事、航空、航天等领域中[3-4]。
WindRiver公司从VxWork6.X开始引入VxBus驱动模型,该模型定义了一些标准的接口来操作系统和硬件设备,VxBus驱动模型涉及设备、驱动和实例。每一个驱动可以与多个设备关联,但是每个实例只能对应其中的一种关联[5],VxBus驱动实例模型如图5所示。
VxBus架构下arinc429通讯卡的初始化主要包括硬件查找阶段、驱动注册阶段、驱动初始化阶段1、驱动初始化阶段2和驱动初始化阶段3五个部分。在硬件查找阶段,vxworks系统调用sysHwInit函数激活设备,在sysHwInit函数中,通过调用hardWarelnterFaceInit函数和hardWareInterFaceBusInit函数来初始化和激活arinc429通讯卡。在hardWareInterFaceBusInit函数,通过调用vxbDevRegister函数来完成arinc429通讯卡驱动的注册。
图5 Vxbus驱动实例模型
驱动程序注册主要包括vxbDevRegInfo结构体初始化和调用vxbDevRegister函数两部分,vxbDevRegInfo结构体提供了驱动注册所需的相关信息,初始化代码如下:
LOCAL struct vxbDevRegInfo pci429DevRegistration =
{
…
VXB_DEVID_DEVICE, /* devID */
VXB_BUSID_PCI, /* busID = PLB */
" arinc429", /* drvName */
&pci429Funcs, /* pDrvBusFuncs */
pci429DriverCtrl, /* pMethods*/
…
};
驱动初始化3个阶段主要完成内存空间、I/O空间和中断等资源的申请以及实例的建立,使上层应用程序可以正常使用驱动程序。在pci429DevRegistration结构中pci429Funcs提供了设备驱动初始化3个阶段的入口地址,定义如下:
LOCAL struct drvBusFuncs pci429Funcs =
{
pci429InstInit, /* devInstanceInit */
pci429InstInit2, /* devInstanceInit2 */
pci429InstConnect /* devConnect */
};
在pci429InstInit2函数中主要负责获取硬件设备相关的资源,vxbRegMap函数进行板卡基地址映射,从而调用相关的读写函数对设备卡进行操作。
代码如下:
LOCAL void wrsampleInstInit2(VXB_DEVICE_ID pInst )
{
…
VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_VENDOR_ID, 2, &venId);
VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_DEVICE_ID, 2, &devId);
/* find the memory mapped window for the device registers */
for (i = 0; i < VXB_MAXBARS; i++)
{
if (pInst->regBaseFlags[i] == VXB_REG_MEM)
break;
}
pDrvCtrl->pci429Bar = pInst->pRegBase[i]; /* store the base address */
vxbRegMap (pInst, i, &pDrvCtrl->pci429Handle); /* map the window */
…
}
在pci429InstConnect函数中完成硬件启动时相关资源的配置,包括中断部分、发送部分部分、接收部分以及状态命令字段。
4 试验结果与分析
EFIS实时准确的更新飞艇模型发送的飞行状态信息,并且飞艇模型随着飞控计算机操作命令的不同,实时准确的变换着飞行姿态。实验证明,ARINC429通讯卡驱动程序保证了飞艇仿真系统稳定、可靠和实时性的通信。
5 结论
飞艇仿真系统模型计算机和飞控计算机分别采用xpc系统和vxworks系统,ARINC429驱动程序保证仿真系统在不同操作系统之间的实时通信,同时ARINC429驱动程序为上层应用程序访问ARINC429通信卡提供基础。
[1] 王 蒙.基于嵌入式系统的SpaceWire总线驱动技术研究[J].计算机测量与控制,2014,22 (2):483-485.
[2] 宋 炜,祖家奎.基于x P C 目标的实时I/O接口技术研究[J].计算机应用,2008,27(1):62-65.
[3] 李 焱.VxWorks下82C55A并口驱动系统设计及测试[J].计算机测量与控制,2010,18 (2):261-263.
[4] 曹桂平.Vxworks设备驱动开发详解[M].北京:电子工业出版社,2011.
[5] Wind River System Inc.. VxWorks programmer’s guide[Z]. Wind River System Inc.,1999.
Design and Implementation of a ARINC429 Driver for Semi- physical Simulation System
Li Guanlin1,Qiao Jinlong1,2
(1.China Special Vehicle Research Institute,Jingmen 448035,China;2.Key Aviation Scientific and Technological Laboratory of High-Speed Hydrodynamic, Jingmen 448035,China)
In order to meet the demand of communication reliability and real-time for airship in actual flight process, the airship model computer of semi-physical simulation system uses an embedded real-time system Xpc which uses PC as a platform, flight control computer uses an embedded real-time system VxWork which uses PowerPC as a platform,through the ARINC429 protocol for data communications.In hardware, PowerPC accesses and controls PCI devices through the bridge chip; in software, in accordance with written procedures of PCI device drivers in Xpc system and vxWork system,it analyzed the key technical points of the xPC memory drive frame and the vxBus drive frame, designed the communication card driver ARINC429 of airship computer model Xpc and flight control computer Vxwork. Through practical application, it confirmed the development of the ARINC429 driver meet the reliability and real-time of data communications for airship semi-physical simulation platform.
semi-physical simulation system; embedded real-time system; ARINC429 protocol; drivers
2015-09-15;
2015-11-04。
李冠林(1987-),男,山西朔州人,硕士研究生,工程师,主要从事嵌入式方向的研究。
1671-4598(2016)09-0176-02
10.16526/j.cnki.11-4762/tp.2016.09.049
TP3
A