前提提要:采用飞凌 嵌入式 的OK1028A-C开发板进行TSN相关功能的测试,OK1028A-C开发板基于NXP LS1028A处理器设计,双核 ARM Cortex-A72,原生支持6个千兆以太网接口,并内置一个支持TSN的4端口switch,后续TSN的相关子协议功能测试都将基于该开发板展开。
时间同步原理
报文类型分类

最优主时钟算法
PTP域内的各时钟节点在通过BMC协议动态选举最优时钟时,会依据Announce报文中所携带的时钟的第一优先级、时间等级、时间精度和第二优先级的次序依次进行比较,获胜者将成为最优时钟。比较规则如下:

图:时间同步报文中参与最优主时钟算法的相关字段

图:最优主时钟选举后的各网络端口角色分配
时间同步
PTP同步的基本原理如下:确认了时钟之间的主从关系之后,主、从时钟之间交互PTP协议报文并记录报文的收发时间,通过计算PTP协议报文往返的时间差来计算主、从时钟之间的往返总延时。如果两个方向的传输延时相同,则往返总延时的一半就是单向延时。从时钟根据这个单向延时、主时钟上Sync报文的发送时间和从时钟上接收Sync报文的时间差计算时间偏差,从时钟按照该时间偏差来调整本地时间,就可以实现从时钟与主时钟的同步。
时延测量
E2E(End-to-End)时延测量

主、从时钟间的往返总延时 = (t2 – t1) + (t4 – t3)
主、从时钟间的单向延时 = [(t2 – t1) + (t4 – t3)] / 2 = [(t4 – t1) – (t3 – t2)] / 2
注:这里的形式变化是有原因的,因为等式左边的计算方式的前提是主、从时钟的频率一致才能进行计算,如果主从时钟的频率不一致,那么可以将等式右边的式子中将(t4 – t1)乘上主时钟相对于从时钟的时钟频率比,当主从时钟的设备不同时,这点需要特别注意
其他细节:单步同步与两步同步,延时计算滤波(滑动平均、指数滤波),主从时钟频率比计算、时延非对称
P2P(Peer-to-Peer)时延测量

时延测量方式同E2E,时钟间的单向延时 = [(t4 – t1) – (t3 – t2)] / 2
注:以上两端时钟不是master与slave的关系,而是对等的clock A与clock B,任何一个节点都可以是发起端。
E2E与P2P的差异
PTP域中时钟节点使用的链路时延测量机制必须相同,对于时钟节点类型全为BC(边界时钟)和OC(普通时钟)的PTP网络,使用端到端时延请求应答机制和点到点时延机制基本没有区别。
E2E(End-to-End)时延测量是指从数据的源头到目的地的整个路径上测量时延。它涵盖了数据在网络中的传输、处理和传递的所有环节,包括发送端、中间节点和接收端。E2E时延测量可以提供整个通信链路的总体时延信息,帮助评估网络的性能和效率。允许链路中间存在不支持PTP协议的网络设备。
P2P(Peer-to-Peer)时延测量是指在点对点通信中测量时延。它主要关注两个直接通信的节点之间的时延,不涉及中间节点的传输和处理。
总结来说,E2E时延测量是全路径的时延测量,包括了数据在网络中的传输和处理过程,而P2P时延测量是点对点的时延测量,只关注两个直接通信节点之间的时延。
频率同步
由于时间同步域中网络设备之间存在差异,且时钟源存在温漂等,将会导致主从时钟之间的时钟频率存在差异,所以在进行时钟同步时需要进行频率校正。时钟间的单向延时 = [r * (t4 – t1) – (t3 – t2)] /2,其中r即主从时钟之间的频率比。一般的计算方式为:

r = (T(n+1)-Tn)/(T(n+1)‘-Tn’)
时间偏差测量:主时钟按周期向从时钟发送Sync报文,并记录它的发送时间Tn’。从时钟接收到Sync报文时立刻把当前时刻Tn记下,于是得到主从时钟的“时间偏差=(Tn-Tn’)-单向链路延时”。
验证步骤

其中A板的eno0端口IP设置为192.168.1.10,命令为
ifconfig eno0 192.168.1.10
B板的创建网桥br0,并将4个QGMII端口绑定到br0上,并设置br0端口IP,然后设置swp3端口IP和MAC,命令为
brctl addbr br0 //创建网桥br0
brctl addif br0 swp0 //将端口swp0绑定到br0
brctl addif br0 swp1
brctl addif br0 swp2
brctl addif br0 swp3
ifconfig br0 up //打开网桥br0
ifconfig swp0 up //打开端口swp0
ifconfig swp1 up
ifconfig swp2 up
ifconfig swp3 up
ifconfig br0 192.168.1.1 //设置网桥br0 IP地址
ifconfig swp3 192.168.1.13 //设置端口swp3 IP地址,正常来说交换机端口没有IP地址一说,这里是为了方便PC抓包
ifconfig swp3 hw ether <MAC地址> //设置端口swp3 MAC地址,需与eno2 MAC地址不同
ifconfig setageing br0 0 //将老化时间设置为0,方便抓包
ptp4l -i eno0 -m -2
在B板执行命令:
ptp4l -i swp0 -m -2

B板被选择为从时钟,B板的终端界面中可以看到其与主时钟的时钟偏移,以及链路延迟等状态。
master offset值表示从主设备测量的偏移量(以纳秒为单位);
s0,s1,s2表示时钟伺服器的不一样状态,s0表示未锁定,s1表示正在同步,s2表示锁定,锁定状态表示不会再发生阶跃性同步,只是缓慢调整;
当从端口状态改变UNCALIBRATED 到SLAVE时,表示已经成功地与一个PTP主时钟同步。
状态稳定后的时钟偏移在20ns以内,链路延迟在940ns左右

首先将A板和B板中/usr/share/doc/linuxptp/gPTP.cfg文件中的neighborPropDelayThresh参数注释掉

然后A板和B板分别执行以下命令
ptp4l -i eno0 -f /usr/share/doc/linuxptp/1 gPTP.cfg -m -2
ptp4l -i swp0 -f /usr/share/doc/linuxptp/gPTP.cfg -m -2
执行结果如下:


抓包
因为开发板无法进行端口镜像,采用将网桥br0的老化时间设置为0的方式进行抓包,这种抓包方式只能抓取单方向的数据包,即A板发送B板的数据包,所以按照最优主时钟算法,B板只能作为从时钟使用,在这种情况下,PC端只能抓取从时钟发送给主时钟的时间同步报文,可以通过以下命令指强制A板为从时钟的方式,使B板成为主时钟,此时再进行时间同步时,PC端即可抓取主时钟发送给从时钟的时间同步报文
ptp4l 1 -i eno0 -m -2 -s
如果对你有帮助,欢迎点赞收藏,后续将继续更新该系列。





