深入解读车载时间同步

#Technomous #gPTP

时间同步协议介绍

目前广泛使用的时间同步协议主要是三种 NTP(Network Time Protocol)、PTP(Precision Time Protocol)和 TTEthernet(SAE AS6802)。

NTP(网络时间协议)是较旧的时间系统。通常从 GPS 网络中的卫星接收时间信息。通常 NTP 时间精度是毫秒级别。NTP 时间不足以满足越来越多的应用程序,它无法提供金融交易、国家电网和 5G 通信、智慧城市、大数据人工智能等行业的精确计时,所以通过整合更加精确时间协议(PTP)到原有的时间网络中。与经常在软件中实现的 NTP 相比,PTP 更喜欢对时间戳进行硬件处理以获得更高的准确性。随着网络设备处理时间戳和补偿内在延迟,PTP 提供了时间感知分组网络这种更高水平的同步。丰富的性能监控功能使 PTP 成为关键任务应用程序的更好的计时技术。

PTP 的主要特点是其基于 IEEE 1588 标准的同步机制,这种机制可以精确地测量网络中的时间差异,并使用这种信息来同步网络中的所有设备。在汽车电子域控制器中,PTP 可以用于将时间信息从一个 ECU 传递到另一个 ECU,从而实现时间同步。

车载中常用的 gPTP(Generalized Precision Time Protocol)协议是 PTP 的扩展版本,它是 IEEE 802.1AS-2011 标准的一部分,被设计用于满足汽车工业的特定需求。

Pasted image 20241122173428.png

PTP 与 gPTP 的差异

PTP 和 gPTP 的协议差别如下:

类别 PTP(IEEE 1588-2008) gPTP(IEEE 802.1AS-2011)
传输延时测量方式 支持 P2P 方式和 E2E 方式 仅支持 P2P 方式
时间戳采样方式 支持 MAC 层,也支持 Layer3,Layer4 的时间戳 仅支持 MAC 层时间戳
时钟同步类型 既支持单步模式,也支持双步模式 仅支持双步模式
时钟类型 存在多种类型的时钟:原始时钟,边界时钟,E2E 透传时钟,P2P 透传时钟 存在两种时钟:端节点节点时钟,桥接节点时钟
桥接节点兼容性 可以使用 TSN 网络,也适用于非 TSN 网络 仅适用于 TSN 网络
Important

  • P2P 方式:透传节点(桥接设备)需要记录驻留时间,并加入到报文中
  • E2E 方式:只需要端到端的时间差,误差比较大,但是对中间的透传设备要求低
  • 时间戳采样方式:如果是 MAC 采样,那么确定性比较高,误差比较小,如果在 IP 层或者 UDP 层采样时间戳,由于受到操作系统调度的影响,精度不高
  • 时钟同步类型:双步模式对 MAC 的要求相较于单步模式,增加了 Follow_Up 消息,但是对 MAC 层的要求较低,便于网络扩展与应用

AUTOSAR 规范中针对 gPTP 做了进一步的限制和约束:

gPTP 协议介绍

Pasted image 20240111161710.png|650

在当今的汽车电子域控制器中,时间同步成为了一个非常重要的需求。这主要是因为汽车中各个 ECU(电子控制单元)之间需要进行高效且可靠的信息交换,以实现诸如自动驾驶、智能交通控制、车辆远程信息处理等功能。而要实现这些功能,就需要一个统一的时间基准,以确保各个 ECU 能够协同工作。gPTP(Generalized Precision Time Protocol)就是为此目的而设计的。

gPTP 的主要特点是其能够适应汽车环境中的各种网络拓扑结构,包括 CAN、LIN、MOST、Ethernet 等。此外,gPTP 还具有更好的鲁棒性和可靠性,能够处理网络中的故障和延迟,从而确保时间同步的准确性。

总的来说,汽车电子域控制器需要时间同步是因为需要各个 ECU 协同工作以实现复杂的功能。而 gPTP 则是为了满足这一需求而设计的协议。通过使用这些协议,可以确保汽车中的各个 ECU 具有精确且一致的时间基准,从而实现高效且可靠的信息交换。

