冗余切换的实现首先在于对网络实时在线监测,本文中检测的方法基于LAN8187的寄存器。LAN8187寄存器定义如表1所示。其中,Basic Control Register为基本控制寄存器,通过配置其各位,可以完成芯片软复位、lO/100 MHz选择、全双工/半双工选择、LookBack模式选择、自协商等功能。Basic Status Register为基本状态寄存器,对其查询可以得到自协商结果、网络物理连接状态等网络基本状态。PHY Identifier 1/PHY Identitier 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,其周期为2ms,因此每隔2 ms,Ether_moniter线程被触发一次。在Ether_moniter中通过调用RdPHYReg()函数,读取Basic Status Register的值,并判断Link位。Ether-moniter线程流程图如图4所示。