时间同步方法及装置
技术领域
本发明涉及同步技术领域,具体涉及时间同步方法及装置。
背景技术
在移动回程包交换网络中,基站的时间不再仅依赖于全球定位系统(GPS,Global Positioning System),接入的网络设备需要提供高精度的时间输出。电气和电子工程师协会(IEEE,Institute of Electrical and ElectronicsEngineers)的TR25.836和中国移动的高精度时间同步技术规范等文档中都详细定义了整秒脉冲(1PPS,Pulse per Second)+时间数据(ToD,Time of Data)机制。1PPS+ToD用于整秒的时间同步,图1给出了现有的1PPS+ToD时间同步示意图,如图1所示,主设备在1PPS上升沿1ms后向从设备发送ToD信息,并在500ms内传完。ToD标识当前1PPS上升沿的时间,ToD报文发送频率为每秒1次;从设备收到1PPS触发的中断后,首先记录当前的系统时间,之后通过串口中断的方式读取ToD信息,计算与主设备的时间偏差后,进行时间同步。
图2给出了中国移动的高精度时间同步技术规范中的ToD消息格式图,如图2所示,ToD消息合计23个字节,包括:
(1)帧头
由同步字符1(SYNC CHAR 1)和同步字符2(SYNC CHAR 2)两个字节组成。
SYNC CHAR 1:一个字节,以固定数值0x43表示ASCII码中“C”字符。
SYNC CHAR 2:一个字节,以固定数值0x4D表示ASCII码中“M”字符。
(2)消息头
由消息类(CLASS)和消息标识(ID)两个字节组成。
CLASS:规定了ToD消息的基本分类,一个字节。
ID:定义了ToD消息的编号,一个字节。
(3)消息长度域两个字节。
(4)载荷域:消息内容,16个字节。
(5)帧校验序列(FCS,Frame Check Sequence)域:校验码初始值为FF,无需取反,一个字节。
移动回程网络对时间同步精度要求很高,对于ToD报文和1PPS的配合有明确的规定和要求,其中ToD报文全部23个字节必须在500ms内发送完成,是1PPS+ToD时间同步方案的关键点,是对中央处理单元(CPU,CentralProcessing Unit)系统实时处理能力的考验。
目前,通常采用如下方式发送ToD报文:
方式一:CPU收到1PPS触发的中断后,CPU采用单独的任务发送ToD报文,或者CPU在中断函数中采用串口轮询方式直接发送。
CPU用单独的任务发送ToD报文,任务很可能因为在500ms内得不到及时调度,导致时间同步失败。而CPU在中断函数中直接发送,则由于默认波特率为9600,则连续发送23个字节的ToD报文,理论最短发送时间是23*(10/8)*8)/9600=0.024S,即24ms,中断处理时间过长,且中间不能被强占,导致部分协议例如:快速环网保护协议(RRPP,Rapid Ring ProtectionProtocol),生成树协议(STP,Spanning Tree Protocol)等得不到及时响应处理。
方式二:CPU收到1PPS触发的中断后,在中断处理函数中,采用串口中断方式发送23个字节的ToD报文。采用该方式,串口每发送一个字节都触发一次串口中断,至少需要23次中断才能将ToD信息全部发送出去,中断次数过多,很难保证在500ms内将ToD信息全部发送出去。
可见,上述两种方式都存在CPU先发送1PPS信号,然后CPU进行ToD发送。但由于CPU处理资源约束的情况,造成ToD不能发送,1PPS与ToD绑定失败情况产生。
发明内容
本发明提供时间同步方法及装置,以减少对CPU资源的占用,提高1PPS+ToD时间同步的成功率。
本发明的技术方案是这样实现的:
一种时间同步方法,预先在主设备的复杂可编程逻辑器件CPLD中设置一个Flag,以用于指示时间数据ToD信息是否写入CPLD的寄存器,并初始化Flag,该方法包括:
当主设备的整秒脉冲1PPS产生器件产生一1PSS信号时,将该信号输出到主设备的CPLD;
当主设备的CPLD接收到1PPS信号时,读取Flag,判断Flag是否指示已写入,若是,向从设备发送1PPS信号,同时,向主设备的中央处理单元CPU发送1PPS信号,从自身的寄存器取出ToD信息,将Flag置为指示未写入,且延时1ms后,通过串口将该ToD信息发送给从设备;否则,向主设备的CPU发送1PPS信号;
当主设备的CPU接收到1PPS信号时,若发现Flag指示未写入,则向CPLD的寄存器写入ToD信息,写入完毕,置Flag为指示已写入。
所述方法进一步包括:当CPU发现时间同步未收敛时,置Flag为指示未写入;
且,所述主设备的CPU接收到1PPS信号时,若发现时间同步未收敛,则忽略该1PPS信号。
所述主设备的CPLD通过串口将该ToD信息发送给从设备之后进一步包括:
发送完毕,向主设备的CPU发送中断信号;
且,所述当主设备的CPU接收到1PPS信号之后进一步包括:
若发现Flag指示已写入,则待接收到所述中断信号后,向CPLD的寄存器写入ToD信息,写入完毕,置Flag为指示已写入。
一种时间同步装置,该装置包括:
1PPS产生器件:产生1PSS信号,将该信号输出到CPLD;
CPLD:当接收到1PPS信号时,读取自身的Flag,判断Flag是否指示已写入,若是,向从设备发送1PPS信号,同时,向CPU发送1PPS信号,从自身的寄存器取出ToD信息,将Flag置为指示未写入,且延时1ms后,通过串口将该ToD信息发送给从设备;否则,向主设备的CPU发送1PPS信号;其中,Flag用于指示ToD信息是否写入CPLD的寄存器;
CPU:当接收到1PPS信号时,若发现CPLD中的Flag指示未写入,则向CPLD的寄存器写入ToD信息,写入完毕,置Flag为指示已写入。
所述CPU进一步用于,
当发现时间同步未收敛时,置Flag为指示未写入;且,当接收到1PPS信号时,若发现时间同步未收敛,则忽略该1PPS信号。
所述CPLD进一步用于,在将ToD信息全部发送给从设备后,向主设备的CPU发送中断信号;
且,所述CPU进一步用于,在接收到1PPS信号之后,若发现CPLD中的Flag指示已写入,则待接收到所述中断信号后,向CPLD的寄存器写入ToD信息,写入完毕,置Flag为指示已写入。
一种CPLD,包括:
寄存器:用于存储Flag和ToD信息,其中,Flag用于指示ToD信息是否写入CPLD的寄存器;
ToD发送模块:当接收到1PPS信号时,读取寄存器中的Flag,判断Flag是否指示已写入,若是,向从设备发送1PPS信号,同时,向CPU发送1PPS信号,从寄存器取出ToD信息,将Flag置为指示未写入,且延时1ms后,通过串口将该ToD信息发送给从设备;否则,向主设备的CPU发送1PPS信号。
所述ToD发送模块进一步用于,在将ToD信息全部发送给从设备后,向主设备的CPU发送中断信号。
与现有技术相比,本发明中,CPU只进行将ToD信息写入CPLD的动作,发送ToD信息则由CPLD完成,减少了对CPU资源的占用,且,保证了1PPS与ToD严格绑定,保证了1PPS+ToD时间同步的成功。
附图说明
图1为现有的1PPS+ToD时间同步示意图;
图2为现有的中国移动的高精度时间同步技术规范中的ToD消息格式图;
图3为本发明实施例提供的1PPS+ToD时间同步方法流程图;
图4为本发明实施例提供的1PPS+ToD时间同步装置组成图;
图5为本发明实施例提供的CPLD的组成示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明中,需要在主设备中增加复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)。
图3为本发明实施例提供的1PPS+ToD时间同步方法流程图,如图3所示,其具体步骤如下:
步骤300:预先在主设备的CPLD中设置一个Flag,以用于指示ToD信息是否写入CPLD的寄存器,并初始化Flag。
实际应用中,可以通过将Flag赋值为初始值或0,表示未写入,赋值为特定值或1,表示已写入。
步骤301:当主设备的1PPS产生器件产生一1PSS信号时,将该信号输出到主设备的CPLD。
1PPS产生器件严格地每秒一脉冲产生信号,信号质量符合相关标准要求。1PPS产生器件可以通过物理层(Phy)芯片、数据链路层(Mac)芯片或其它芯片来实现。
步骤302:当主设备的CPLD接收到1PPS信号时,读取Flag,判断Flag是否指示已写入,若是,执行步骤304;否则,执行步骤303。
步骤303:主设备的CPLD向主设备的CPU发送1PPS信号,转至步骤305。
由于Flag指示未写入,则说明CPLD的寄存器中没有ToD信息,则本次不进行时间同步操作。
步骤304:CPLD向从设备发送1PPS信号,同时,向主设备的CPU发送1PPS信号,从自身的寄存器取出ToD信息,将Flag置为指示未写入,且延时1ms后,通过串口将该ToD信息发送给从设备。
在CPLD上实现串口功能可采用现有技术实现。用于使1PPS与ToD严格绑定,保证了1PPS+ToD时间同步的成功。
步骤305:当CPU接收到1PPS信号时,发现CPLD中的Flag指示未写入,向CPLD的寄存器写入ToD信息,写入完毕,将CPLD中的Flag置为指示已写入。
CPU每次向CPLD的寄存器的同一位置写入ToD信息。用于使1PPS与ToD严格绑定,保证了1PPS+ToD时间同步的成功。
这里,CPU会通过1588等同步协议获得高精度同步时间,将该时间以ToD信息方式写入CPLD的寄存器。
在实际应用中,考虑到存在一种极少见的情况:CPU已接收到了CPLD发来的1PPS信号,而CPLD还未将ToD信息从寄存器中全部取出,此时,Flag还保持指示“已写入”,为了保证这种情况下也能够实现准确的时间同步,在步骤304中,CPLD将ToD信息全部发送给从设备之后,可以向CPU发送一个中断信号;同时,在步骤305中,当CPU接收到1PPS信号时,若发现Flag指示已写入,则暂不向CPLD的寄存器写入ToD信息,而是在收到CPLD发来的中断信号后,再向CPLD的寄存器写入ToD信息,写入完毕,将CPLD中的Flag置为指示已写入。
需要说明的是,在需要抑制向从设备输出1PPS信号的情况下,例如:时间同步还没收敛、大范围抖动时,此时,CPU要置Flag为指示未写入,同时对于步骤305,当CPU接收到1PPS信号时,若发现CPLD中的Flag指示未写入,还要进一步向协议时间同步(PTP)模块查询时间同步收敛状态,若查询到未收敛,则忽略该1PPS信号,即不向CPLD的寄存器写入ToD信息,直到CPU接收到1PPS信号时,向PTP模块查询到时间同步收敛时,才又开始向CPLD的寄存器写入ToD信息。其中,PTP模块会实时维护时间同步收敛状态。进一步确保1PPS与ToD绑定,确保1PPS+ToD时间同步的成功。
图4为本发明实施例提供的1PPS+ToD时间同步装置的组成示意图,如图4所示,其主要包括:1PPS产生器件41、CPLD 42和CPU 43,其中:
1PPS产生器件41:产生1PSS信号,将该信号输出到CPLD 42。
CPLD 42:当接收到1PPS产生器件41输入的1PPS信号时,读取自身的Flag,判断Flag是否指示已写入,若是,向从设备发送1PPS信号,同时,向CPU 43发送1PPS信号,从自身的寄存器取出ToD信息,将Flag置为指示未写入,且延时1ms后,通过串口将该ToD信息发送给从设备;否则,向主设备的CPU发送1PPS信号;其中,Flag用于指示ToD信息是否写入CPLD的寄存器。
CPU 43:当接收到CPLD 42发来的1PPS信号时,读取CPLD 42中的Flag,若Flag指示未写入,则向CPLD 42的寄存器写入ToD信息,写入完毕,置CPLD 42中的Flag为指示已写入。
CPU 43进一步用于,当发现时间同步未收敛时,置CPLD 42中的Flag为指示未写入;且,当接收到CPLD 42发来的1PPS信号时,若发现时间同步未收敛,则忽略该1PPS信号。
CPLD 42进一步用于,在将ToD信息全部发送给从设备后,向CPU 43发送中断信号;且,CPU 43进一步用于,在接收到CPLD 42发来的1PPS信号之后,若发现CPLD 42中的Flag指示已写入,则待接收到CPLD 42发来的中断信号后,向CPLD 42的寄存器写入ToD信息,写入完毕,置CPLD 42中的Flag为指示已写入。
图5为本发明实施例提供的CPLD的组成示意图,如图5所示,其主要包括:寄存器51和ToD发送模块52,其中:
寄存器51:用于存储Flag和ToD信息,其中,Flag用于指示ToD信息是否写入CPLD的寄存器。
ToD发送模块52:当接收到1PPS产生器件输入的1PPS信号时,读取寄存器51中的Flag,判断Flag是否指示已写入,若是,向从设备发送1PPS信号,同时,向CPU 43发送1PPS信号,从寄存器51取出ToD信息,将寄存器51中的Flag置为指示未写入,且延时1ms后,通过串口将该ToD信息发送给从设备;否则,向主设备的CPU 43发送1PPS信号。
ToD发送模块52进一步用于,在将ToD信息全部发送给从设备后,向CPU 43发送中断信号。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。