《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > MVB总线故障注入方法研究与实现
MVB总线故障注入方法研究与实现
2016年电子技术应用第8期
仲康正,徐惠勇
中国地质大学(北京) 信息工程学院,北京100083
摘要: 为满足列车通信网络(TCN)中多功能车辆总线(MVB)设备的测试验证要求,基于一般总线测试方法,结合MVB总线协议特点,提出一种基于故障注入技术的测试方法。通过对板卡寄存器的定义与配置,开发了基于VS平台的MVB故障注入设备驱动程序,从电气层、物理层、协议层三方面,详细给出了MVB总线故障注入方法和部分驱动程序。通过Wireshark抓取报文的方式,验证了故障注入的准确性,证明了此方法的可行性和正确性。
中图分类号: TP336
文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.08.017
中文引用格式: 仲康正,徐惠勇. MVB总线故障注入方法研究与实现[J].电子技术应用,2016,42(8):74-76,83.
英文引用格式: Zhong Kangzheng,Xu Huiyong. Research and implementation of MVB bus fault injection method[J].Application of Electronic Technique,2016,42(8):74-76,83.
Research and implementation of MVB bus fault injection method
Zhong Kangzheng,Xu Huiyong
Department of Information Engineering,China University of Geoscience(Beijing),Beijing 100083,China
Abstract: To meet the test and validate requirements of multifunction vehicle bus devices in train communication network, based on the test method of general bus and combining with the characteristics of the MVB bus protocol, this paper presents a test method based on fault injection technique. By means of the definition and configuration of the card registers, Multifunction vehicle bus fault injection device driver, based on VS platform, was developmented. MVB bus fault injection method and part of the driver are given in detail,in terms of physical, electrical, and protocol . Through the way of Wireshark graping messages to verify accuracy of fault injection, and prove the feasibility and correctness of this method.
Key words : multifunction vehicle bus;fault injection;registers

0 引言

  多功能车辆总线(Multifunction Vehicle Bus,MVB)是针对车辆环境下,车辆内部功能设备数据通信的现场总线,是列车通信网络系统(Train Communication Network,TCN)的核心部分之一。随着微电子技术和分布式现场总线技术的发展,MVB的应用日益广泛,此类列车可通过网络实现对车载设备的集散式监控和管理,逐步实现了列车控制系统的智能化、网络化与信息化[1]。

  MVB介质访问控制的优点在于,它将总线上的时间分为固定大小的基本周期,每个基本周期又由周期相和偶发相组成,这样既可传送对时间有确切要求的数据,同时也可以处理偶发紧急数据[2]。为了保证总线系统的高可靠性,总线测试必不可少,然而由于国外对MVB技术的垄断,国内尚没有统一高效的测试方案。本文基于故障注入技术,提出了一种总线测试方案,并通过软件注入的方式,进行试验验证。

1 故障注入技术

  故障注入是进行产品测试性实验的重要技术手段,在产品检测中,通过故障注入可以验证被测产品的机内测试、外部测试的诊断能力[3]。与传统的测评方法相比,故障注入技术具有应用范围广、结果精确度高、节省时间等优点[4]。特别是在有关国防安全的航空航天系统中,最为关键的系统都采用高可靠性的容错计算机系统。在过去近20年中,故障注入的研究对容错系统的设计和应用起到了重要作用[5]。

  故障注入主要分为硬件注入和软件注入两种。与硬件注入相比,软件故障注入具有易于控制、成本低、方便灵活等优点,逐渐成为故障注入技术的发展方向和研究热点。

2 故障注入方法

  本文通过挂接在总线系统中的故障注入设备,在不改变设备激励以及被测信号的前提下,从MVB故障注入板卡底层寄存器、内存开始,通过软件实现对板卡内寄存器、存储器值的修改,模拟输入信号的故障情况,从而实现相应的故障注入。故障注入过程中,利用分析软件Wireshark抓取以太网报文,检测设备的故障注入情况,从而验证系统的容错性能。

  MVB故障注入设备包含核心板寄存器配置和2个MVB通信节点寄存器配置,寄存器地址共32 bit,由8 bit保留位(R)、3 bit板卡地址CardAddr、5 bit通道地址port_

  num和16 bit偏移地址OffsetAddr组成,寄存器地址=R+CardAddr+port_num+OffsetAddr。

  在故障注入时,考虑到系统的合理性及高效性,将MVB板卡内寄存器定义为核心板全局配置寄存器、子版全局配置寄存器、通道级寄存器3种类型。结合其他总线的相关经验和理论,将MVB总线的故障概括为3个层面:电气层、物理层与协议层。

  2.1 电气层

  电气层故障配置项包括断路故障、短路故障、串行、并行阻抗等,FPGA接收软件的指令,处理采样所得的信号,控制继电器矩阵和电阻网路,以实现对应故障注入。以断路故障项为例说明。断路故障Memory偏移地址为0x0200,port_number为0x00,故障参数bit位说明见表1。

