铁路信号系统中以太网转CAN网关设计

2012-05-08 04:46
铁路通信信号工程技术 2012年5期
关键词:扇区驱动程序寄存器

刘 贞

(北京全路通信信号研究设计院有限公司,北京 100073)

1 概述

近年来,以太网作为一种高效、便捷的通信方式逐渐应用于铁路信号设备通信领域。通过架设封闭物理网络并配合安全通信协议,可以构建相对安全的数据通信网络。

铁路信号系统设备复杂多样,涉及不同厂家、不同历史年代的产品,故数据通信总线接口种类繁多,如CAN总线、RS-485/422总线、profibus总线等。当不同总线类的设备需要互联互通时,就需要总线接口转换装置,一般称之为接口适配器或网关[1]。本文介绍一种基于嵌入式系统的以太网转CAN总线设计方案,尽管目前此类设备较多且早已上市,但直接应用信号系统还有诸多不足,主要原因可归结为以下几类[2]。

1)通信参数配置繁琐,不便于工程施工。

2)没有监测功能,系统无法获知其实时工作状态,无法记录上下行原始数据,不便于故障分析处理。

3)通信端口不具备防雷功能,远距离连接时需要加额外的防雷保护器。

因此,有必要开发一种面向信号系统应用的以太网转CAN设备,克服上述缺点。

2 系统硬件架构设计

以太网转CAN网关属于数据转发类设备,安全等级要求为SIL0级,即非安全类设备,需要在设计时重点考虑其数据转发效率和施工便捷性,但安全性也不容忽视。

2.1 嵌入式硬件系统设计

系统采用单CPU架构,处理器选用AMCC公司的P o w e r P C405E P,其运算速度达到608 DMIPS,足以保证双向数据转发的运算要求[3]。如图1所示,网关包含3路独立CAN通信接口和2路独立以太网接口,另外还提供CF卡接口通道,方便更新应用程序和网络通信配置数据。

2.2 以太网接口电路模块

PPC405EP片内集成了EMAC/MDIO模块,直接外扩Intel LXT971 PHY芯片,即可快速地实现OSI模型中数据链路层和物理层的功能。LXT971是快速以太网物理层自适应收发器,支持IEEE 802.3标准,提供MII接口,能够与PPC405EP中的EMAC/MDIO模块无缝连接。支持10/100 Mbit/s全双工数据传输。

2.3 CAN总线接口电路模块

CAN总线接口芯片采用PHILIPS公司的SJA1000,该芯片具有64 Byte先进先出FIFO,支持CAN2.0B协议,位速率可达1Mbit/s。由于其总线为数据、地址复用模式,需要单独的ALE信号,而PowerPC405EP的外部总线为数据、地址分离的Motorola模式,故要采用一些中间转换环节以使两种总线相互匹配。

如图2所示,利用CPU的R/W、A27和CS3控制信号的逻辑组合可以产生ALE信号,A27为低电平时ALE端可产生高电平锁存地址信号。SJA1000的TX和RX信号经过光电隔离后,由TJA1050T转换为符合CAN电气标准的差分信号[4]。

3 系统软件设计

3.1 SJA1000驱动程序

3.1.1 驱动程序层次结构

以太网转CAN网关采用嵌入式Linux操作系统,SJA1000作为非常规新增外设,需要撰写新的设备驱动程序供OS系统内核调用。

如图3所示,网关应用程序运行在OS最顶层;设备驱动程序运行在OS最底层,可直接操作外设芯片SJA1000的内部寄存器。设备驱动程序向OS内核注册成功后,应用程序通过open、read和write操作指令调用设备驱动程序,最终实现对SJA1000的寄存器级操作,完成CAN通信功能。

3.1.2 SJA1000驱动程序软件工作流程

在本系统中将SJA1000定义为字符型设备,其驱动流程主要有以下步骤。

1)设备注册及初始化。

2)接收应用程序需要发送的CAN数据帧,并传送至CAN控制器SJA1000。

3)响应CAN总线接收中断,读取CAN接收数据帧并通知应用程序。

4)CAN控制器出错处理。

驱动程序将上述功能封装在open、close、write、ioctl等函数中以便应用程序调用,运行流程如图4所示。Linux操作系统上电之后开始启动应用程序,在其调用open()函数时,执行SJA1000的初始化工作,诸如设定波特率、验收滤波器、输出方式等相关参数。而ioctl()函数则负责向系统注册CAN接收中断处理服务函数。

当CAN控制器接收到来自其他设备的数据帧时,SJA1000的中断引脚会输出低电平向PPC申请接收中断,内核的中断处理程序会将接收数据读出并写入接收缓存,同时通知应用程序,由其通过read()函数将缓存读出。

CAN数据发送采用主动模式,由应用程序调用write()函数将数据直接写入SJA1000发送缓冲寄存器,通过查询状态寄存器以确认该帧是否成功发送。

另外,由于应用场所不同,总线所处电磁环境及干扰水平也会有差异,总线由于受干扰而产生错误不可避免,驱动程序中会有专门的错误中断处理程序,在CAN控制器报告总线错误时及时处理,故障严重时要立即复位总线。

3.2 CF卡驱动程序

3.2.1 CF卡总线地址分配

CF卡通过CPLD译码,直接挂接在PowerPC的EBC总线,工作在Memory模式,占用片选CS4。CF卡内部的8个控制寄存器通过CPU地址线A31~A29、OE及WBE0组合译码后进行读写访问。CPU访问CF卡控制寄存器的基地址为0xF0500000,详细地址分配如表1所示。

表1 CPU访问CF卡控制寄存器地址分配列表

3.2.2 CF卡读写操作

