基于ARM7的MVB_CAN网关设计
扫描二维码
随时随地手机看文章
摘要:介绍了用于机车内部数据通讯的MVB网络和CAN总线网络的报文结构,给出了MVB-CAN总线网关的硬件和软件实现方法。
关键词:MVB;CAN;MVB-CAN网关
0 引言
随着网络技术和控制技术的发展,机车信息化控制技术向着更高的方向发展。为此,IEC制定出新的列车通信网路国际标准TCN(机车通信
网络),以满足列车微机控制系统中对车载数据通信网提出的新要求。
按照TCN标准,列车通信网可分为两级:第一级是WTB绞线式列车总线(Wired Train Bus),可实现车辆间的数据通信;第二级是MVB(Mul-
tifunction Vehicle bus)多功能车辆总线,主要实现同一个车辆内各个功能控制单元之间的数据通信。
多功能车辆总线(MVB)是主要用于有互操作性和互换性要求的互连设备之间进行串行数据通信的一种总线,MVB以其高实时性、高可靠性及可管理性等多方面的优势而广泛的应用在列车总线控制当中。
控制器局部网(CAN-CONTROLLER AREANETWORK)是BOSCH公司为现代汽车应用推出的一种多主机局部网。由于该网的卓越性能,现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多领域。
对于现在的机车总线通信,MVB总线主要应用在单台机车内的车载设备间的通讯,而CAN总线则用于车载设备内部模块间的数据通讯。因
此,实现CAN总线与MVB总线之间的通信就成为工程实践中一个必须解决的问题。
1 报文
1.1 CAN报文
CAN报文主要包括数据帧、远程帧、出错帧、超载帧等四种帧。
在总线中传送的报文,每帧一般由7部分组成。CAN协议支持两种报文格式,它们之间唯一的不同是标识符(ID)长度不同。它们的标准格
式为11位,扩展格式为29位。
在标准格式中,报文的起始位通常也称为帧起始(SOF),之后,一般是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位用于标明是数据帧还是请求帧,请求帧中没有数据字节。控制场的包括的标识符扩展位(IDE)用于指出是标准格式还是扩展格式。此外,它还包括一个保留位,以便为将来扩展使用。它的最后四个字节用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。CAN的标准帧格式如图1所示。
应答场通常(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时,正确接收报文的接收站会发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。报文的尾部应由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,则总线将处于空闲状态。
1.2 MVB报文
MVB报文主要包括两种帧:主帧和从帧。其中主帧只能由总线主设备发送,而从帧则为响应主帧而由从设备发送。
主帧应传送16位数据字,发送的数据字的第一位应为它的最高有效位,用bit0来表示,其内容为16位字中的最高前四位,应为FCODE。次有效的后12位用于表示Focde所指定的地址或参数。因此,主帧有固定的格式,为34 bit(9 bit主帧分界符+16 bit数据位+8 bit校验位+1bit终止分界符)。一个主帧应以主起始分界符开始,其后为16位帧数据,接着为8位校验序列。MVB的主帧格式如图2所示。
一个从帧应以从帧起始分界符开始,接着为16、32、64、128或256位帧数据,在每64个数据位后还包含一个8位的校验序列或当帧数据只有16或32位时将一个8位的校验序列附在其后,其MVB的从帧格式如图3所示。
2 CAN总线与MVB总线协议转换
CAN总线和MVB总线都属于现场总线范畴,因此,它们都有自己的网络分层结构。对于大多数现场总线,它们都包括物理层,数据链路层和应用层。
MVB有过程数据和消息数据之分。基于过程数据的网络分层是三层(物理层、数据链路层、应用层),而基于消息数据的网络分层则有7层。由于消息数据比较复杂且应用场合较少,因此,本文只讨论过程数据。但实际上,有时也可以将MVB视为一个三层协议的网络。
CAN网络分层结构按照CAN总线协议来说,就只有两层即物理层和数据链路层。但是涉及到具体的应用,它实际上也包括应用层。
为了实现两种总线问的协议转换,通常需要首先对他们的帧格式进行转换,其主要原因是帧字节数大小不同,而帧的编码解码部分是由网卡硬件完成的;其次是对应用层的转换,即通过一定的形式将CAN总线中表示过11位标志符的数据含义和MVB总线中过程变量的数据集对应起来,以实现数据之间的传输。
3 MVB-CAN网关的硬件实现
为了设计方便,本设计的CAN侧采用三星公司生产的S3C4480微控制器,MVB侧则采用MVBC01 ASIC专用芯片。
MVB通信控制器选用的MVBC01 ASIC专用芯片采用的是16 bit数据总线,该芯片同时可提供丰富的接口控制信号(如RDY、TMRDY等待信号),因此,可用于简化与各种宿主CPU以及通信存储器的接口设计。此外,MVBC01还内嵌有完整的MVB1类设备协议,其中,MVB物理层接口采用电气短距离介质ESD+接口,系统信号通道则使用光耦来实现主系统与外界的电隔离,从而提高了系统的可靠性。另外,系统还使用RS 485芯片作为收发器,并使用过压保护模块来防止瞬间过压对器件造成的损坏。MVB侧的接口单元如图4所示。
MVBC01端口ICA (MVB Input Data ChannelA)和ICB(MVB Input Data Channel B)分别为MVB输入数据通道A和输入数据通道B,来自物理层收发器的MVB信号可由此端口送入MVBC01中。MVBC01的端口OC (MVB Output Data Channel)是MVB的数据输出端口,数据经此端口可发送至物理层收发器。MVBC端口SF(Send Frame)的输出信号可作为物理层的使能信号,该信号有效时,表示一个报文正在通过MVBC端口OC(MVB Output Data Channel)输出。
本系统CAN侧采用的是三星公司生产的S3C44BOX微控制器,S3C44BOX是韩国三星公司推出的一款基于ARM7TDMI核的16/32位RISC高性价比、低功耗的嵌入式微处理器。该芯片的片上资源非常丰富,因为它本身带有可满足CAN2.0B协议的CAN控制器,故可省去CAN控制器和单片机之间的硬件连接。
CAN收发器采用PHILIPS公司的PCA82C250。主要提供对总线的差动发送能力和对CAN控制器的差动接收能力。当微处理器对CAN控制器进行
相应配置后,收发器即可自动完成相应的CAN总线动作。
MVBC01的引脚除在MVBC01复位时作为复位完成信号外,还可作为MVBC01接收到网络数据时的通知信号。它的状态通过s3c44b0x的传送给S3C44BOX。S3C44BOX轮询检测,若检测到跳变发生且MVBC01判断此信号为网络控制数据接收事件,则通过I2C接口读取MVBC01的数据。MVBC01的复位可通过微控制器的PA0端口触发。当MVBC01复位完成后,再通过/INT通知微控制器。MVBC01的控制口配置成串行方式的I2C接口,S3C44BOX通过该接口对MVBC01的寄存器进行初始化和其它控制操作。其网关硬件连接图如图5所示。
4 软件实现
由于MVB-CAN网关两侧连接的是两个现场总线,因此,它们实际的工作就是通过对信息的重新封装以使MVB总线和CAN总线能够读取和传
输。
由于CAN数据帧包含8个字节的数据,而MVB从帧最多包含256个字节的数据,因此,从CAN侧接收到的数据要通过MVB传输,就需要按照一定的格式把CAN帧中的数据组合成MVB帧的数据格式;同样,从MVB侧接收到的数据要通过CAN传输,也需要按照一定的格式对MVB帧中的数据进行分帧处理。另外,为了实现透明传输,还需要把MVB侧的过程数据的数据集与CAN侧11位标志符对应起来。
本文采用的方案是建立一种规范的方式来定义MVB端的MVB各种变量的含义,如所在端的端口地址、长度、以及变量在数据集中的偏移量
等。而后再将这些信息按照一定的规则和CAN总线侧的帧的标识符等信息对应成一个表格,这样,在CAN侧的数据接收就可以借助这个表格来
完成。这样做的优点在于把一些必要的信息(位偏移、长度等)按照约定的形式来实现共享,因而不再需要在数据集中分出空间来传输一些(包
括长度和偏移等)信息。本文把表格定义为应用层转换表(inbus-to-outbus或者out-to-inhus)。这里的端口指的是一种既可以被总线访问,又可以被应用处理器访问的存储器,它在MVB中是用来寻址的,数据的发送是通过应用将数据放入端口,数据的接收则是从端口中取数据放到应用中去。至于端口与端口间的数据拷贝,则是通过主轮询方式来实现的。当主节点轮询到需要发送数据的端口(源端口)时,便会产生从源端口到宿端口(数据接收端口)的数据拷贝。数据集在MVB中其实就是一般的纯数据,之所以称它为集,主要是因为MVB中一帧的数据较长,通常我们把多个变量的信息放在一个集中(一个帧中1来传输,这样做较为经济。
本系统的软件模块主要有CAN模块、MVB控制模块、总任务处理模块、以及数据缓冲模块。其中CAN控制模块主要负责从CAN数据包中解析
出完整的CAN协议报文,并存入数据缓冲区2,同时将数据缓冲区A中的CAN数据封装成完整的CAN协议报文后发送到CAN总线上;MVB控制模块主要负责从MVB数据包中解析出完整的MVB协议报文,并将其存人数据缓冲区1,同时再将数据缓冲NB中的MVB数据封装成完整的MVB协议报文后发送到MVB上;总任务处理模块主要起综合调度和监控作用,同时,它还用于整个传输过程中的中断响应;缓冲区模块主要负责将CAN侧和MVB侧接收的数据存储到缓冲区中。
网关程序的整体设计思路是当CAN侧数据发往MVB侧时,首先使CAN侧检测到有数据传过来,总处理模块通过调用CAN模块处理函数来接收数据,并通过对CAN帧的解码来获取CAN标志符,然后调用应用层转换表(inbus-to-outbus)以查询出相应的MVB端口的相关变量,接着再把相
应的数据发送到数据缓冲区2中,最后由总任务处理模块通知MVB控制模块将缓冲区2中数据取走,并对数据进行MVB帧格式的编码,再发送到
MVB总线上后释放缓冲区。
同样,当MVB侧数据发往CAN侧时,首先将数据发送到MVB上,然后由总任务处理模块检测MVB上是否有数据传输,并通知MVB控制模块接收数据,同时对信息进行解码分析,从中获取端口相关变量,依据端口相关变量查询应用层转换表(out-to-inbus),找出对应CAN标识符,同时将数据发送到数据缓冲区1。此时,总任务处理模块可通过CAN控制模块从缓冲区1中提取数据并进行完整的CAN报文封装,再发送到CAN总线上并释放缓冲区A。其中,MVB侧发往CAN侧的主程序流程如图6所示。
5 结束语
本文主要介绍了MVB-CAN网关的硬件和软件实现方法。其中,应用层协议的转换是整个网关的主要工作所在,所以,设计时必须建立尽量完善的关系对应列表,同时应提供友好的用户接口函数。
通过MVB-CAN网关的设计可以实现机车内车载设备间不同接口单元之间的通讯,从而为列车通信网络的多元化发展提供有力的支持。