1、gPTP(generalized precision time protocol)广义时钟同步协议
gPTP(generalized precision time protocol)广义时钟同步协议,即IEEE 802.1AS协议。它是IEEE 1588协议的延伸,可以为TSN提供全局精准的时间服务,用以实现TSN标准组中的流同步功能。
该协议旨在让AVB网络中所有的节点与一个共同的参考时间同步,要求间隔不超过7个AVB节点的两个终端节点之间的时间误差不能超过500ns。其大体的作用逻辑是,利用BMCA算法在网络中选择一个最佳的节点作为主时钟(或者预先内定一个),并建立主时钟树;然后利用对等路径时延测量机制,计算主从时钟端口间的误差来进行同步。
gPTP定义设备工作在OSI模型中的MAC子层(属于数据链路层),离物理层仅一步之遥的距离即可以减少协议栈缓存带来的延时不确定性,又可以缩短报文的传输时间。该协议规定了两种设备类型:Time-aware-end Station以及Time-aware Bridge。
Time-aware-end Station:可以理解为gPTP的工作节点,可以作为主时钟,也可以作为从时钟。
Time-aware Bridge:一种网桥,仅可以作为主时钟。同时,TSN交换机中,其具备最多一个从时钟端口,也可以被外部祖时钟同步。gPTP报文在进入网桥后会有一个处理时间,称为驻留时间了,协议要求该网桥必须具备测量驻留时间的能力。
上述的两种设备都具有本地时钟,本都是通过晶振的振荡周期进行度量并由设备内部硬件计数器负责对振荡周期进行计数。
网络中,发布时间同步报文的网络端口称为主端口,接收时间同步报文的端口称为从端口。
主时钟是整个系统中的时间基准,这就要求它具有更高的时间精度,需要能被更高精度的时钟授时,比如原子钟和卫星。主时钟的分配可以分为动态分配和静态分配两种。对于汽车而言,其网络的组成一般是稳定的,可以采用静态的预分配来确定主时钟。对于网络组成部分会动态变化的系统,一般采用BMCA算法(Best Master Clock Algorithm,最佳主时钟选择算法)进行分配。而在gPTP Automotive里面,BMCA是被禁止的,应该有确定的主时钟和从时钟关系定位。
2、gPTP报文分类
gPTP协议中的报文被划分成为了报文级别(Message Class)和报文种类(Message Type)两个属性,其中报文级别的具体划分如下
- 事件型报文(Event Massage):这类报文的特点是设备在接收或发送事件类报文时,会对硬件计数器进行采样,将震荡周期计数值和时钟震荡频率以及基准时间相结合,生成一个时间戳。
- 通用型报文(General Massage):这类报文在设备接受或者发送时,不会触发硬件对硬件技术器的采样,不会生成时间戳。
报文种类的划分以及对应的取值如下:
报文类型对应的报文等级以及取值
Massage Type | Message Class | Value |
---|---|---|
Sync | Event | 0x0 |
Pdelay_Req | Event | 0x2 |
Pdelay_Resp | Event | 0x3 |
Announce | General | 0xB |
Signaling | General | 0xC |
Follow_UP | General | 0x8 |
Pdelay_Resp_Follow_UP | General | 0xA |
需要特别说明的是
- Announce报文是在主时钟分配中启用,包含最佳主时钟的运算时间
- Signaling报文主要用来传递信息、请求或者控制指令
3、报头定义
gPTP可以看作PTP的特定配置文件,所以这里的报头可以直接用PTP的。
PTP报头定义中各字段的含义如下:
字段 | 含义 | 作用 | 取值 |
---|---|---|---|
transportSpecific | 传输协议 | 标识所用的传输规范 | 0x1 |
messageType | 报文类型 | 标识报文类型 | 参考报文类型表格 |
versionPTP | PTP协议版本 | 标识对应的IEEE 1588版本 | 0x2 |
messageLength | 报文长度 | 标识整个PTP的报头长度 | / |
domainNumber | 域编号 | 标识该报文所属的时钟域 | / |
flags | 标志域 | 对特殊报文的特殊取值有不同作用 | 参考IEEE 802.1AS Table10-6 |
correctionField | 修正域 | 各报文都有,用于Sync报文和补偿传输时延 | 0x0 |
sourcePortIdentity | 源端口标识符 | 标识发送该报文的时钟ID和端口号 | / |
sequenceId | 序列号 | 标识消息的序列号 | / |
control | 控制域 | / | 0x5 |
logMessageInterval | 录入消息周期 | PTP消息的发送时间 | 不同报文类型的取值不同 |
我们的模拟环境一般使用Linux系统 搭建环境,下面是与Linux 系统相关的ptp指令
安装ethtool: sudo apt-get install ethtool
查询网卡是否支持ptp硬件时钟:ethtool --T eno1
安装linux ptp:sudo apt-get install linuxptp
执行ptp4l 从时钟:ptp4l --H --m --i eno1 -s -2 --P
执行ptp4l 主时钟:ptp4l --H --m --i eno1 -2 --P
带配置文件执行ptp4l:ptp4l --H --m --i eno1--f xxx_profile.cfg