PTP同步中的TAI和UTC时间

欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线。

PTP主从同步的示例

PTP主时钟一般采用GNSS卫星授时,然后向网络中的PTP从时钟进行同步。这其中涉及一些时间域的概念:

  • GNSS卫星授时的报文中包含的是UTC时间
  • PTP主时钟使用高精度PTP时钟和网络硬件时间戳,使用的PTP时间域实际上是TAI时间。
  • PTP从时钟如果不支持网络硬件时间戳,而使用系统软件时间戳的话,其使用的是系统时间,也是UTC时间。

这种情况下,同步的过程如下图。
PTP同步中的TAI和UTC时间_第1张图片

TAI时间和UTC时间同步验证

可以使用两块TSync开发板(板子介绍见https://flyelf-tech.gitee.io/docs/tsync/intro/)来验证上面的同步示例。操作步骤:

  1. 使用两块TSync开发板,一块作为主时钟(带GNSS模块),一块作为从时钟,eth0即PTP口用网线直连。分别上电启动。
  2. 主时钟端执行下面的命令,在后台运行两个同步程序,ts2phc用来和GNSS时间同步,ptp4l是ptp协议栈。注意,GNSS模块PPS灯闪烁时表示从卫星接收到有效PPS信号和时间信息。可以用tail -f /tmp/gnss.logtail -f /tmp/master.log实时查看详细运行log。
ts2phc -c eth0 -s nmea --ts2phc.nmea_serialport /dev/ttymxc1 -l 7 -m > /tmp/gnss.log &
ptp4l -i eth0 -m -2 --priority1=1 > /tmp/master.log &
  1. 从时钟端执行下面的命令,在后台进行ptp同步。和主时钟不同,这里指定-S选项使用软件时间戳即系统时间/UTC时间,而主时钟使用硬件时间戳/TAI时间。可以用tail -f /tmp/slave.log实时查看详细运行的log。
systemctl stop systemd-timesyncd
ptp4l -i eth0 -m -S -2 > /tmp/slave.log &
  1. 为了直观对比主时钟TAI时间,从时钟的UTC时间,可以在主时钟终端窗口每隔0.1s打印硬件PTP时钟时间信息,见下面命令。
while true; do phc_ctl /dev/ptp0 get; sleep 0.1;done

在从时钟终端窗口每隔0.1s打印系统时间信息,见下面命令。

while true; do date; echo ""; sleep 0.1;done

另外打开网页上的UTC和TAI时间,可以打开这个网站http://www.leapsecond.com/java/gpsclock.htm,然后进行对比。结果如下图,主时钟使用TAI时间,从时钟使用UTC时间,和网站查询到的TAI和UTC时间一致。

你可能感兴趣的:(IEEE,1588,嵌入式开发,单片机,嵌入式硬件)