基于BF537的双冗余以太网的设计与实现
表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的切换效果和时间非常理想,最终在实际项目中得到了应用。
评论