图像 005.png

  根据表1中内容,在程序中定义断路故障参数结构体和对应的位域结构体。断路故障寄存器位域结构体如下:

  typedef struct _reg_cut_fault

  {

  int periodValue :15

  int periodCut :1;

  int cutTime :14;

  int negLineCut :1;

  int posiLineCut :1;

  }TY_REG_CUT_FAULT_CONF;

  typedef union

  {

  TY_CUT_FAULT_CONF stCutConf;

  int cutConfValue;

  }TY_CUT_FAULT_UNION

  2.2 物理层

  物理层故障配置项包括幅值调节故障项配置、占空比调节、总线延时故障等8项。幅值故障寄存器偏移地址为0x0218,portnumber为0x00。故障配置参数见表2。

图像 006.png

  根据表中内容定义类似电气层的结构体,在驱动开发时以实现相关故障参数的配置及赋值实现。

  2.3 协议层

  协议层故障项参数配置包括2个内容:匹配策略信息Memory、故障策略信息Memory。MVB总线传输数据帧的两种类型具有不同的帧结构和帧标识符。协议层故障由客户端根据需要选择主帧还是从帧故障相关参数配置。

  匹配策略信息配置参数主从帧一致,位域结构体只需要区分结构体名称即可。0位对应Fcode_mask,当值为1时,对功能码进行匹配,匹配对象为Fcode_data(31-28 bit);1位为Addr_mask,当值为1时,对地址进行匹配,匹配对象为Addr_data(27-16 bit)。可根据Addr_mask_x(x为0-11,占据2-13 bit)选择需要匹配的地址bit位。

  故障策略匹配信息Memory大小为:位宽32 bit,深度128。160个32 bit深度的数据共分为32组,每组5个32 bit的数据,对应32组故障策略,包括功能码、校验码、位反转、位毛刺等故障参数配置。

3 故障注入的实现

  鉴于Windows系统的高普及性,本文根据定义的MVB故障注入设备寄存器说明,基于VS2010开发环境,利用C语言开发故障注入驱动。利用Wireshark抓取以太网报文的方式验证API的正确性,然后通过故障注入软件调用检验后的API,完成对设备的故障注入。

  3.1 Wireshark

  Wireshark是一个网络封包分析软件,其功能是撷取网络分包,并尽可能显示最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

  3.2 以太网报文

  UDP报文中,源端口、目的端口、UDP长度、校验和大小为2B,用户数据根据具体操作与信息,占据若干字节,包括4B的消息包头、4B的地址、若干字节(4B整数倍)的具体数据。

  发送时,将消息总线数据组合成以太网报文,总线数据以4 B为单位,先发送最低字节,再发送次低字节,最后发送高字节。消息总线数据格式为:

  消息包头(Type+Opcode+R+DataLEN)

  地址域(R+cardaddr+portnum+OffsetAddr)

  数据域(one or more 32 bits)

  Type为固定值0x1D,占6 bit;Opcode为操作码,占6 bit,表示信息类型,对应读、写寄存器(Memory);R为保留位,占7 bit,DataLen为数据长度,包括信息包头,占13 bit。

  3.3 Memory操作格式

  与消息总线数据格式一致,写Memory包括n×4B的数据内容。第一行4B数据为消息包头,Type为固定值0x1D,Opcode为固定值0x0C,加上7 bit保留位和13 bit的DataLen;第二行为地址域R+cardaddr+port_num+OffsetAddr;第三行开始为32 bit整数倍的数据域,数据域长度与DataLen大小对应。

  3.4 故障注入驱动

  为方便对各项故障的选择性注入,利用选择结构编写驱动程序。为了规范化测试步骤,在故障注入开始前,先进行扫描,确认在线设备数量及地址端口,然后利用驱动打开设备,开始相关故障注入。在整体的测试流程中,需要包括打开、关闭、复位、暂停等一系列操作。

  物理层故障注入部分代码如下:

  int devPhysicalInjConf( TY_DEV_HANDLE *pHandle,

  int32 chnId, TY_PHYSICAL_FAULT_STRUCT phyFaultConfig)

  {

  ……

  if((phyFaultConfig.faultEn.cutFaultInjEn & 0x01))

  //若故障使能,对各参数赋值;

  {

  cutConf.stCutConf.periodValue=

  phyFaultConfig.cutConf.periodValue;

  cutConf.stCutConf.periodCut=phyFaultConfig.cutConf.periodCut;

  ……

  cutConf.stCutConf.posiLineCut=

  phyFaultConfig.cutConf.posiLineCut;

  tmpConfig[0] = tmpPhyFaultConf.cutConf.cutConfValue;

  ret=SetCutConfig(pHandle,chnId,tmpConfig,

  MEM_CONST_LEN);

  if(ret != RET_OK)

  {

  return RET_ERROR_CUT;

  }

  }

  }

  断路故障功能实现部分代码如下:

  int SetCutConfig(TY_DEV_HANDLE *pHandle, int chn,

  unsigned int *data,

  unsigned int dataLen)

  {

  int ret = 0;

  TY_ADDR_UNION tmpInjAddr;

  ret=getAddr(chn,LOCALREG, &tmpInjAddr);

  //获取寄存器地址;

  ……

  ret=writeMEM(pHandle, tmpInjAddr.addr, data,

  dataLen);//配置下发;

  return ret;

  }

  3.5 实验结果与分析

  驱动编译完成后,通过以太网连接设备运行编写的Demo程序,调用相关API,实现故障注入。本文以断路、幅值故障注入情况为例,结合以太网报文,验证驱动准确性。

  Demo调用断路故障设置函数,通过对断路故障项配置定义的结构体内参数赋值,实现对设备的断路故障注入。对断路时间赋值2(其他默认值为0)时的报文如图1。

