SpaceWire冗余网络故障检测恢复技术实现
2017-01-13曾华菘张春熹伊小素陶聪凌刘文莉
曾华菘,张春熹,伊小素,陶聪凌,刘文莉
(北京航空航天大学仪器科学与光电工程学院,北京 100191)
SpaceWire冗余网络故障检测恢复技术实现
曾华菘,张春熹,伊小素,陶聪凌,刘文莉
(北京航空航天大学仪器科学与光电工程学院,北京 100191)
为提高SapceWire网络可靠性,基于SpaceWire-D提出了一种应用于SpaceWire冗余网络的故障检测恢复技术;网络节点通过比较主、备份端口收到的时间码来判断链路故障状态,在确认主链路发生故障后,节点自动启用备份端口工作;通过引入时间码抖动容限参数,提高了节点对故障判断的准确性,避免了故障误判;测试结果表明,即使故障链路未与节点直接连接,节点也能够在一个时间槽长度内检测到链路故障并自动切换至备份链路;此技术保证了网络故障情况下的数据正确传输,提高了SpaceWire网络的可靠性,是一种稳定可靠的故障检测恢复技术。
SpaceWire;时间码;可靠性;冗余;故障检测
0 引言
为满足新型航天器对星载数据总线的需求,ESA以IEEE1355-1995和LVDS标准为基础,专门面向航天应用提出了新一代数据总线SpaceWire[1]。SpaceWire是全双工、点对点的串行数据通信链路,可以提供高速(2~400 Mb/s)、高可靠性的数据传输[2]。在航天任务中,星载电子系统处于恶劣的空间环境,所有设备都需要极高的可靠性,星载数据总线也不例外。为提高可靠性,采用冗余备份是最直接有效的一种方法[3-5]。
虽然SpaceWire协议中包含链路错误检测与恢复机制,但其只是为了保证链路的基本功能,不包含冗余备份内容。文献[6]中分析了链路错误对SpaceWire网络的影响,文献[7]中分析了几种保护冗余方法(DMR、TMR等),可显著减少SEU、SET造成链路错误的几率,降低误码率。以上方法用于提高单条链路的可靠性,但为应对链路永久故障的情况,还应采用备份冗余。一种简单的冗余备份网络如文献[8]中所述,但其基于SpaceWire协议本身的容错机制,只能处理与节点直接相连的链路故障。例如,在“主节点—路由器—从节点”的数据通路中,若主节点与路由器之间出现链路故障,从节点将无法检测到。文献[5]中提出的SpaceWire网络备份技术避免了这类问题,但其引入了额外的信息包,且该机制会随着网络中节点数量的增加而变得异常复杂。
一种基于SpaceWire-D的SpaceWire网络备份容错协议在文献[9]中被提出。文献[10]中阐述了一种通过对数据流进行比较,增加网络信息处理可靠性的技术。本文在文献[9]的基础上,融合文献[10]的思想,提出了一种新的SpaceWire冗余网络故障检测恢复技术。节点通过比较主端口与备份端口收到的Time-Code,检测主链路的故障,并能够自动切换至备份链路进行数据传输,在保证网络可靠性的同时,避免了上一段所述的问题。本文对SpaceWire冗余网络中的故障检测恢复机制进行了设计,并设计了具有自动切换功能的双端口SpaceWire接口IP核,搭建SpaceWire故障测试网络,验证了节点的故障自动切换功能。
1 网络结构
一种SpaceWire冗余备份网络模型如图1所示,本文均在此网络模型基础上进行分析。
本网络是基于SpaceWire-D的数据采集网络,Control Node为网络的主控节点,从两个主端口同步向网络中发送Time-Code。各从节点收到Time-Code后,按照事先安排好的事务表在相应的时间槽(图2)内将数据传给主控节点[11],从而保证整个网络精确、有序的运行[12]。
图1 SpaceWire冗余备份网络模型
图2 时间槽
本网络是一个热备份网络,所有从节点的主端口与备份端口均处于开启状态,网络正常时从节点通过主端口进行数据传输,各个从节点的主端口按照需求分别连接到两个路由器,以降低每个路由器的负荷。当从节点受到故障影响时,才通过备份端口进行数据传输。
2 故障检测恢复机制设计
本文提出的故障检测恢复机制为:节点将主端口与备份端口收到的时间码进行比较,若相同,则认为网络中不存在故障或自身未受故障影响,继续保持正常状态;若不同,则根据时间码差值判断是哪个端口受到了故障影响,若是备份端口受到影响,则继续保持正常状态,若是主端口受到影响,则启动故障模式,自动切换至备份端口进行数据传输。
这种故障检测机制的优点在于:1)只有受到故障影响的节点会进入故障状态,最小化故障时网络结构的改变程度;2)节点能够检测到没有直接与自身端口相连接链路的故障,故障时任何节点都无需发送额外的信息包将故障通知给其他节点;3)故障响应速度快,自动切换至备份链路,无需上层应用(或上层协议)的干预。
2.1 功能设计
根据本文中故障检测恢复机制的需求,现设计了具有故障检测与自动切换功能的双端口SpaceWire接口IP核,其模块框图如图3所示。
双端口SpaceWire接口中包含两个SpaceWire CODEC(主端口、备份端口)、一个Fault Detector和一个Switch Bar。两个SpaceWireCODEC符合SpaceWire协议[2,13],提供了SpaceWire链路接口和一些用户接口,包括状态控制接口、数据接口和时间码接口。Fault Detector拥有两个时间码接口和一个状态接口,其内部有两个时间码寄存器以及一个有限状态机。当任意一个CODEC收到时间码时,Fault Detector立刻将该时间码同步至相应的时间码寄存器,有限状态机根据两个时间码寄存器中的值来判断节点状态,决定是否启用备份端口,并将端口使能信号通过其状态接口输出到Switch Bar中。Switch Bar根据状态信息,切换用户数据接口的通道,并将CODEC的“使能”状况通过使能指示接口反馈给用户。实际上,在一些故障状态下,两个CODEC仍均处于Running状态,这里的“使能”信号只是用来显示节点在使用主端口还是备份端口进行数据收发。
图3 双端口SpaceWire接口
在顶层模块中,有两路SpaceWire链路接口,并向用户分别提供了两个CODEC的链路控制接口与时间码接口,但只有一个数据接口以及一个使能指示接口。这意味着用户可以对两个CODEC的链路状态进行独立控制,但在同一时刻只能通过一个CODEC收发数据。
2.2 故障状态判断
节点工作状态一共分为3种:
NORMAL:正常工作;
A_DOWN:主链路A故障;
B_DOWN:备份链路B故障。
当网络中出现链路故障时,若节点主端口A受到影响,它将进入A_DOWN状态,自动切换至备份端口B进行数据收发;若备份端口B受到影响,节点虽然不用采取切换动作,但应转入相应的B_DOWN状态。节点的状态转移图如图4所示。
图4 节点状态转移图
在SpaceWire网络中,虽然Time-Code具有最高的传输优先级,但由于链路中同时有数据字符的传输,以及路由器的存在、链路长度不同等因素的影响,Time-Code会出现延时和抖动[14]。因此,主控节点两端口同步发出的Time-Code抵达某一个从节点的两个端口时,会出现时间差。若状态机中只有NORMAL、A_DOWN、B_DOWN3种状态,时间码抵达的时间差会导致状态机过于敏感,故在状态机中加入了Fault _A Confirming、Fault_B Confirming和Recovering三个过渡状态,增加状态机的稳定性。
图4中,TC_A和TC_B为Fault Detector中相应时间码寄存器中的值。Tjitter为抖动容限时间,可根据实际网络情况进行设置。设时间码差值为TC_A-TC_B,当差值为1或-1时,状态机转入相应的Fault Confirming状态,若在Tjitter内TC_A与TC_B再次相等,则认为因为时间码抖动产生了误判,回到NORMAL状态;若经过Tjitter后TC_A与TC_B仍不相等,则确认Time-Code值小的一端没有正常收到时间码,判定该端口受到了故障影响,状态机转入相应的故障状态(A_DOWN或B_DOWN)。
Tperiod为Time-Slot的长度,是搭建网络时设置的固定参数。当节点处于故障状态时,假设为A_DOWN,TC_A会停留在某个值,TC_B能够正常更新,TC_A与TC_B不相等。若故障恢复,TC_A会与TC_B再次相等,但由于Time-Code值是0到63的循环[15],故TC_B在每个循环均会在一个Time-Slot内与TC_A相等,容易造成误判。所以,在故障状态下,当TC_A与TC_B相等时,状态机进入Recovering状态,若在Tperiod+Tjitter内TC_A与TC_B再次出现差值为1或-1的情况,则认为是因时间码循环产生的误判,回到故障状态;若经过Tperiod+Tjitter后,TC_A与TC_B依然相等,则确认故障已恢复,转入NORMAL状态。
3 仿真测试
为了测试双端口SpaceWire接口IP核故障检测与自动切换的功能,对其进行了仿真。仿真平台如图5所示。
图5 仿真平台
两个独立的SpaceWire CODEC分别于UUT的主端口与备份端口相连接,构成主链路与备份链路。Test Bench控制CODEC_A与CODEC_B同步发送时间码,并控制UUT随机发送数据包。
仿真中,当所有链路均正常工作后,Test Bench对CODEC_A进行了70μs的复位,模拟主链路故障。通过观察UUT的Working CODEC端口,可以看出故障发生时UUT的动作。仿真结果如图6,图7,图8所示。
仿真中采用的链路速率为100Mb/s,Time-Slot长度(Tperiod)为1μs,Tjitter选用了保守值0.5μs。图6为CODEC _A被复位时的波形。此时,主链路断开,UUT主端口无法正常收到Time-Code,其时间码寄值(time_out_da)停留在了“011100”,备份端口仍能正常接收Time-Code,当备份端口的时间码值(time_out_db)更新为“011101”时,经过Tjitter后,Working CODEC端口发生了跳变,“10”表示主端口使能,“01”表示备份端口使能,说明UUT在主链路故障时成功启用了备份链路收发数据。
图6CODEC_A复位
图7 为CODEC_A解除复位时的波形。此时,主链路恢复正常,UUT主端口又可以正常收到Time-Code。当主端口重新有Tick Out输出时,主端口与备份端口的时间码寄存器同步为“111001”,经过Tperiod+Tjitter后,两时间码依然相等,确认链路故障已恢复,UUT切换至主端口进行数据传输。
图7CODEC_A解除复位
图8 为主链路故障中第64μs时的波形,备份端口时间码经历了一个循环后,再次与因故障停止的主端口时间码一致,但在Tperiod后备份端口时间码又发生了改变,两时间码不相等,故判定主链路依然处于故障状态,继续使用备份端口进行数据收发。
图8 时间码循环
仿真结果表明,本文设计的双端口SpaceWire接口IP核能够根据收到的Time-Code判断出链路故障,并自动切换至备份链路进行工作,具有预期的故障检测与自动切换功能。
4 实现与分析
本文最终的实现形式为一个SpaceWire故障测试网络,由两个节点与两个路由器组成,如图9所示。其中一个节点为发起节点,搭载两个主端口,同步发送Time-Code。另一个节点为从节点,搭载一个主端口与一个备份端口,通过其中一个端口传输数据。两个路由器均为4端口路由器,共用一块电路板,但二者相互独立。
4.1 时间码抖动
在进行故障测试之前,首先要对Tperiod和Tjitter两个关键参数进行设定。Tperiod为时间槽长度,可以根据需求自行设定,本测试中定为45μs。Tjitter是抖动容限时间,若过大,则会降低故障响应速度,若过小,则会引起故障误判。为确定Tjitter,首先对网络中的时间码抖动进行测试。
图9 SpaceWire故障测试网络
从节点通过主链路向发起节点发送随机数据包,产生数据流量。发起节点通过两条链路同步发送时间码。在这种情况下,统计了从节点两端口收到同一时间码的时间差,如图10所示。
图10时间码抖动
图10 中,时间差以传输比特周期为单位,差值为负代表备份端口比主端口提前收到Time-Code。可见,在本文搭建的故障测试网络环境下,最大的抖动为12个比特周期。考虑到测试网络链路条数少,流量小,为应对更复杂的情况,抖动容限应使用更大的值。最终选取Tjitter为64个比特周期,测试中链路速率为40Mb/s,故Tjitter=1.6μs。
4.2 结果分析
测试中,Link_1、Link_2与Router_A构成主链路,Link_3、Link_4与Router_B构成备份链路。发起节点以Tperiod=45μs为周期,从两个端口同步发送Time-Code。从节点中的数据发生器,不断向双端口SpaceWire接口IP核的数据接口写入内容为0到31的数据包,包头为1,以供路由器进行路径寻址,包尾为EOP。链路速率为40 Mb/s,Tjitter=1.6μs。利用Altera的Signal TapⅡLogic Analyser抓取FPGA内部信号,以分析节点在链路故障时的动作。
4.2.1 故障发生时的自动切换
为测试从节点的故障检测与自动切换功能,向网络中注入故障,将Link_1断开,造成主链路断路。发起节点内部信号如图11所示。
故障发生后,发起节点从端口b(备份链路)收到了数据包,说明从节点自动切换到了备份链路进行数据传输。从节点内部信号如图12所示。
实际上,从节点的两个端口仍均处于Running状态,但是从时间码上能够判断出,主链路上未与从节点直接相连的链路发生了故障。当端口b(备份端口)输出Tick out更新时间码后,经过Tjitter后,端口a(主端口)仍未收到这一时间码,判定主链路故障。CODEC_enable端口将状态输出,Switch Bar检测到状态变化后将数据接口tx_fifo_data_in从主端口FIFO切换至备份端口FIFO,在此之后从数据接口输入的数据都进入了备份端口FIFO。自动切换后,端口b(备份端口)开始发送数据,而端口a(主端口)会将其FIFO中剩余的数据发送完毕后进入待命状态。
图11 发起节点
图12 从节点
自动切换的时间TAuto-Switching,由故障检测时间TDetecting与切换时间TSwitching组成。故障检测时间取决与故障发生的时刻,若故障在一个时间槽开始时发生,那么故障检测时间为Tperiod+Tjitter;若故障在一个时间槽末尾发生,那么故障检测时间为Tjitter。因为是热备份,且无需发送故障通知或等待确认切换通知,故切换时间仅需一个系统时钟周期。所以TAuto-Switching≈T Detecting,Tjitter<T Auto-Switching<Tperiod+Tjitter。一般情况下,
Tjitter远小于Tperiod,可认为节点能够在一个时间槽长度内完成故障检测与链路切换动作。
4.2.2 故障排除时的自动切换
重新连接Link_1,将主链路恢复正常,从节点自动切换回主链路发送数据,如图13所示。
图13 从节点
主端口开始发送新输入的数据,备份端口将FIFO中的剩余数据发送完之后进入待命状态。
5 结论
本文在SpaceWire冗余网络中,基于SpaceWire-D提出了一种应用于网络从节点的链路故障检测恢复技术,经SpaceWire故障测试网络测试,结果如下:
1)节点的故障响应灵敏,能够在一个时间槽长度内检测出网络中的链路故障,并自动切换至备份链路工作。
2)节点能够自主判断主端口是否受故障影响,即使故障链路没有与该节点直接连接。
3)节点对时间码抖动不敏感,多次测试均未出现故障误判的情况。
测试结果表明,本文提出的SpaceWire冗余网络故障检测恢复技术,故障检测能力强、故障恢复快、稳定性高,满足实际应用需求。在SpaceWire冗余网络中采用此技术,能够增强SpaceWire网络的容错能力,进而提高网络的可靠性。
[1]徐曙清,王 震,董瑶海,等.SpaceWire与SpaceFibre高速总线发展与研究[J].上海航天,2014,31(1):29-36.
[2]ECSS-E-ST-50-12C SpaceWire-Links,nodes,routers and networks[S].Noordwijk,TheNetherlands:European Cooperation for Space Standardization,2008:13-14.
[3]毛宁元.SpaceWire冗余网络关键技术研究[D].哈尔滨:哈尔滨工业大学,2012.
[4]牛跃华,赵文彦.一种星载强容错SpaceWire总线网络拓扑设计与分析[J].计算机应用,2014,34(9):2497-2500,2504.
[5]Chen J,Yang S,Mei H.Study and Implementation of SpaceWire Network Redundancy Technology Based on FPGA[A].Proceedings of the 6thInternational SpaceWire Conference[C].Dundee,UK:Space Technology Centre,University of Dundee,2014:202 -206.
[6]Michiya H,Yosuke Y,Riko Y,et al.Impacts of faults on a SpaceWireNetwork[A].Proceedings of the 6thInternational SpaceWire Conference[C].Dundee,UK:Space Technology Centre,University of Dundee,2014:90-94.
[7]Sebastian T,Vladimir P,Milos K.Fault tolerant Implementation of a SpaceWire interface[A].Proceedings of the 21stIEEE International Conference on Electronics,Circuits and Systems[C].Piscataway,NJ:IEEE,2014:614-617.
[8]Glenn P R,Christopher D.SpaceWire Physical Level Redundancy Mechanism[A].Proceedings of the 2ndIEEE International Conference on Space Mission Challenges for Information Technology[C].Piscataway,NJ:IEEE,2006:344-346.
[9]张 昊,吴 军,张春熹,等.星载SpaceWire网络容错备份协议设计[J].计算机测量与控制,2015,23(2):633-636.
[10]Felix S,Tanya V,JorgenI,et al.FDIR techniques for payload streaming applications using SpaceWire-based Networks[A].Proceedings of the 6thInternational SpaceWire Conference[C].Dundee,UK:Space Technology Centre,University of Dundee,2014:11-17.
[11]Steve P,Albert F,Stuart M,et al.SpaceWire-D:Deterministic Data Delivery With SpaceWire[A].Proceedings of the 3rdInternational SpaceWireConference[C].Dundee,UK:Space Technology Centre,University of Dundee,2010:31-39.
[12]Mitsutaka T,Hiroaki T,Tang C,et al.Development of software platform supporting a protocol for guaranteeing the realtime property of SpaceWire[A].Proceedings ofthe 5thInternational SpaceWireConference[C].Dundee,UK:Space Technology Centre,University of Dundee,2013:80-87.
[13]杨昭荣,周云峰.面向航天应用的SpaceWire总线节点设计[J].通信对抗,2014,33(2):31-34.
[14]Martin S,FelixS.SpaceWire Time Code Latency and Jitter[A].Proceedings of the 5thInternational SpaceWire Conference[C].Dundee,UK:Space Technology Centre,University of Dundee,2013:357-362.
[15]David G,Steve P,Chris M,et al.SpaceWire-D on the castor spaceflight processor[A].Proceedings of the 6thInternational SpaceWire Conference[C].Dundee,UK:SpaceTechnology Centre,University of Dundee,2014:220-226.
Implementation of Fault Detection and Recovery Technique in SpaceWire Redundant Network
Zeng Huasong,Zhang Chunxi,Yi Xiaosu,Tao Congling,Liu Wenli
(School of Instrumentation Science and Opto-electrionics Engineering,Beijing University of Aeronautics and Astronautics,Beijing 100191,China)
A fault detection and recovery method based on SpaceWire-D for SpaceWire redundant network was proposed to improve the reliability of SpaceWire network.In the method,nodes detect link fault through comparing Time-Codes received from primary and redundant link,and enable redundant link automatically after confirming the fault of primary link.By introducing Time-Code jitter tolerance parameter,the fault detection accuracy is improved and the fault misjudgement is avoided.The experiment result shows that each node can detect link fault and switch to redundant link automatically within one Time-Slot,even the faulty link was not connected to the node directly.Therefore,the proposed method can ensure the data transmission when link faults occur,and improve the reliability of the SpaceWire network.
spacewire;time-code;reliability;redundancy;fault detection
1671-4598(2016)08-0039-05
10.16526/j.cnki.11-4762/tp.2016.08.011
:V443.1
:A
2016-03-02;
:2016-03-29。
曾华菘(1992-),男,广东梅州人,硕士研究生,主要从事高速数据传输技术方向的研究。
张春熹(1965-),男,湖南岳阳人,教授,主要从事光纤传输、传感技术方向的研究。