通用精确时间协议(generic Precision Time Protocol,gPTP)
概述
该 gPTP 协议栈支持 IEEE 802.1AS-2011 standard 中定义的协议和过程(桥接局域网中时间敏感应用的定时与同步)。
支持的功能
该协议栈处理 IEEE 802.1AS-2011 standard 中定义的通信和状态机。支持标准附录 A 中规定的全双工点对点链路端点强制要求。
该协议栈原则上能够处理多个网络接口(标准中也称为“端口”)上的通信,从而充当 802.1AS 网桥。然而,这种工作模式尚未在 Zephyr OS 上验证。
该协议栈还可以在遵循 IEEE 802.1AS 汽车配置文件、不交换 Announce 消息的网络上作为静态配置的时间接收端运行。请参阅下文的 静态时间接收端操作。
支持的硬件
尽管协议栈本身与硬件无关,但必须在以太网驱动中启用以太网帧时间戳支持。
支持的开发板:
Native simulator - native_sim (仅可用于简单测试,由于缺少硬件时钟,功能受限)
QEMU Emulation for X86 (模拟环境,由于缺少硬件时钟,功能受限)
启用协议栈
必须在 prj.conf 文件中启用以下配置选项。
静态时间接收端操作
按照 IEEE 802.1AS 汽车配置文件(AVnu“Automotive Ethernet AVB Functional and Interoperability Specification”)构建的网络使用静态端口角色,而不是最佳主时钟算法(BMCA)。此类网络上的网桥会发送 Sync 和 Follow_Up 消息,但不发送 Announce 消息,也不需要在其时间发送端(timeTransmitter)端口上应答 Pdelay 请求。默认协议栈无法与这样的网桥同步:如果没有收到 Announce,端口永远不会进入时间接收端(“从节点”)角色。
启用 CONFIG_NET_GPTP_STATIC_TIME_RECEIVER 会将节点配置为静态配置的时间接收端:绕过 BMCA 和所有 Announce 处理,所有端口都固定为时间接收端角色,强制设置 asCapable,因此同步不依赖于 Pdelay 测量,本地时钟仅根据接收到的 Sync 和 Follow_Up 消息进行校准。即使设置了 CONFIG_NET_GPTP_GM_CAPABLE 选项,该节点也永远不会成为 grandmaster(主时钟),并且绝不会发送 Sync 或 Announce 消息。这与 linuxptp ptp4l 的汽车时间接收端配置一致(BMCA “noop”、clientOnly、inhibit_announce、asCapable “true”、ignore_source_id)。以这种方式禁用 BMCA 在标准中的对应做法是 IEEE 802.1AS-2020 的外部端口配置(第 10.3.14 条,源自 IEEE 1588-2019 第 17.6.2 条)。
应用接口
以下标准第 9 节中定义的应用接口可用:
ClockSourceTime接口(gptp_clk_src_time_invoke())ClockTargetPhaseDiscontinuity接口(gptp_register_phase_dis_cb())ClockTargetEventCapture接口(gptp_event_capture())
测试
该协议栈已使用 OpenAVnu gPTP 和 Linux ptp4l 守护进程进行了非正式测试。可以使用 Zephyr 源码发行版中的 gPTP 示例应用 进行测试。