PowerPC下双网冗余热备份高速切换技术实现
来源: 单片机与嵌入式应用   发布时间: 2016-08-22 10:43   674 次浏览   大小:  16px  14px  12px
网络冗余切换热备份技术大多与运行有嵌入式操作系统的控制芯片一起工作,该技术的应用有效增强了网络数据传输的物理可靠性,但是网络切换速度一直是这项技术的瓶颈。本文首先提出通过运行有Linux系统的MPC8377芯片以及外部连接CPLD和2片88E111 PHY芯片完成网络冗余切换热备份的方案,然后依照方案设计对应软件,最终使得双网切换时间小于20 ms,极大地改善了现存方案的切换速度,使得网络恢复加快、数据传输更加可靠。

强景,赵多,王红兵,西安电子科技大学


关键词:双网切换;网络冗余;Linux;MPC8377;88E111;PHY

1 网络冗余切换简介

网络冗余是工业网络的一项保障策略,目的是减轻意外中断的风险,通过即时响应保证生产连续,从而降低关键数据流上任意一点失效所带来的影响。在冗余网络中比较重要的一种双冗余类型为主备网络,在正常情况下一般只有主网络在工作,一旦发生意外,主网切换到备用网络,并发送故障信号给上位机,在主网络得到修整后,主网成为备用网络继续运行。这种方案的恢复时间一般在200 ms左右,虽然可以用来提供网络连接保障,但是恢复时间和切换时间太长一直是该方案的弊端。


2 方案总体设计

2.1 硬件介绍


该设计采用Freescale公司的基于PowerPC架构的MPC8377芯片,其外围接口丰富,可参考实际需求自由删减,提高了系统开发的灵活性,同时降低了产品开发的难度与成本,有效缩短了产品从研发到投放市场的时间,提高了产品的竞争力,处理器内部集成了e300内核PCI、PCIE、DDR等控制器,其提供了双千兆以太网控制器。MPC8377 I/O接口包括10/100/1000 Mbps以太网接口:一个千兆位RGMII连接到(PHY)88E111,一个5端口Vitesse Ethernet switch(VSC7385);PCI和PCI Express插槽:PCI Express连接器,一个Mini PCI连接器,一个标准PCI连接器;SATA:两个USB 2.0,4端口USB Hub,一个串行通信接口。


该设计使用的PHY为88Ell1,88E111吉比特以太网收发器是一个物理层器件,用于1000 BASE-T、100 BASE-TX和10 BASE-T类型的以太网。88E111支持用于直接连接到MAC/Switch接口的吉比特介质无关接口(GMII)、精简的GMII(RGMII)、串行吉比特介质无关接口(SGMII)、10比特接口(TBI)、精简的10比特接口(RTBI);集成了一个可选的1.25 GHz的SERDES接口(串行器/解串器);被用于实现1000 BASE-T千兆接口转换器(GBIC)或小型可插拔(SFP)模块;采用了先进的混合信号进程来均衡执行、消除回声和传音、数据恢复和错误校正。该器件运行在高噪声的环境中时功耗也非常低。


2.2 硬件方案


MPC8377带有两路MAC接口,但是为了提高网络恢复的速度和切换速度以及实现IP和MAC的唯一绑定,本方案只采用单路MAC。MAC数据线与控制线连接CPI D,然后通过CPLD一分二连接两路PHY完成。为了保证切换正常和快速,采用MPC8377的一路GPIO口连接CPLD作为切换信号。为了保证中断速度,直接把两路PHY的中断信号通过CPLD与门操作连接MPC8377。整个方案连接方式如图1所示。



图1 方案连接方式

3 MPC8377的网络设计

为了网络连通方便,该方案需要移植Linux系统到MPC8377,为了系统正常启动,设计MPC8377为NOR Flash启动模式,NOR Flash通过烧写定制的Uboot启动引导文件、定制的Linux image镜像文件、dtb文件,以及rootfs文件系统。移植好Linux系统之后,网络底层程序可以通过移植网络驱动完成,因此只需通过底层驱动获取网络诊断信息和向CPLD发送相应切换命令。


3.1 Linux系统网络诊断


实现网络切换程序,需要准确判定网络通断状态,并及时发送切换命令。网络通断通过读取88E111的寄存器1,其为状态寄存器。88E111的状态寄存器如表1所列。


表1 88E111状态寄存器

由此可知,状态寄存器有16位,第2位为Link状态,第3位为自动协商,该寄存器在Linux系统启动结束后默认值(默认是指网络在Linux系统启动过程中正常)为0x796D。通过读取分析该状态寄存器的第2位即可得到网络状态,即该位为1,表示连接正常,为0表示连接中断。