gPTP 协议原理

Pasted image 20240311154245.png|650

在 gPTP 协议中,时间同步是按照“域”(domain)划分的,包含多个 PTP 节点。在这些 PTP 节点中,有且仅有一个全局主节点(GrandMaster PTP Instance),其负责提供时钟信息给所有其他从节点。PTP 节点分为两类:PTP End Instance(PTP 端节点)和 PTP Relay Instance(PTP 交换节点)。其中,PTP End Instance 可以作为 GrandMaster,也可以接收来自 GrandMaster 的时间同步信息。PTP Relay Instance 从某一接口接收时间同步信息,修正时间同步信息后,转发到其他接口。

gPTP 要完成的主要任务包括:主时钟的分配,时钟频率同步,延迟时间测量和时钟偏差测量。下面我们就来深入聊一聊每个功能。

主时钟的分配

gPTP 的主时钟选择机制是“最佳主时钟算法(BMCA)”。选择启动算法是,所有可能成为主时钟的端点都会参与竞争。要启动 BMCA 算法,所有端点都通过发送 Announce 报文来宣告自己的能力。各个端点比较自己与其他端点的相关字段值,胜出者作为主时钟端点。但车辆是一个封闭的网络,不会出现节点总变化的情况,所以车载应用中,主时钟往往都是固定的,比如网关。

时钟频率同步

网络中各个节点的时钟的频率并不总是完全一致。比如,在实际为 100 秒的时间段时间,A 节点的时钟可能计时为 90 秒,B 节点的时钟可能计时为 100 秒(实际中不可能出现如此大的偏差,但偏差总是有的,这里只是举例说明)。所以 gPTP Slave 的时钟频率需要与 master 相匹配。频率同步的实现方式如下图所示:

Pasted image 20240111111215.png|200

在实际的 gPTP 通信中,master 会不停地发送 Sync 和 Follow-up,slave 能够测量出自己收到 Sync 报文的时间,即上图中的 T2 和 T4(这个时间是以 slave 的本地时钟为基准的)。在每个 sync 报文之后,master 都会发送一个 follow-up 报文,用来告诉 slave 自己发送上一条 Sync 报文时的时间戳(以 master 的本地时钟为基准)。没有 follow-up 报文的话,slave 无法确定 Sync 报文的实际发送时间,即上图的 T1 和 T3。有了 T1、T3 和 T2、T4,slave 就能够计算出自己的时钟频率与 master 之间的偏差,计算式如下图所示:

R=T3T1T4T2

延迟时间测量

为了将自己的时钟与 master 同步,slave 必须测量出自己与 master 之间报文传递的延迟时间。时延测量使用到的上文中提到的 PDelay_Req、PDelay_Resp 和PDelay_Resp_Followup 三种 gPTP 报文。具体的测量方式如下图所示:

Pasted image 20240111111715.png|300

  1. 首先 slave 发送 PDelay_Req 报文,请求测量延迟时间
  2. PDelay_Req 报文离开物理层时,slave 利用本地时钟获得 T1 时间戳
  3. PDelay_Req 报文到达应答方物理层,master 利用本地时钟获得 T2 时间戳
  4. master 生成一个 PDelay_Resp 报文并发送,将 T2 时间戳带给 slave
  5. slave 利用本地时钟可以捕获收到 PDelay_Resp 时的时间戳 T4
  6. 然后 master 会发送 PDelay_Resp_Followup 报文将 T3 带给 slave

这样 slave 就知道 T1,T2,T3,T4 这四个时间戳了,然后利用如下算式计算延迟时间:

delay=(T4T1)R(T3T2)2

其中 R 是在上节中提到的计算出的 slave 与 master 之间的时钟频率偏差。这种计算方法中,认为信道是对称的,即报文从 slave 到 master 和 master 到 slave 所经历的延时是一样的。

时钟偏差测量

根据上文计算出延迟时间和频率差异之后,slave 就可以利用 master 不断发送的 sync 和 follow_up 报文将自己的时钟与 master 进行同步了。

