基于BF537的双冗余以太网的设计与实现
扫描二维码
随时随地手机看文章
随着信息技术的高速发展,网络通信显得越发重要,以太网成为了各种控制系统接口互联的主要媒介。在金融机构、军事应用等特殊应用场合对网络系统的稳定性要求非常高,为了提高系统的可靠性和抗毁性,采用双冗余的设计方式。双冗余网络实现是以故障检测为基础,通过软件检查、交换机及网络节点的网卡协同处理。冗余网络的构建方式通常是在每个网络节点采用双网卡,中间用2个HUB或交换机相连。这样当某个节点的一块网卡、网线或者HUB出现故障时,系统会启用另一块冗余网卡使得系统仍能够正常运行。本文提出了两种基于BF537的冗余网络构建方案。
1 BF537的结构特点
BF537是Blackfin家族的升级产品,其在标准Blackfin内核的基础上拥有丰富接口,并在内部集成有以太网MAC控制器。Blackfin内核包含2个乘/累加器(MAC),2个40位的ALU,4个视频专用8位ALU和1个40位移位器。运算单元处理来自寄存器组的8、16或32位数据。每个MAC每周期可完成一个16位×16位的乘法运算,并把结果累加到40位的累加器中,提供8位的精度扩展。ALU单元执行标准的算术和逻辑运算,由于2个ALU具备对16或32位数据操作的能力,因此运算单元具备的灵活性可以满足各种应用中信号处理的要求。每个32位的输入寄存器可以作为2个16位的寄存器,因此每个ALU可以完成非常灵活的单16位算术运算。通过把寄存器当作2个16位的操作数使用,双16位或单32位操作可以在一个周期中完成。更好地利用第2个ALU,4个16位操作可以简单地完成,加速了每个周期的吞吐量。强大的40位移位器功能丰富,可以对数据进行移位、循环移位、归一化、提取和存储等操作。运算单元所使用的数据来自具有16个16位操作数或8个32位操作数的寄存器组。
同时BF537把存储器视为统一的4 GB的地址空间,使用32位地址并采用分级的存储器结构。Level 1(L1)存储器一般以全速运行,没有或只有很少延迟。Level 2(L2)/Level 3(L3)分布在片内或片外,对其访问会耗费多个处理器周期。在L1级,指令存储器只存放指令,2个数据存储器存放数据,1个专用的临时数据存储器存放堆栈和局部变量信息。在L2/L3级可以存放指令和数据。
2 双冗余以太网构建方案
以太网接口电路主要由MAC控制器和物理层接口(PHY)两大部分构成,这里从是否具备独立的MAC控制器出发提出了2种不同的构建双冗余以太网的方案。
2.1 基于独立MAC控制器的设计方案(方案1)
BF537内部集成了一个支持IEEE802.3 MAC控制层协议的MAC控制器,只需要在外部外接一个以太网接口器件,便可以形成一个完整的以太网通道。因此选择了SMSC公司的LAN8187,它提供了标准的MII总线接口,方便地与BF537相连接,连接方式如图1所示。在MII总线上进行数据的收发,MDC和MDIO则用来完成对接口芯片LAN8187寄存器的读写。以下称由BF537的MAC控制器与物理层接口芯片LAN8187构成的以太网通道为主网络通道。
如果要求双冗余网络通道拥有独立的MAC控制器,则需要在BF537外部扩展一个以太网控制器,如图1所示,选择同样来自于SMSC公司的LAN91C111,通过BF537的外部总线与之相连。选择LAN91C111的16位总线工作方式使其A0~A15与BF537的地址总线相连,D0~D15与BF537的数据总线相连,并由BF537的AMS信号控制LAN9lClll的片选,外部PF引脚来响应来自LAN91C111的中断请求。
2.2 基于共用MAC控制器的设计方案(方案2)
从应用角度分析,即使系统拥有独立的MAC控制器,在实际应用中也要求2个MAC控制器拥有相同的物理地址,因为若MAC地址不同,冗余切换将引起协议层中ARP绑定表的变化,重新映射ARP表中物理地址和IP地址之间的关系将增加冗余切换的时间,影响到网络通信的实时性。
因此提出一套MAC控制器,2个以太网接口芯片的设计方案。该设计方案通过1片CPLD将BF537的MII总线分别转接到2片IAN8187上,并由BF537来控制转接的时机。这样形成了2个以太网通信通道,大大简化了设计,提高了冗余切换的实时性。该设计方案如图2所示。
3 冗余切换软件设计
3.1 网络状态监测
冗余切换的实现首先在于对网络进行实时在线监测,其检测的方法是基于LAN8187的寄存器,表1为IAN8187寄存器的定义。[!--empirenews.page--]
表l中,Basic Control Register为基本控制寄存器,通过配置其各位,完成芯片软复位、10 M/100 M选择、全双工/半双工选择、LookBack模式选择、自协商等功能。Basic StatusRegister为基本状态寄存器,对其查询可以得到自协商结果、网络物理连接状态等网络基本状态。PHY Identifierl/PHYIdentifier 2寄存器标识了芯片的Chip ID。因此,对网络状态的实时监测实际上就是实时读取Basic Status Register,并对结果作出判断。
3.2 程序设计
可以通过操作BF537的寄存器EMAC_STAADD完成其对LAN8187寄存器的读写。对LAN8187寄存器读写的函数定义为:
u16 RdPHYReg(u16 PHYAddr,u16 RegAddr);
void WrPHYReg(u16 PHYAddr,u16 RegAddr,u32 Data);
其中PHYAddr为芯片的物理地址,RegAddr为寄存器地址。
对Basic Status Register的监测采用轮询的机制,即设定一个信号量Link_status,其周期为2 ms,因此每隔2 msEther moniter线程被触发一次。在Ether_moniter中通过调用RdPHYReg()函数,读取Basic Status Register的值,并判断Link位。Ether_moniter线程流程如图3所示。
对于设计方案1来讲,当检测到需要进行网络切换时,需要停用当前网卡初始化备用网络LAN91C111并设定相同的IP地址以及MAC地址。对于方案2,则只需要通知CPLD将通道切换至备用的LAN8187接口。
4 冗余切换测试
用Visual C++6.0开发的简单的上位机测试程序,每隔1ms发送一个UDP数据报,并给每个数据报编写不同的序号。在BF537中编写程序不断接收上位机发来的数据报,然后制造网络通信故障,本文构建的冗余网络将会自动切换到备用通道继续接收上位机的数据报,最后通过检测接收到数据报的序号来确定冗余切换所消耗的时间。分别对两种方案所构建的冗余网络的切换进行测试,结果如表2所示。
从实验结果可以看出方案2具有快速切换的优点,丢包率低;方案l平均丢包数远远大于方案2,并且切换时间长。
5 结束语
本文提出了两种基于BF537构建双冗余以太网的方案,分别论述了其原理、器件选择、连接方法,并做出软件设计。最后经过测试,方案2的切换效果和时间非常理想,最终在实际项目中得到了应用。