1
/12
PTP 授时同步原理时间同步含义是指按照接收到的标准时间通过调整频率和相位来调整被授时设备内部的时钟。时钟的相位用数值表示出来其实就是我们所说的时刻。时间同步有授时和守时两大主要功能,通俗的说,授时就是“对表”,通过不定期地对表动作,将本地时间与标准时间进行相位同步;守时即是在对表的间隙里,本地时间与标准时间之间不能出现太大的偏差。
2
/12
PTP 授时原理为在同一个局域网中, 主时钟周期性地发送时间同步报文, 从时钟接收该同步报文, 同时随机性的给主时钟发送延迟请求报文, 然后通过同步算法调整自身时钟的偏差。
3
/12
从主时钟所在的系统中由 PTP 协议进行组包同步数据流, 然后经过传输层, 网络层, 数据链路层。网络多播负责将数据流发送给交换机, 交换机将转发该数据报文到同一个多播组, 同一个多播组的从时钟将接收到该同步报文, 从链路层传送送到 PTP 协议层进行解包处理。同时从时钟发送的延迟请求报文过程将由从时钟协议层组包, 然后通过网络链路传回到主时钟,来回传送的原理类似。
4
/12
经往返反复计算,得到比较理想的偏差数值后,通过计算从时钟和主时钟之间的偏差比率计算得到从时钟和主时钟之间的一个相位差和频率差, 将所获偏差补尝给从时钟设备, 从而达到主从时钟设备的一致。
5
/12
PTP 授时钟硬件的设计,ptp 授时精度从理论上来说主要受两方面的影响,一方面是打时间戳的位置另外是软件同步的算法。打时间戳目前可以在物理层、数据链路层和应用层上进行,同时精度会依次降低。
SYN2401型PTP主时钟
6
/12
本文讨论的是基于以太网的传输媒介, 在物理层打时间戳的方式, 该方式实现可以获得较高的同步精度。该方式下的 PTP 数据报文流改变标准的以太网物理层芯片, 使用精度更高的具有 IEEE1588 PTP 功能的太网物理层芯片。一般来讲硬件单元包括 UDP 用户数据包协议传输层、网络连接协议 IP 传输层、MAC 数据链路层、 传输层和 PHY 物理层。
7
/12
PTP 授时钟软件的设计
软件采用了分层模型, 模块化设计的思想,协议栈与平台相关的部分分开, 这样可以很方便的移植到任何平台下, 在系统调试和功能的删除添加 *** 作非常的方便。
系统初始化单元主要用于对定时器、系统日志模块、配置模块等进行初始化。其中初始化包括但不限于资源分配、创建定时器、创建消息队列以及初始化系统日志等。其中定时器用于完成 PTP 协议交互时的逻辑 *** 作,保证 PTP 协议的正常运转。消息队列负责为用户提供一个外部的 API 接口,方便获取 PTP 协议运转过程中发生的异常信息。
SYN2401型PTP主时钟
8
/12
在这里需要说明一下人机交互单元,这一单元主要由配置模块和测试模块组成, 前者用于提供参数配置接口, 接收用户输入的配置请求,根据配置请求对PTP 协议的实现的系统参数进行配置;后者负责提供用于测试的应用程序编程接口, 并对该测试请求要求的 PTP 协议的功能进行测试。用户输入的测试请求,就是通过测试模块完成的。
9
/12
协议引擎单元包括定时器、PTP 报文处理模块、网络通讯模块、同步算法模块和时钟处理模块。定时器顾名思义为 PTP 协议的运行提供定时功能,一般有同步间隔定时器、接收超时定时器和延迟请求间隔定时器等三种类型的定时器。ptp 报文处理模块一般处理同步报文、跟随报文、延迟请求报文和延迟响应报文, 根据 ptp 协议组织并封装各种 ptp 报文, 通过网络通讯模块发送 ptp 报文, 或从网络通讯模块接收 ptp 报文,并获取各 PTP 报文的发送时间戳和接收时间戳。
SYN2401型PTP主时钟
10
/12
ptp 授时时钟产品为适应更高精度的时间同步,推出纳秒级的时间同步技术 PTP。相关的 ptp 授时系列产品包括 PTP 主时钟和从时钟,除此之外还有 PTP 授时板卡,其中板卡分为串口授时和总线控制两种,采用高速集成芯片实现硬件时间戳打标功能,大幅度提高了对时和授时精度。
11
/12
ptp 授时钟主要分为主时钟和从时钟,一般 1588 时钟都是主从成套使用, 因此可以选择 SYN2401型PTP主时钟和SYN2403型PTP从时钟,如果有 1588 时钟集成能力,可以选择各种 1588 时钟板卡,有核心板卡和整块板卡,1588 核心板卡体积小巧,可以做主时钟也可以做从时钟,性价比极高,时间信息、非连续调控设备时钟。
12
/12
时间同步有2个主要功能:授时和守时,用通俗的语音描述,授时就是“对表”.通过不定期地对表动作,将本地时刻与标准时刻相位同步;守时保证在对表的间隙里, 本地时刻与标准时刻偏差不要太大
具体配置过程:1、打开STM32CubeMX,并选择好相应的芯片。文中的芯片为STM32F207VCT6,选择后如下图:
2、配置RCC时钟、ETH、PA8以及使能LWIP;
由于此处我们的开发板硬件上为RMII方式,因此选择ETH-RMII,若有同志的开发板为MII方式,请参考MII的配置方法,此处只针对RMII;
RCC选择外部时钟源,另外勾选MCO1,软件会自动将PA8配置为MCO1模式,该引脚对于RMII方式很重要,用于为PHY芯片提供50MHz时钟;
使能LWIP;
3、时钟树的相关配置,必须保证MCO1输出为50Mhz,如果这个频率不对会导致PHY芯片无法工作;
我这里因为芯片为207VCT6,为了使MCO1输出为50Mhz,做了PLL倍频参数的一些调整,总体如下:(同志们配置时可根据自己的芯片灵活配置,但需保证MCO1的输出为50Mhz)
4、ETH、LWIP、RCC相关参数设置;
至此,比较重要的都在前面了,但是还有一点仍需要注意,即PA8引脚输出速度,几次不成功都是因为这个引脚没注意。
后续的参数设置可以根据同志们自己的需求分别设置,这里给出我的设置供参考;
ETH参数保持默认,但中断勾选一下;
LWIP参数设置如下:(因为我这里是配置UDP服务器,IP选择静态分配)
5、生成工程,做最后的函数修改;
给生成的工程添加UDP服务器的初始化以及端口绑定等相关函数;
我这里直接将之前的官方例程中的UDP服务器文件加进来,如下:
之后将.c文件添加到用户程序,主函数添加Udp的.h头文件;如下:(udp文件的具体内容在后面给出)
6、主函数还需要添加一下几个函数,在这里不对函数作用及实现原理讲解,仅做添加说明。
附:udp_echoserver相关文件内容(该文件为官方的示例程序,版权归官方,此处做转载)
udp_echoserver.c的内容如下:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "lwip/pbuf.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include <string.h>
#include <stdio.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define UDP_SERVER_PORT7 /* define the UDP local connection port */
#define UDP_CLIENT_PORT7 /* define the UDP remote connection port */
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
/* Private functions ---------------------------------------------------------*/
/**
* @brief Initialize the server application.
* @param None
* @retval None
*/
void udp_echoserver_init(void)
{
struct udp_pcb *upcb
err_t err
/* Create a new UDP control block */
upcb = udp_new()
if (upcb)
{
/* Bind the upcb to the UDP_PORT port */
/* Using IP_ADDR_ANY allow the upcb to be used by any local interface */
err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT)
if(err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(upcb, udp_echoserver_receive_callback, NULL)
}
}
}
/**
* @brief This function is called when an UDP datagrm has been received on the port UDP_PORT.
* @param arg user supplied argument (udp_pcb.recv_arg)
* @param pcb the udp_pcb which received data
* @param p the packet buffer that was received
* @param addr the remote IP address from which the packet was received
* @param port the remote port from which the packet was received
* @retval None
*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
/* Connect to the remote client */
udp_connect(upcb, addr, UDP_CLIENT_PORT)
/* Tell the client that we have accepted it */
udp_send(upcb, p)
/* free the UDP connection, so we can accept new clients */
udp_disconnect(upcb)
/* Free the p buffer */
pbuf_free(p)
}
udp_echoserver.h的内容如下:
#ifndef __ECHO_H__
#define __ECHO_H__
void udp_echoserver_init(void)
#endif /* __MINIMAL_ECHO_H */
7、至此,所有的工作完成,编译工程,下载至开发板。由于udp_echoserver中绑定的端口号为7,这里我们通过测试工具测试网络的功能
1. 定时:是指根据参考时间标准对本地钟进行校准的过程)授时(指采用适当的手段发播标准时间的过程)2. 时间同步:是指在母钟与子钟之间时间一致的过程,又称时间统一或简称时统)3. 守时:是指将本地钟已校准的标准时间保持下去的过程,国内外守时中心一般都采用由多台铯原子钟和氢原子钟组成的守时钟组来进行守时守时是一种素质,西方人一般都讲究遵守时间,德语中有一句话“准时就是帝王的礼貌”。 守时是职业道德的一个基本要求,如果你是一个新人刚参加工作,需要面试,而你却迟到了,那么不管你有什么理由,都会被视为缺乏自我管理和约束能力,即缺乏职业能力,给面试者留下非常不好的印象。守时是纪律中最原始的一种,无论上班下班约会都必须准时,守时即是信用的礼节,公共关系的首环,也是一个人作人的最基本的要求。方法/步骤分步阅读1/12PTP 授时同步原理时间同步含义是指按照接收到的标准时间通过调整频率和相位来调整被授时设备内部的时钟。时钟的相位用数值表示出来其实就是我们所说的时刻。时间同步有授时和守时两大主要功能,通俗的说,授时就是“对表”,通过不定期地对表动作,将本地时间与标准时间进行相位同步;守时即是在对表的间隙里,本地时间与标准时间之间不能出现太大的偏差。2/12PTP 授时原理为在同一个局域网中, 主时钟周期性地发送时间同步报文, 从时钟接收该同步报文, 同时随机性的给主时钟发送延迟请求报文, 然后通过同步算法调整自身时钟的偏差。3/12从主时钟所在的系统中由 PTP 协议进行组包同步数据流, 然后经过传输层, 网络层, 数据链路层。网络多播负责将数据流发送给交换机, 交换机将转发该数据报文到同一个多播组, 同一个多播组的从时钟将接收到该同步报文, 从链路层传送送到 PTP 协议层进行解包处理。同时从时钟发送的延迟请求报文过程将由从时钟协议层组包, 然后通过网络链路传回到主时钟,来回传送的原理类似。4/12经往返反复计算,得到比较理想的偏差数值后,通过计算从时钟和主时钟之间的偏差比率计算得到从时钟和主时钟之间的一个相位差和频率差, 将所获偏差补尝给从时钟设备, 从而达到主从时钟设备的一致。5/12PTP 授时钟硬件的设计,ptp 授时精度从理论上来说主要受两方面的影响,一方面是打时间戳的位置另外是软件同步的算法。打时间戳目前可以在物理层、数据链路层和应用层上进行,同时精度会依次降低。SYN2401型PTP主时钟6/12本文讨论的是基于以太网的传输媒介, 在物理层打时间戳的方式, 该方式实现可以获得较高的同步精度。该方式下的 PTP 数据报文流改变标准的以太网物理层芯片, 使用精度更高的具有 IEEE1588 PTP 功能的太网物理层芯片。一般来讲硬件单元包括 UDP 用户数据包协议传输层、网络连接协议 IP 传输层、MAC 数据链路层、 传输层和 PHY 物理层。7/12PTP 授时钟软件的设计软件采用了分层模型, 模块化设计的思想,协议栈与平台相关的部分分开, 这样可以很方便的移植到任何平台下, 在系统调试和功能的删除添加 *** 作非常的方便。系统初始化单元主要用于对定时器、系统日志模块、配置模块等进行初始化。其中初始化包括但不限于资源分配、创建定时器、创建消息队下人机交互单元,这一单元主要由配置模块和测试模块组成,前者用于提供参数配置接口,接收用户输入的配置请求,根据配置请求对PTP协议的实现的系统参数进行配置;后者负责提供用于测试的应用程序编程接口,并对该测试请求要求的PTP协议的功能进行测试。用户输入的测试请求,就是通过测试模块完成的。9/12协议引擎单元包括定时器、PTP报文处理模块、网络通讯模块、同步算法模块和时钟处理模块。定时器顾名思义为PTP协议的运行提供定时功能,一般有同步间隔定时器、接收超时定时器和延迟请求间隔定时器等三种类型的定时器。ptp报文处理模块一般处理同步报文、跟随报文、延迟请求报文和延迟响应报文,根据ptp协议组织并封装各种ptp报文,通过网络通讯模块发送ptp报文,或从网络通讯模块接收ptp报文,并获取各 PTP 报文的发送时间戳和接收时间戳。SYN2401型PTP主时钟10/12ptp授时时钟产品为适应更高精度的时间同步,推出纳秒级的时间同步技术PTP。相关的ptp授时系列产品包括PTP主时钟和从时钟,除此之外还有PTP授时板卡,其中板卡分为串口授时和总线控制两种,采用高速集成芯片实现硬件时间戳打标功能,大幅度提高了对时和授时精度。11/12ptp授时钟主要分为主时钟和从时钟,一般1588时钟都是主从成套使用,因此可以选择SYN2401型PTP主时钟和SYN2403型PTP从时钟,如果有1588时钟集成能力,可以选择各种1588时钟板卡,有核心板卡和整块板卡,1588核心板卡体积小巧,可以做主时钟也可以做从时钟,性价比极高,时间信息、非连续调控设备时钟。12/12时间同步有2个主要功能:授时和守时,用通俗的语音描述,授时就是“对表”.通过不定期地对表动作,将本地时刻与标准时刻相位同步;守时保证在对表的间隙里,本地时刻与标准时刻偏差不要太大。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)