CF卡内部数据以扇区为单元进行存储,每个扇区为512 Byte,对其读写操作必须以扇区为单位。CF卡内部集成ATA控制器,对外提供8个功能寄存器,CPU对内部扇区的访问都要通过读写上述功能寄存器。

如图5所示,写一个扇区的流程如下。

1)寄存器写入扇区地址。

2)向命令寄存器写入命令字“0x30”。

3)读取状态寄存器值为“0x58”,以表明其准备好。

4)向数据寄存器连续写入512 Byte,扇区内偏移地址会自动加1。

5)检查状态寄存器是否为“0x50”,确保写入扇区成功。

CF卡的读操作和写操作类似,在此不再赘述。

3.2.3 FAT32文件系统

为了便于应用软件升级更新、通信参数快速配置,将Linux kernel、文件系统、应用程序和配置文件以FAT32格式存储于CF卡中,这就需要uboot在引导系统启动时可以直接读取CF卡中的数据,并支持FAT32文件系统。

FAT文件系统源于DOS系统,早期用于对大容量磁盘驱动器的数据管理,按照柱面、磁头、扇区对存储区进行寻址操作。CF卡没有柱面和磁头的概念,内部仅以扇区的方式管理。

FAT32对数据按簇管理,每个文件占用整数倍个簇空间,MBR中记录着当前分区的起始扇区、结束扇区、文件系统类型、FAT表个数、每簇占用扇区数等参数。读取FAT32格式的文件数据时,需要初始化上述变量,通过查询文件名找到文件存放的簇地址,读完一簇后获得下一簇的地址,直至所有数据读取完毕[5]。

3.3 应用程序

作为以太网转CAN的网关设备,应用程序的主要任务就是实现数据的双向转发,Linux系统提供的多任务调度机制,将总任务按照功能类别划分为多个线程,可以获得相对最简软件架构。不同线程间呈现较低的耦合度,为软件升级和多人合作开发提供最大便利。为此,本系统任务线程主要包括以下几种。

1)以太网、CAN通信参数初始化线程。该线程主要完成Socket参数的初始化工作,配置当前设备的IP、发送及接收端口;同时配置每个CAN通道的波特率、屏蔽码、验收滤波器等参数。配置成功后该线程主动挂起,直至有其他线程将其唤醒并重新执行配置初始化操作。

2)下行数据转发,即以太网通道数据接收、CAN通道发送线程。该线程循环监听接收以太网端口,当收到有效UDP数据包后,根据通信协议将其拆分为CAN数据帧,写入相应CAN通道的发送缓冲区,触发CAN发送流程。应用程序仅负责将所要发送的数据一次性填入发送队列,在驱动层通过查询和中断配合的方式,依次完成逐帧发送。

3)上行数据转发,即CAN通道数据接收、以太网通道数据发送线程。当CAN通道有数据接收时,驱动层中断处理程序将SJA1000接收缓存中的数据读入内存中并通知应用程序,应用程序响应后将多个CAN帧序列按协议组成大包数据,以UDP包的形式发送至以太网通道。

4)监测数据发送进程。根据设定周期间隔,系统将设备当前运行状态发送至监测机,同时将上下行的原始数据打包后同步发至监测机。

3.4 转发数据超期安全处理

在信号系统中,控制中心指令数据和设备状态数据都以固定周期循环发送,以太网转CAN网关仅负责透明转发。

对于上行数据(CAN接收,以太网发送),无论对端设备是否存在或以太网通道建立与否,数据以UDP包形式单次发送后立即释放发送缓冲区,陈旧历史数据不会残留至内存,亦不会再次被发送。

但对于下行数据(以太网接收、CAN发送),由于CAN总线错误或过于繁忙,某一帧堵在队列内长时间无法发送,直到总线恢复健康或其他节点释放总线,该队列内的帧才会被逐一发送。这势必会造成不可预知的安全隐患,因此,必须将过期数据及时清除。具体实现方法:设备接收到以太网数据包后记录一个本地时间戳,该数据包内的数据通过CAN总线发送时检查当前时间和该包接收时刻的时间差是否在允许范围内,超过阈值则直接丢弃。

4 结论

根据铁路信号系统应用的特点,设计了一种以太网转CAN接口的方案,较既有成熟产品增加了CF卡数据配置功能,提供独立的监测数据发送以太网专用通道。针对信号系统对传输指令数据时效性的要求,对过期数据及时清除,防止陈旧的历史数据被错误转发而造成安全隐患。经前期实验室验证表明,该方案通用性强、便于维护,具有良好地用户体验,在信号控制系统中应该具有良好的应用前景。

[1] 王永翔, 王立德.多播交换式CAN总线与以太网互联网关设计[J].电子测量与仪器学报,2007,21(3):83-87.

[2] 李加升, 李宁, 曾哲.基于CAN总线与以太网的嵌入式网关设计[J].现代电子技术,2009, 32(14):69-77.

[3] 叶梅, 赵京伟, 初元萍.嵌入式Linux系统在PowerPC上的实现[J].核电子学与探测技术,2006, 26(5):614-617.

[4] Philips Semiconductors.SJA1000 Stand-alone CAN controller.2000.

[5] Microsoft Corporation.Microsoft Extensible Firmware Initiative FAT32 File System Specification.

猜你喜欢
扇区驱动程序寄存器
分阶段调整增加扇区通行能力策略
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
阻止Windows Update更新驱动程序
空中交通管制扇区复杂网络建模与特性分析
计算机硬件设备驱动程序分析
移位寄存器及算术运算应用
管制扇区复杂网络特性与抗毁性分析
U盘故障排除经验谈
Lx5280模拟器移植设计及实施