Linux用户空间应用程序通过在用户空间先创建套接字socket(PF_LOCAL,SOCK_DGRAM,0),再调用ioctl(sockfd,S10CGMIIPHY,&ifr)函数,可以获取PHY地址;通过先调用(uintl6_t)strtoul(‘eth0’NULL,0),选定网络,再调用ioctl(sockfd,SIOCGMIIREG,&ifr)可以访问到网络连接状态,最终通过if(mii一> val_out8&0x0004)来判定网络连接状态。


3.2 GPIO驱动设计


Linux系统驱动分为3类:字符设备、块设备、网络设备。本文采用字符驱动来编写GPIO驱动,GPIO模块的结构图如图2所示。



图2 GPIO模块的结构图

驱动程序通过module_init(GPIO_init)、module_exit(GPIO_exit)分别注册和注销GPIO驱动,在注册设备驱动时初始化SICRL、GPnDIR、GPnODR、GPnDAT寄存器。为了方便驱动程序所驱动的设备在用户空间打开,在编写GPIO驱动时通过class_create(THIS_MODULE,"GPIO")以及device create(firstdrv_class,NULL,MKDEV(major,0),NULL,"GPIO")函数让系统自动创建设备节点。最终通过用户空间的ioctl函数改写GPnDAT来完成切换信号的控制。


Linux系统在上电加载Uboot阶段,开始初始化PHY芯片。为了保证在进入Linux系统后,切换到备用PHY后可以直接正常使用,需要更改Uboot启动初始化程序,在初始化主PHY芯片后,切换信号到备用PHY,再进行一遍PHY初始化。MPC8377带有串口,Uboot启动过程中可以通过串El将Uboot启动信息回送至上位机,Uboot初始化完成后启动后串口输出如图3所示。



图3 MPC8377 Uboot引导程序初始化主、备PHY

如图3所示,Net下TSEC1和TSEC2分别对应主、备PHY的初始化,在两次初始化之间,MPC8377控制GPIO引脚,通过CPLD调整MAC与PHY的连接关系。


3.3 程序自启动和驱动加载


为了使得用户切换程序和驱动程序能在Linux系统启动后自动运行,编译好的用户程序和驱动程序都被放置在rootfs文件系统中,并通过压缩烧写到N0R Flash中。用户程序实现正常运行必须先启动GPIO 驱动程序。Linux系统启动时会自动加载/etc/profile文件,为了自动启动用户程序和GPIO驱动,需要在/ect/profile文件中添加如下代码:


ifconfig eth0 192.168.81.238 netmask 255.255.255.0   //更改网卡配置

mkdir/lib/modules/3.0.0   //创建节点,供卸载GPIO驱动使用

insmod GPIO.ko //安装GPIO驱动

./main   //启动用户程序


4 CPLD切换设计

CPLD连接来自MPC8377的MAC信号,并且将其信号通过一分二给两路PHY。在Uboot启动过程中由MPC8377通过GPIO信号发送给CPLD,从而实现两路PHY的初始化,在启动Linux系统后,MPC8377仍然可以通过网络状态来调度CPLD连接不同的PHY。


4.1 CPLD与PHY的连接


除去MDIO信号之外,CPLD与MAC连接的I/O信号都可以直接进行一分二,最终生成的CPLD模块如图4所示。



图4 CPLD中MAC信号到PHY信号的一分二

4.2 CPLD的MDIO设计


MAC与PHY连接的MDIO信号属于双向I/O信号,不能直接一分二。本文在CPLD中判断收发条件来实现控制端口的I/O状态切换。


MDIO信号协议读写信号时序分别如图5、图6所示。



图5 MDIO读时序



图6 MDIO写时序

MDIO 的一分二可以通过CPLD 的inout端口来实现,对inout端口的控制可以通过分析MDIO的时序来完成。从MDIO读写时序(图5和图6)可以看到,在起始(Start)信号过后,会有读写控制位信号,10为读,01为写,通过对这两位的分析改变inout端口的输入输出特性,即在发现10时,inout在TA阶段表现为输入,在发现01信号时,在TA阶段表现为输出,进而得到MDIO一分二模块如图7所示。



图7 MDIO一分二模块

5 测试

为了得到切换时间,在网络切换前调用gettimeofday(&tvpre,&tz)获取当前系统时间,在完成网络切换并且网络连通后调用gettimeofday(&tvafter,&tz)再次获取系统时间,最终计算差值打印出主备切换时间,如图8所示。



图8 主备切换时间

通过测试可以看到,从PHY1到PHY2的切换,仅仅在12 ms内就可以完成,通过多次测试,双网的切换时间一直保持小于20 ms。


结语

本文介绍了MPC8377与CPLD、88E111,通过Linux系统实现双冗余网络切换热备方案,介绍了MPC8377字符设备驱动的编写,以及CPLD在处理MDIO信号上的应用,最终使得设计方案可以小于20 ms的切换时间。通过本方案的应用可以一定程度上满足网络的可靠性和网络恢复的时长要求。