图像 003.png

  从第三行14 00 c0 74 开始为用户配置数据段。翻译为:

  74 c0 00 14:对应写memory 操作,DataLen为5B。

  00 40 02 00:对应32 bit地址域,8 bit保留位,3 bit卡位号,5 bit通道号,16 bit偏移地址(0x0200)

  00 02 00 00:对应32 bit断路故障寄存器位,报文显示与驱动赋值结果一致。

  00 00 00 00 :空数据字节

  00 00 00 00 :空数据字节

  幅值故障注入参数赋值,vppEn=1,vppValue=3.4,得以太网报文如图2。

图像 004.png

  数据翻译如下:

  74 c0 00 14:对应写memory 操作,DataL为5 B。

  00 40 02 18:对应32 bit地址域,8 bit保留位,3 bit卡位号,5 bit通道号,16 bit偏移地址(0x0218)

  00 00 80 02:对应32 bit幅值故障Memory位,报文显示与驱动赋值结果一致。

  00 00 00 00 :空数据字节

  00 00 00 00 :空数据字节

  与断路、幅值故障项类似,分别对电气层、物理层和协议层各故障寄存器位赋值,用Wireshark抓取报文验证。实验中,报文显示结果均与驱动注入值相匹配,验证了驱动对设备故障注入的有效性、可控性。

4 结束语

  随着我国高铁技术的不断进步发展,MVB总线技术在国内的应用将逐步扩大。本文结合MVB总线协议特点和通信方式,探讨适用于MVB总线设备的故障注入方法,并开发出相应的故障注入驱动,弥补了MVB总线故障注入手段的不足。

  故障注入驱动对各类设备的高度兼容性、适应性是故障注入技术的发展方向。本文提出的测试方法,可适用于大部分MVB总线设备,且与其他总线设备也具有共通性。如何利用此扩展性,开发出适用于各类总线设备测试的故障注入驱动,值得深入研究。

  参考文献

  [1] 杨昌休.多功能车辆总线MVB关键技术的研究[D].成都:西南交通大学,2012.

  [2] 宋娟,王立德,严翔,等.MVB协议分析装置设计及其实时性分析[J].铁道学报,2011(11):41-45.

  [3] 石君友,李郑,骆明珠,等.故障注入控制软件的设计与实现[J].测控技术,2008(4):65-67,70.

  [4] 李志宇,黄考利,连光耀.基于测试性设计的软件故障注入研究综述[J].计算机测量与控制,2013(5):1112-1114,1117. 

  [5] 孙天竹,吴小兵.采用故障注入技术提高系统可靠性[J].信息技术,2004(6):85-86.

  


此内容为AET网站原创,未经授权禁止转载。