具体的同步方式如下图所示:

Pasted image 20241014163351.png|250

计算公式如下图所示:

Ta=T1+delay+(TbT2)R

在上述计算公式中,Tb 是 slave 在某时刻本地时间戳,Ta 是该时刻 master 上的本地时间戳。同步的目的,就是根据 Tb 可以推算出 Ta 的值。在这个计算式中,slave 通过 sync 和 follow_up 报文获得 T1 和 T2,delay 和 R 在之前的延迟时间和频率差异计算中已经获得。所以,slave 能够根据本地时间戳 Tb 计算出 master 上的时间戳 Ta,时间同步就实现了。

gPTP 报文结构

Pasted image 20241121185225.png|650

gPTP 协议位于 OSI 模型的第二层,可以依赖于以太网传输。gPTP 报文利用以太网传输时 Ethertype = 0x88F7。gPTP 协议中的报文被划分成为了报文级别(Message Class)和报文种类(Message Type)两个属性,其中报文级别的具体划分如下:

Message 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
Attention

  • Announce 报文是在主时钟分配中启用,包含最佳主时钟的运算时间
  • Signaling 报文主要用来传递信息、请求或控制指令

gPTP 报文由 3 部分组成:

  1. Header(对所有 gPTP 都一样)
  2. Body(取决于 gPTP 报文类型)
  3. TLV(type length value)

其中 Header 是所有类型的 gPTP 报文都有的,它有 34 个字节,结构如下图所示:

Pasted image 20241014161301.png|650

Header 中各字段的含义如下:

字段 含义 作用 取值
MsgType 报文类型 标识报文类型 参考报文类型表格
TranSpec 传输协议 标识所用的传输规范 0x1
verPTP PTP 协议版本 标识对应的 IEEE 1588 版本 0x2
MsgLength 报文长度 标识整个 PTP 的报头长度 /
DomainNumber 域编号 标识该报文所属的时钟域 /
FlagField 标识域 对特殊报文的特殊取值有不同作用 参考 IEEE 802.1 AS Table 10-6
CorrectionField 修正域 各报文都有,主要应用于 Sync 报文,用于补偿传输时延 0x0
SourcePortIdentity 源端口标识符 标识发送该报文的时钟 ID 和端口号 /
SequenceID 序列号 标识消息的序列号 /
ControlField 控制域 / 0x5
logMsgInterval 录入消息周期 PTP 消息的发送时间 不同类型报文的取值不同

Body

取决于 gPTP 报文类型,即 Message Type。具体可参考上面的表格。

gPTP 方案介绍

AutoSAR 时间同步

Pasted image 20230721173812.png|650

上图是 AUTOSAR 时间同步的软件架构图。AUTOSAR 中的时间同步可以基于多个通信方式,比如 CAN、FR、ETH 等。这里我们着重看一下以太网的时间同步。Ethernet TimeSync 时间同步协议是基于 IEEE 802.1AS 规范中定义的 gPTP 标准协议发展出来的一套协议,该模块的时间同步原理与 gPTP 协议一致,只不过在协议内容方面,AUTOSAR 规范进行了一些扩展,丰富了 gPTP 时间同步内容。gPTP 协议位于 OSI 模型的 2 层之上,可以依赖于以太网传输。gPTP 报文利用以太网传输时, MAC 报头中的 Ethertype = 0x88F7。以太网的时间同步功能涉及到的模块有 Ethernet Driver,Ethernet Interface,Ethernet TimeSync 以及 StbM 模块等。其中 Ethernet Driver,Ethernet Interface 模块提供时间同步报文的收发解析,Ethernet TimeSync 模块负责时间同步协议解析,StbM 负责时间同步统一管理与分发,为应用层提供全局时间戳服务。

LinuxPTP 时间同步

Pasted image 20240108112615.png|350

LinuxPTP 整个是运行在用户态的软件,使用 Linux 内核提供的相关应用程序编程接口。LinuxPTP 主要包含两个软件,一个是 ptp4l,一个是 phc2sys。