基于ARM9200体系的IEEE 1588硬件实现图.docx
《基于ARM9200体系的IEEE 1588硬件实现图.docx》由会员分享,可在线阅读,更多相关《基于ARM9200体系的IEEE 1588硬件实现图.docx(10页珍藏版)》请在冰豆网上搜索。
基于ARM9200体系的IEEE1588硬件实现图
基于ARM9200体系的IEEE1588硬件实现
摘 要:
随着通信技术的发展,通信系统对网络之间的同步精度越来越高,传统的GPS方式以及NTP同步越来越不能满足系统的发展。
2004年,安捷伦公司提出PTP(IEEE1588)同步方式,该方式能达到次纳秒级精度,可满足大型通信网络要求。
本文主要分析IEEE1588的同步机制,并最终以AT91RM9200为核心实现IEEE1588同步系统。
关键词:
IEEE1588;ARM9200;DP83640;嵌入式系统
在通信领域,“同步”概念是指频率的同步,即网络各个节点的时钟频率和相位同步,其误差应符合相关标准。
目前,在通信网中,频率和相位同步问题已经基本解决,而时间的同步还没有得到很好的解决。
在早期,通信系统负载较低,对时间的同步精度也较低,一般的GPS和NTP方式的同步[2]就可以满足ms级别同步要求,但是随着通信系统的发展,特别是3G技术的发展,传统的同步方式越来越不能满足同步要求。
2004年,安捷伦公司提出的IEEE1588[3-4]同步系统具有里程碑意义,它标志着网络同步开始进入次纳秒精度领域。
而2006年,国家半导体推出的DP83640芯片将IEEE1588时间戳方案在硬件中首次实现,使次纳秒级别网络同步精度实现变为可能。
1IEEE1588实现原理
IEEE1588,即精密时间协议PTP(PrecisionTimeProtocol)由安捷伦于2004年提出,是为了克服以太网实时性不足而规定的一种对时机制。
精密时间协议可以估算出数据包在网络上的往返延迟,并可独立地估算设备时钟偏差。
网络时间协议的工作原理说明如下[5-7]:
(1)现场设备A发送一个PTP包给现场设备B,并记录下数据包离开A的时间,该时间戳为t1。
(2)当此PTP包到达现场设备B时,现场设备B加上自己接收到该数据包的时间戳,该时间戳为TS1。
(3)现场设备A发送一个FollowUp消息给现场设备B,通知B时间t1。
(4)当此PTP包离开现场设备B时,并记录下数据包离开B的时间t2。
(5)当现场设备A接收到该响应包时,加上一个新的时间戳,该时间戳为Tm2,整个同步过程如图1所示。
图1PTP时间同步示意图
(6)现场设备A再发送FollowUp消息给现场设备B,通知B时间Tm2。
至此,现场设备B己拥有足够的信息来计算2个重要的参数:
一是PTP数据包来回一个周期的时延,二是现场设备A和现场设备B的时钟差。
于是现场设备B能够设定自己的时钟与现场设备A同步。
可以根据下面公式算出现场设备A与现场设备B之间的时间差和延时:
2系统硬件电路设计
2.1支持PTP协议嵌入式接口板设计
根据PTP协议框架,支持PTP协议的嵌入式接口板硬件框图如图2所示。
图2基于DP83640的接口板硬件框图
DP83640高精度PHYTER收发器芯片内置高精度IEEE1588时钟,并设有由硬件执行的时间标记功能,可为接收及发送的信息包印上时间标记。
DP83640最大的特色在于将IEEE1588高精度时间协议(PTP)功能设于芯片的物理层之内,因此可以在最靠近网线的位置记录时间标记,而且分辨度达8ns,不但可为系统提供最准确的高精度控制功能,也确保采集回来的数据出现最少的抖动。
DP83640预载4个时钟更新算法,用户可以利用任何一个算法调节电路板上的PTP时钟,而且偏差率保证不超过10亿分之一(即1ppb[8]的准确度)。
DP83640也可与部分符合IEEE1588规定的处理器搭配一起使用,为测试及测量仪表等设备提供更准确的时钟同步功能。
其系统连接后时钟关系图如图3所示。
图3主从系统时钟关系图
2.2具体电路设计
系统实际设计电路主要包含如下部分:
核心处理器ARM9200;存储电路,其中包含了SDRAM和ROM两部分的电路设计;网络接口电路,其中使用DP83640通过RMII接口总线与ARM9处理器相连,把PTP报文的时间戳信息和当前时钟读数发送给ARM9处理器,同时接收来自ARM9处理器的时钟调整值来调整本地时钟。
DP83640通过RMII总线来获取以太网报文比特流而不是直接从物理层获取,从而实现10Mb/s和100Mb/s两种速率的自适应处理。
3系统软件设计
系统软件结构如图4所示。
图4系统的体系结构示意图
3.1PTP协议状态机模块
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连接到1Hz信号输出,利用DP83640捕获上升沿时间戳实现,在Linux系统中,利用MII总线读取DP83640时间戳寄存器,数据结果如表1所示。
实验结果,表明利用DP83640达到了10ns级别的同步精度,完成了系统的设计目标。
IEEE1588提供的时间同步在理想条件下(网络完全对称),能够达到极高的同步精度,为通信系统同步建设提供了更完美的解决方案。