本文基于精读 cds1.6 协议规范得出,在指出车载gPTP机制特殊之处的同时注重细节,同时关注网络中的异常处理。一个有趣的事情是在学习过程中AI不仅不准确,甚至出现了不正确的现象,
这更加说明基于协议原文进行研究以及注重细节的必要性。本文通过对车载gPTP值的配置,车载gPTP行为操作,以及异常处理进行详细分析。如果对gPTP并不了解可以阅读TSN专栏内对gPTP的详解。
如果本文对你有帮助,感谢关注+点赞,转载请注明出处。
1. 车载通用精确时间协议(gPTP)
1.1 概述
通用精确时间协议(gPTP)为以太网中的所有元件提供精确的时基。在汽车环境中,该时基可用于音频/视频应用和控制应用,以提供事件之间的同步。gPTP在汽车音频/视频应用中的使用视频系统的目的是提供用于恢复收听者设备中的媒体时钟的定时基准,并提供跨多个收听者设备的同步媒体递送。
汽车环境的独特之处在于它是一个封闭的系统。每个网络设备在启动之前都是已知的,除非发生故障,否则设备不会进入或离开网络。由于汽车网络的封闭性,可以简化和提高gPTP启动性能。具体而言,像总主控器的选择和线路延迟的计算这样的功能是可以针对封闭系统进行优化的任务。
1.2专属名词解释
OEM - 原始设备制造商。
AED - 汽车以太网设备
AED-B - 汽车以太网桥设备。
AED-E - 车载以太网终端设备。
2. gPTP配置
2.1 静态PTP值
静态gPTP值在系统启动之前配置,存储在非易失性存储器中,并且在系统操作期间预计不会更改。
2.1.1 Grandmaster信息和拓扑
在汽车环境中,期望具有固定的gPTP主设备(AED-GM)。OEM通常将汽车网络配置为具有单个固定的AED-GM,并且所有其他AED作为该主设备的从设备操作。这意味着:所有时间感知端口的gPTP端口角色。独立AED-GM的端口应处于主角色。对于所有非GM终端站,对于包含网桥功能(AED-B)的设备,端口将处于主或从角色,这取决于端口是否指向AED-GM。
AED不支持BMCA,需要识别GrandMaster。应为每个AED定义一个新变量isGM。对于AED-GM,isGM设置为TRUE,对于所有其他AED,isGM设置为TRUE。
2.1.2 asCapable
所有具有时间感知端口的AED应在链路开启时将这些端口的asCapable值设置为TRUE。这允许时间感知端口在启动后以尽可能小的延迟开始接收或发送定时信息。
asCapable作为端口全局变量,含义是判断所接入的设备能够支持gPTP协议。
2.1.3 initialLogPdelayReqInterval
AED应具有一种机制,将所有时间感知端口上的initialLogPdelayReqInterval预配置为与端口所需的初始Pdelay请求间隔相对应的值。
initialLogPdelayReqInterval是对Pdelay请求间隔的初始化值,即Preq的间隔。
2.1.4 initialLogSyncInterval
AED应具有一种机制,将所有时间感知端口上的initialLogSyncInterval预配置为与端口所需初始同步间隔相对应的值。
initialLogSyncInterval 是sync的发送间隔初始化值。
2.1.5 operLogPdelayReqInterval
operLogPdelayReqInterval是操作Pdelay请求间隔。一旦测量值稳定,设备将在所有从机端口上移动到该值。AED应具有一种机制,将所有时间感知端口上的operLogPdelayReqInterval预配置为与端口所需Pdelay请求间隔对应的值。
2.1.6 operLogSyncInterval
operLogSyncInterval是同步间隔,一旦设备实现同步,设备将移动到该同步间隔并在从端口上发出信号。AED应具有一种机制,将所有时间感知端口上的operLogSyncInterval预配置为与端口所需同步间隔对应的值。
2.2永久gPTP值
永久值是AED在更新时存储在非易失性存储器中并在启动时恢复为存储值的值。保存这些值可使AED缩短其启动时间并提高初始定时精度。
2.2.1 neighborPropDelay
Pdelay计算确定节点之间的传播延迟,并将该值存储在neighborPropDelay中。
neighborPropDelay用于计算当前时间。在具有固定线长的封闭汽车网络中,计算的neighborPropDelay应随时间变化不大。AED应将neighborPropDelay存储在非易失性存储器,并在下次启动时使用存储的值。这使设备能够准确计算启动后,AED应尽快返回标准Pdelay消息处理,并根据标准技术开始计算相邻PropDelay
gPTP GrandMaster在计算时间时不使用其neighborPropDelay,因为它是时间的来源。因此,AED-GM不需要计算或保存neighborPropDelay。
当AED处于断电状态时,由于电缆变化,相邻PropDelay可能会发生变化。例如,这可能发生在汽车经过维修或更换部件的情况下。在这种情况下,系统启动时可能会出现计时不准确。这些不准确将在标准Pdelay计算恢复后解决。
如果存储的neighborPropDelay值为零(0),则该值从未被初始化,并且一旦neighborPropDelay稳定,则应使用实际值更新。如果neighborPropDelay的实际值与存储值相差超过100 ns,则AED应将存储值更新为实际值
2.2.2 rateRatio
rateRatio等于GM的频率与LocalClock的频率的比率。rateRatio用于计算当前时间。AED可以在断电之前保存此值,并在通电时恢复它。使用存储的rateRatio可以允许设备在启动时比使用默认的初始rateRatio单位更快地计算准确的时间。但是,由于该比率确实随时间和温度而变化,因此额外的精度并不重要。
2.2.3 neighborRateRatio
neighborRateRatio是在附接到该端口的链路的另一端处的时间感知系统的LocalClock实体的频率的比率的估计,该时间感知系统的LocalClock实体的频率。neighborRateRatio用于计算当前时间。AED可以在断电之前保存该值,并在通电时恢复该值。使用所存储的邻居RateRatio可以允许设备在启动时,比使用默认的初始neighborRateRatio单位更快地计算精确的时间。但是,由于该比率确实随时间和温度而变化,因此额外的精度可能并不重要。
2.3 管理更新值※
管理更新值是AED存储在易失性存储器中的值,但在非易失性存储器中具有可用的默认配置。响应于发生的特定事件或进入的状态,管理程序可以更新这些值。
这里有一个值得注意的事情
当SyncInterval需要更新时,由配置管理层(非时间敏感层)发起
信令消息(Sg)允许在管理层面从Bridge向GM请求参数变更(如SyncInterval调整)
这个过程发生在配置管理平面,不干扰时间同步平面
协议中两种信令流的共存:
标准时间流:GM → Bridge → Endpoint(通过Sync消息)
配置请求流:Endpoint → Bridge → GM(通过带外Signaling消息)
2.3.1 SyncInterval
SyncInterval定义端口的平均时间同步事件消息生成间隔。[gPTP]中定义的默认值为125毫秒。SyncInterval对启动时的系统同步时间有直接影响,因为AED必须至少接收两(2)条Sync消息才能获得基本同步。但是,在实现初始同步后,可以使用更大的SyncInterval来维护同步,并相应地减少CPU负载和网络开销。
为了利用减少的CPU负载和网络开销,AED上的gPTP从端口可以通过使用具有消息间隔请求TLV的gPTP信令消息来请求增加SyncInterval。初始同步间隔用变量initialLogSyncInterval设置,AED上的主端口应处理接收到的gPTP并正确地对其采取行动在收到消息后,在以下时间间隔中较大的时间间隔内发送消息:
Two of the current Sync message intervals,
250ms.
AED-B可以使用gPTP信令技术来基于其主端口上的同步间隔来改变其从端口上的同步间隔。在这种情况下,AED-B的从端口的同步间隔应该跟踪等于桥接器上所有活动AS主角色端口上的最短同步间隔的值。如果AED-B确实减小了其从端口上的同步间隔,它应在导致更新的事件发生后4秒内执行此操作。
值得注意的是AED-B 通过主端口的值来影响其从端口,印证了管理的方向是自下而上的,这里是同一个brige设备的主端口和从端口。
如果AED端口经历链路断开/接通事件,则在链路接通时,同步间隔状态机应恢复到其初始化状态。具体而言:
在AED-E从机端口上,设备应清除与先前信令相关联的任何状态,并且设备应在向主机发送较慢速率的信令之前等待时间同步。
在AED-B主端口上,设备应将SyncInterval恢复为initialLogSyncInterval。AED-B应根据需要在其从端口上发出更新间隔的信号。
在AED-B从端口上,AED-B应期望链路伙伴端口恢复到其initialLogSyncInterval,然后可以根据其每个从主端口上的当前速率在端口上用信号通知所需速率。
在AED-GM主端口上,器械应将SyncInterval恢复为initialLogSyncInterval,并且器械应等待更多信号。
2.3.2 pdelayReqInterval
pdelayReqInterval定义端口的平均Pdelay_Req消息生成间隔。发送Pdelay_Req消息以确定neighborPropDelay。在固定拓扑网络中,此值不应随时间变化,因此需要很少运行计算。变量initialLogPdelayReqInterval控制pdelayReqInterval的启动速率
一旦neighborPropDelay已经稳定,LogPdelayReqInterval的值应该被设置为减少与计算neighborPropDelay相关联的网络开销和CPU负载的值。任何operLogPdelayInterval的值不同于initialLogPdelayInterval的值的从端口,应将其logPdelayReqInterval设置为operLogPdelayInterval,如果从端口意外地没有接收到对其Pdelay请求消息的任何响应,在neighborPropDelay已经稳定在恒定值长达60秒之后,它将不改变其logPdelayReqInterval。
2.4 gPTP Signaling Message ※
具有消息间隔请求TLV的gPTP信令消息被设计为允许端口调整从其链路伙伴端口接收消息的速率。该TLV可以在gPTP中用于请求伙伴端口上的timeSyncInterval、linkDelayInterval和announceInterval的改变。在汽车配置文件中,此消息仅用于请求修改伙伴端口上的timeSyncInterval。AED从属角色端口应支持此TLV传输。具有主角色端口的AED应支持在每个主角色端口上处理该TLV。AED应忽略在从角色端口上接收到的任何gPTP信令消息。
这说明管理信息的方向是单向的,是自下而上的。
当AED在主角色端口上处理接收到的gPTP信令消息时,AED应相应地更新接收端口的syncInterval,并忽略linkDelayInterval和announceInterval的值。建议AED在发送三条Sync消息之前不要改变速率,如果速率较慢,则建议AED在发送三条Sync消息之前不要改变速率,以减少在链路伙伴处发生syncReceiveptance的可能性。
2.5 gPTP所需值※
这里的initial代表的是初始值,oper代表的是可进行操作的范围
总结:在车载gPTP中,对一些初始化值进行储存-为了更快的完成时间同步,并且在稳定后对实际值进行增大-为了减少时间同步的带宽占用。而操作的时间一般在3条信息发送后,在完成时间同步60s内。当储存值与实际操作值差距过大时,更改为实际值。
3. gPTP 操作
在汽车环境中,AED执行gPTP操作与标准实施方式略有不同。这些差异是:
BMCA不应执行。从概念上讲,每个设备都应预先配置BMCA在之前运行并达到静态操作状态时会达到的结果。在汽车网络中既不需要也不期望通知消息,因为BMCA未被执行。在没有BMCA的情况下,网络中将始终只有一个设备被配置为GM,并且没有其他设备将成为GM。
sourcePortIdentity不校验,由于汽车网络中没有Announce报文,AED从机在收到第一条Sync报文之前,无法获知链路伙伴的sourcePortIdentity,因此AED从机端口不应对Sync和Follow_Up报文的sourcePortIdentity字段进行校验。
AED-GM应在启动后尽快开始发送Sync和Follow_Up消息。
对于AED-B来说:
失去同步期间的AED-B同步处理:在正常操作期间,AED-B将在其从端口上接收并处理同步消息。如果AED-B在其从端口上检测到这些同步消息的终止,AED-B将使用在从端口上接收到的最近有效记录作为其基础,继续从其主端口发送同步消息。B应在其发送的所有Follow_Up消息中使用从GM接收的最近有效记录的preciseOriginTimestamp,并应在其发送的所有Sync和Follow_Up消息中提前correctionField,以反映自接收最近有效记录以来已经过去的时间。AED-B应使用其本地时基和任何已知的cumulativeScaledRateOffset对这些消息进行计算。
AED-B同步恢复:如果AED-B在其从端口上接收到有效的同步消息,则它应更新该记录并恢复正常的同步操作。在这种情况下,网桥不需要避免、减轻或报告相位跳变。这说明其realy station的性质,不对精准源时间戳进行更改。
AED-B同步缺失:启动时,如果AED-B在可配置时间内未在从属端口上接收到同步消息,则应使用默认时间记录,并开始发送具有恒定精确OriginTimestamp的同步消息,并在其主角色端口上提前校正。等待初始同步消息的时间可由用户配置,但不得超过20秒
AED-B固定GM信息:无论同步消息接收的状态如何,AED-B都不得修改其发送的任何同步或Follow_Up消息中的gmTimeBaseIndicator、lastGMPhaseChange或scaledLastGMFreqChange字段。这几个值在上一篇gPTP详解中有讲到,含义分别,GM时基变化,相位变化,频率变化。
AED-E时间跳跃:由于AED-GM和AED-B之间的同步消息生成切换,AED-E从机可能会在接收到的同步消息中看到时间跳跃。夏令时或其他时钟调整也可能导致时间跳跃。这里要理解时间跳跃是什么含义,如何产生。由于在车载网络中,GM可能会丢失信号,如在隧道中接受不到GPS,下游的器件就会以AED-B为时钟基准,这时候报文中的preciseOriginTimestamp,correctfiled都会发生跳变。这也是车载网络的 Holdover机制。
AED-EHoldover:当前未接收同步消息的AED-E从机将根据其本地时基和任何已知的累积ScaledRateOffset继续将其gPTP时钟前行,
AED-E同步恢复:如果AED-E在其从属端口上接收到有效的同步消息,则其应更新其时间记录并恢复正常同步操作。
由于存在固定的时钟生成树,AED-B实现可以选择仅在一个方向上执行延迟测量AED-B不需要在其处于主角色的时间感知端口上发起对等延迟请求。在车载gPTP中,可以只由Slave进行Preq的发送。
4. 异常处理
4.1 Loss of Sync Messages
在IEEE 802.1AS网络中,如果处于从属角色的时间感知端口经历AVB Sync丢失(通过端口上的链路丢失或SyncReceivptError事件检测到),则将触发相应的BMCA活动。然而,根据第6节,BCMA不在汽车以太网网络中运行。相反,检测AVB Sync丢失的AED应表现如下:
标记时间戳并记录事件以供以后检索;时间戳应以gPTP时间报告。
如果是AED-B,则转换到代理操作。当AED-B处于代理操作时,它应生成Sync和Follow_Up消息以代替实际GM。代理网桥应使用与GM相同的时间间隔来生成消息,直到AVB Sync丢失,并且消息均应包含恒定的时间戳和前进校正字段。一旦AED-B恢复AVB同步,它将停止代理操作并转换回正常操作
4.2 Non-Continuous Sync Values
为了检测gPTP时基不连续性,AED-E:
应监控correction和preciseOriginTimestamp字段,在GM离线期间,由于AED-B处于代理操作状态,因此correction字段会变大,然后当GM重新上线时,correction字段会突然跳回一个很小的值。
ECU应监控gmTimeBaseIndicator字段的变化。gmTimeBaseIndicator字段的变化表明GM具有新的时基,这将在GM故障时发生,然后重新联机。
在检测到Sync值的不连续时:
AED应标记时间戳并记录同步中断的异常事件;应根据其最近成功恢复的时基,以gPTP时间报告时间戳。
slave应适应时基的变化,而不会在媒体播放中出现可辨别的故障。
4.3 Pdelay Response Timeout
在IEEE 802.1AS设备中,如果发生三个连续的Pdelay响应超时事件,则端口的asCapable变量被设置为“超时”,这又导致端口上指定的802.1AS协议活动的停止。
在汽车网络中,情况并非如此- asCapable对于端口将保持为TRUE,并且协议将使用先前的Pdelay测量按原样继续(包括以配置的间隔发送Sync消息)。
因此,Pdelay响应测试仅用于诊断,对其他AVB行为没有影响,AED应继续以配置的间隔发送Pdelay消息。
4.4 neighborPropDelay value
如果neighborPropDelay超过配置的阈值,则从端口不需要触发异常事件
这里很有意思,原文只有简单的一句话,可是有很多问题:
1.为什么不触发?
由于时钟波动,如点火造成的延时超限,只记录。如果频繁触发异常事件,会影响带宽。在“过度报警”和“风险潜伏”间取得的精妙平衡。
2.从端口不触发,主端口的行为如何?
主端口将 SyncInterval缩短 修正 neighborPropDelay异常
3.为什么可以对neighborPropDelay进行修正?
缩短SyncInterval → 增加单位时间采样数N → 降低随机误差影响→ 降低neighborPropDelay异常概率。