基于ARM9200体系的IEEE 1588硬件实现图_ieee118节点系统图
基于ARM9200体系的IEEE 1588硬件实现图由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ieee118节点系统图”。
基于ARM9200体系的IEEE 1588硬件实现
摘 要: 随着通信技术的发展,通信系统对网络之间的同步精度越来越高,传统的GPS方式以及NTP同步越来越不能满足系统的发展。2004年,安捷伦公司提出PTP(IEEE 1588)同步方式,该方式能达到次纳秒级精度,可满足大型通信网络要求。本文主要分析IEEE 1588的同步机制,并最终以AT91RM9200为核心实现IEEE 1588同步系统。
关键词: IEEE 1588;ARM9200;DP83640;嵌入式系统
在通信领域,“同步”概念是指频率的同步,即网络各个节点的时钟频率和相位同步,其误差应符合相关标准。目前,在通信网中,频率和相位同步问题已经基本解决,而时间的同步还没有得到很好的解决。
在早期,通信系统负载较低,对时间的同步精度也较低,一般的GPS和NTP方式的同步[2]就可以满足ms级别同步要求,但是随着通信系统的发展,特别是 3G技术的发展,传统的同步方式越来越不能满足同步要求。2004年,安捷伦公司提出的IEEE 1588[3-4]同步系统具有里程碑意义,它标志着网络同步开始进入次纳秒精度领域。而2006年,国家半导体推出的DP83640芯片将IEEE 1588时间戳方案在硬件中首次实现,使次纳秒级别网络同步精度实现变为可能。1 IEEE 1588实现原理 IEEE 1588,即精密时间协议PTP(Precision Time Protocol)由安捷伦于2004年提出,是为了克服以太网实时性不足而规定的一种对时机制。精密时间协议可以估算出数据包在网络上的往返延迟,并可 独立地估算设备时钟偏差。网络时间协议的工作原理说明如下[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所示。
Tm=t(假假Delay=1)Tm1=t1Tm1 SynFollow UpTm2=t2-dtTm2 SynTs=t2Ts=t1+dtTs1=t1+dt+delayTs=t+dtTm2=t2-dt+delayFollow Up假假假假假假
图1 PTP时间同步示意图
(6)现场设备A再发送Follow Up消息给现场设备B,通知B时间Tm2。
至此,现场设备B己拥有足够的信息来计算2个重要的参数:一是PTP数据包来回一个周期的时延,二是现场设备A和现场设备B的时钟差。于是现场设备B能够设定自己的时钟与现场设备A同步。
可以根据下面公式算出现场设备A与现场设备B之间的时间差和延时: 系统硬件电路设计
2.1 支持PTP协议嵌入式接口板设计
根据PTP协议框架,支持PTP协议的嵌入式接口板硬件框图如图2所示。
FlashSDRAMARM9假假假MII假假DP83640RJ45假假假假
图2 基于DP83640的接口板硬件框图
DP83640高精度PHYTER收发器芯片内置高精度IEEE 1588时钟,并设有由硬件执行的时间标记功能,可为接收及发送的信息包印上时间标记。DP83640最大的特色在于将IEEE 1588高精度时间协议(PTP)功能设于芯片的物理层之内,因此可以在最靠近网线的位置记录时间标记,而且分辨度达8 ns,不但可为系统提供最准确的高精度控制功能,也确保采集回来的数据出现最少的抖动。DP83640预载4个时钟更新算法,用户可以利用任何一个算法调节电路板上的PTP时钟,而且偏差率保证不超过10亿分之一(即1ppb[8]的准确度)。DP83640也可与部分符合IEEE 1588规定的处理器搭配一起使用,为测试及测量仪表等设备提供更准确的时钟同步功能。其系统连接后时钟关系图如图3所示。
假假假假假CLOCK_OUT假假假假假CLOCK_OUT假假假假假假假PTP假假假假PTP假假假假假假假假PTP假假假假假假假假假假PTP假假PTP假假假假假假假假PTP假假假25MHz假假假25MHz假假假
图3 主从系统时钟关系图
2.2 具体电路设计
系统实际设计电路主要包含如下部分:核心处理器ARM9200;存储电路,其中包含了SDRAM和ROM两部分的电路设计;网络接口电路,其中使用 DP83640通过RMII接口总线与ARM9处理器相连,把PTP报文的时间戳信息和当前时钟读数发送给ARM9处理器,同时接收来自ARM9处理器的 时钟调整值来调整本地时钟。DP83640通过RMII总线来获取以太网报文比特流而不是直接从物理层获取,从而实现10 Mb/s和100 Mb/s两种速率的自适应处理。3 系统软件设计
系统软件结构如图4所示。
假假假假假假假假假假假假假假假假假假假假假假假假假假假假PTP假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假PTP假假假假假假PTP假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
图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所示。
STATE_DECISION_ALGORITHM()假D0假假假假假假假假1假2假假DATASET_COMPARISION_ALGORITHM(D0,E)=D0假CreateSlaveClock(E)假假DATASET_COMPARISION_ALGORITHM(D0,E)=D0假CreateMasterClock(D0)假DATASET_COMPARISION_ALGORITHM(F,E)=F=E假DATASET_COMPARISION_ALGORITHM(F,E)=E假CreateMasterClock(E)CreateSlaveClock(E)假CreateSlaveClock(E)
图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所示。
假假假假假假假假假假假假假假假假PTP假假假假假假假假PTP假假假DATASET_COMPARISION_ALGORITHM(D0,E)=D0假CreateSlaveClock(E)CreateMasterClock(D0)假DATASET_COMPARISION_ALGORITHM(D0,E)=D0假DATASET_COMPARISION_ALGORITHM(F,E)=F=E假DATASET_COMPARISION_ALGORITHM(F,E)=E假CreateMasterClock(E)CreateSlaveClock(E)假CreateSlaveClock(E)
图6 系统的体系结构示意图系统测试结果与结论
系统测试将两片DP83640连接到1 Hz信号输出,利用DP83640捕获上升沿时间戳实现,在Linux系统中,利用MII总线读取DP83640时间戳寄存器,数据结果如表1所示。
实验结果,表明利用DP83640达到了10 ns级别的同步精度,完成了系统的设计目标。
IEEE 1588提供的时间同步在理想条件下(网络完全对称),能够达到极高的同步精度,为通信系统同步建设提供了更完美的解决方案。
ARM DIY设计之硬件设计前期准备俗话说:“凡事预则立,不预则废”;“工欲善其事,必先利其器”,此两句谚语说的正是前期准备工作在我们完成一项工作中所起的主要作用。 只有前期的准......
项目部劳务管理工作制度一、项目经理任“突发群体性事件应急处理领导小组”组长,并对本项目劳务管理工作负总责。二、劳动力管理员负责现场劳务管理具体工作。三、劳务队伍施......
基于ARM体系的嵌入式系统BSP的程序设计((锦集10篇))由网友“今天该吃什么呢”投稿提供,下面是小编整理过的基于ARM体系的嵌入式系统BSP的程序设计,欢迎您阅读分享借鉴,希望对您有......
基于ARM的嵌入式Linux终端的研讨与实现【中文摘要】嵌入式Linux是将普通Linux操纵体系入行剪裁、改动,使之能在嵌入式盘算机体系上运行的一种操纵体系。因为兼有Linux和嵌入......
简单型数控系统主要硬件功能实现简单经济型数控系统的硬件和软件设计直接影响数控系统的加工性能和操作性能。本文介绍简单经济型数控系统硬件设计中经常遇到的一些问题及处......
