资源描述
基于ARM9200体系IEEE 1588硬件实现
摘 要: 随着通信技术发展,通信系统对网络之间同步精度越来越高,老式GPS方式以及NTP同步越来越不能满足系统发展。,安捷伦公司提出PTP(IEEE 1588)同步方式,该方式能达到次纳秒级精度,可满足大型通信网络规定。本文重要分析IEEE 1588同步机制,并最后以AT91RM9200为核心实现IEEE 1588同步系统。
核心词: IEEE 1588;ARM9200;DP83640;嵌入式系统
在通信领域,“同步”概念是指频率同步,即网络各个节点时钟频率和相位同步,其误差应符合有关原则。当前,在通信网中,频率和相位同步问题已经基本解决,而时间同步还没有得到较好解决。
在初期,通信系统负载较低,对时间同步精度也较低,普通GPS和NTP方式同步[2]就可以满足ms级别同步规定,但是随着通信系统发展,特别是 3G技术发展,老式同步方式越来越不能满足同步规定。,安捷伦公司提出IEEE 1588[3-4]同步系统具备里程碑意义,它标志着网络同步开始进入次纳秒精度领域。而,国家半导体推出DP83640芯片将IEEE 1588时间戳方案在硬件中初次实现,使次纳秒级别网络同步精度实现变为也许。
1 IEEE 1588实现原理
IEEE 1588,即精密时间合同PTP(Precision Time Protocol)由安捷伦于提出,是为了克服以太网实时性局限性而规定一种对时机制。精密时间合同可以估算出数据包在网络上来回延迟,并可 独立地估算设备时钟偏差。网络时间合同工作原理阐明如下[5-7]:
(1)现场设备A发送一种PTP包给现场设备B,并记录下数据包离开A时间,该时间戳为t1。
(2)当此PTP包到达现场设备B时,现场设备B加上自己接受到该数据包时间戳,该时间戳为TS1。
(3)现场设备A发送一种Follow Up消息给现场设备B,告知B时间t1。
(4)当此PTP包离开现场设备B时,并记录下数据包离开B时间t2。
(5)当现场设备A接受到该响应包时,加上一种新时间戳,该时间戳为Tm2,整个同步过程如图1所示。
图1 PTP时间同步示意图
(6)现场设备A再发送Follow Up消息给现场设备B,告知B时间Tm2。
至此,现场设备B己拥有足够信息来计算2个重要参数:一是PTP数据包来回一种周期时延,二是现场设备A和现场设备B时钟差。于是现场设备B可以设定自己时钟与现场设备A同步。
可以依照下面公式算浮现场设备A与现场设备B之间时间差和延时:
2 系统硬件电路设计
2.1 支持PTP合同嵌入式接口板设计
依照PTP合同框架,支持PTP合同嵌入式接口板硬件框图如图2所示。
图2 基于DP83640接口板硬件框图
DP83640高精度PHYTER收发器芯片内置高精度IEEE 1588时钟,并设有由硬件执行时间标记功能,可为接受及发送信息包印上时间标记。DP83640最大特色在于将IEEE 1588高精度时间合同(PTP)功能设于芯片物理层之内,因而可以在最接近网线位置记录时间标记,并且辨别度达8 ns,不但可为系统提供最精确高精度控制功能,也保证采集回来数据浮现至少抖动。
DP83640预载4个时钟更新算法,顾客可以运用任何一种算法调节电路板上PTP时钟,并且偏差率保证不超过10亿分之一(即1ppb[8]精确度)。
DP83640也可与某些符合IEEE 1588规定解决器搭配一起使用,为测试及测量仪表等设备提供更精确时钟同步功能。其系统连接后时钟关系图如图3所示。
图3 主从系统时钟关系图
2.2 详细电路设计
系统实际设计电路重要包括如下某些:核心解决器ARM9200;存储电路,其中包括了SDRAM和ROM两某些电路设计;网络接口电路,其中使用 DP83640通过RMII接口总线与ARM9解决器相连,把PTP报文时间戳信息和当前时钟读数发送给ARM9解决器,同步接受来自ARM9解决器 时钟调节值来调节本地时钟。DP83640通过RMII总线来获取以太网报文比特流而不是直接从物理层获取,从而实现10 Mb/s和100 Mb/s两种速率自适应解决。
3 系统软件设计
系统软件构造如图4所示。
图4 系统体系构造示意图
3.1 PTP合同状态机模块
PTP合同状态机重要负责管理设备上电时初始化状态、浮现异常状况下故障状态、普通状况下侦听状态、主时钟状态、从时钟状态和未校准状态,以及各状态之间转化。
3.2 最佳主时钟选取模块
最佳主时钟算法模块重要用于选取本地网络中最佳时钟作为主时钟,同步决定本地时钟应处状态。
实现最佳主时钟办法涉及两个环节:(1)从本地时钟系统通信端口中选出一种质量最佳同步报文;(2)依照上述成果,比较此时主时钟和本地时钟属性, 决定本地设备PTP合同引擎所处状态。环节(1)采用数据集比较算法模块来实现,环节(2)采用状态决断算法模块来实现。该模块定义了 STATE_DECISION_ALGORITHM()函数来进行状态决断和数据集更新。在缺省数据集层数是1或2前提下,调用 DATASET_COMPARISON_ALGORITHM模块来鉴定本地时钟缺省数据集D0和较好时钟Erbest数据集哪个更好。
通过比较,如果是缺省数据集D0更好,则依照状态决断代码M1,调用函数CreateMasterClock()依照缺省数据集D0属性值来构建主时 钟,并且将D0状态更改为PTP_MASTER,这代表D0是当前最佳主时钟;否则,调用函数CreateSlaveClock(),依照Erbest 属性来构建从时钟,Erbest状态则是PTP_SLAVE。
在主时钟层数不不大于2状况下,调用DATASET_COMPARISON_ALGORITHM模块,以对本地时钟缺省数据集D0和最佳时钟Ebest进 行鉴定。通过比较,如果是缺省数据集D0更好,则调用CreateMasterClock(),依照状态决断代码M2,依照缺省数据集D0属性值来构建 主时钟,并且更改D0状态为PTP_MASTER;否则,将调用DATASET_COMPARISON_ALGORITHM模块将Ebest与 Erbest进行比较,如果比较成果相似,依照状态决断代码S1,依照Ebest属性来构建从时钟,更改Ebest状态成PTP_SLAVE。如果通过 比较Ebest有更好属性值,则依照状态决断代码M3,依照Erbest属性来构建从时钟,并设立它状态为PTP_SLAVE;否则,依照状态决断 代码P2,依照Ebest属性来构建主时钟,变化它状态为PTP_MASTER。
最佳主时钟选取模块示意图如图5所示。
图5 最佳主时钟选取
3.3 时钟调节模块
本地时钟同步算法是PTP合同中十分核心某些,重要用来调节本地时间,与主时钟基准时间保持一致性。主时钟被选取出来后,就开始调用同步报文发送函数 PTP_Send_PTP_SYNC_MESSAGE(),构造同步报文并对报文初始化,记录发送出去时间戳,再调用udp_send()将报文打包并 加入发送缓冲区进行发送。
调用跟随报文发送函数PTP_Send_PTP_FOLLOW_MESSAGE(),构造跟随报文并对报文初始化,记录发送出去时间戳,然后调用udp_send()将报文打包并加入发送缓冲区进行发送。
从时钟udp_rcve()设立接受缓冲区别别先后接受了同步报文和跟随报文,记录下接受时间打上时间戳,再调用函数 PTP_RECV_PROCESS()判断接受是哪种报文,如果是同步报文,则调用函数PTP_RECV_SYNC(),然后对报文解包,取出报文从主 时钟发送过来时间。如果是跟随报文,则调用函数PTP_RECV_FOLLOWUP()对报文解包,取出报文从主时钟发送过来时间。
在这个函数最后,调用了PTP_Send_Delay_Req()函数,它构造延迟祈求报文并对报文初始化,记录发送出去时间戳,然后调用 udp_send()将报文打包并加入发送缓冲区进行发送;而主时钟缓冲区一旦有报文,则主时钟及时调用udp_rcve()记录下接受时间打上时间 戳,再调用函数PTP_RECV_PROCESS()判断接受是哪种报文,如果是延迟祈求报文,则函数PTP_RECV_DELAY_REQ()及时调 用PTP_Send_PTP_REQ_RESP(),从时钟依照收到4个报文收发时间,计算出主从偏差,对自己时间进行校正。
整个程序流程如图6所示。
图6 系统体系构造示意图
4 系统测试成果与结论
系统测试将两片DP83640连接到1 Hz信号输出,运用DP83640捕获上升沿时间戳实现,在Linux系统中,运用MII总线读取DP83640时间戳寄存器,数据成果如表1所示。
实验成果,表白运用DP83640达到了10 ns级别同步精度,完毕了系统设计目的。
IEEE 1588提供时间同步在抱负条件下(网络完全对称),可以达到极高同步精度,为通信系统同步建设提供了更完美解决方案。
展开阅读全文