点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
目录
在当今的汽车电子域控制器中,时间同步成为了一个非常重要的需求。这主要是因为汽车中各个ECU(电子控制单元)之间需要进行高效且可靠的信息交换,以实现诸如自动驾驶、智能交通控制、车辆远程信息处理等功能。而要实现这些功能,就需要一个统一的时间基准,以确保各个ECU能够协同工作。
PTP(Precision Time Protocol)和gPTP(Generalized Precision Time Protocol)就是为此目的而设计的。
PTP是一种用于计算网络中时间同步的协议,它最初是为工业自动化应用而设计的。PTP的主要特点是其基于IEEE 1588标准的同步机制,这种机制可以精确地测量网络中的时间差异,并使用这种信息来同步网络中的所有设备。在汽车电子域控制器中,PTP可以用于将时间信息从一个ECU传递到另一个ECU,从而实现时间同步。
gPTP则是PTP的一个扩展版本,它被设计用于满足汽车工业的特定需求。gPTP的主要特点是其能够适应汽车环境中的各种网络拓扑结构,包括CAN、LIN、MOST、Ethernet等。此外,gPTP还具有更好的鲁棒性和可靠性,能够处理网络中的故障和延迟,从而确保时间同步的准确性。
总的来说,汽车电子域控制器需要时间同步是因为需要各个ECU协同工作以实现复杂的功能。而PTP和gPTP则是为了满足这一需求而设计的协议。通过使用这些协议,可以确保汽车中的各个ECU具有精确且一致的时间基准,从而实现高效且可靠的信息交换。
PTP(Precision Time Protocol,精确时间协议)是一种时间同步的协议,可用于设备之间的高精度时间同步和频率同步。PTP的时间同步精度为亚微秒级。
PTP协议标准即PTP profile。不同类型的PTP协议标准可实现不同的PTP功能。PTP协议标准包括以下类型:
· IEEE 1588 version 2:简称1588v2。IEEE 1588规范了网络中用于高精度时钟同步的原理和报文交互处理规范,最初是应用于工业自动化,现主要用于桥接局域网。IEEE 1588对网络环境没有做出强制要求,适用性比较广,可以根据不同的应用环境对该协议标准进行定制,增强或者裁剪特定的功能。最新版本为V2版本,即1588v2。
· IEEE 802.1AS:简称802.1AS。802.1AS是基于IEEE 1588产生的一个协议标准,对IEEE 1588在桥接局域网中的实现进行了细化。802.1AS支持的BMC(Best Master Clock,最佳主时钟)算法和IEEE 1588略有不同,参考了MSTP(Multiple Spanning Tree Protocol,多生成树协议)的实现方式。802.1AS支持的物理介质类型只有点对点全双工以太网链路、IEEE 802.11链路和IEEE 802.3 EPON链路。
· SMPTE ST 2059-2:简称ST2059-2。ST2059-2是基于IEEE 1588产生的一个协议标准,本协议自定义了一些参数,参数的默认值,参数的允许范围的描述。ST2059-2是专门用于专业广播环境中音频、视频设备的时间同步的精准时间协议。
· AES67-2015:AES67-2015是基于IEEE 1588产生的一个协议标准,本协议自定义了一些参数,参数的默认值,参数的允许范围的描述。AES67-2015是专门用于专业广播、音乐制作和影视后期制作设备的时间同步的精准时间协议。
gPTP协议是Precision Time Protocol的简称,是一种用于精确时间同步的协议。它是IEEE 802.1AS标准的一部分,主要应用在局域网网络中,可以实现亚微秒级的时间同步。
gPTP协议通过使用硬件支持的时间戳和测量网线上的传输延时来达到精确的时间同步。在gPTP网络中,每个节点都有一个本地时钟,用于生成时间戳。当一个节点发送一个数据包时,它会在数据包中添加一个时间戳,然后接收节点在接收到数据包后,会测量从发送节点到接收节点的传输时间,并计算出偏移量。这个偏移量会被用来调整接收节点的本地时钟,以确保它与发送节点的时钟同步。
gPTP协议具有以下特点:
1.基于硬件时间戳:gPTP协议使用硬件时间戳来记录数据包的发送和接收时间,这样可以避免软件时间戳引入的误差和不确定性。
2.测量传输时间:gPTP协议可以测量数据包从发送节点到接收节点的传输时间,从而计算出偏移量并调整接收节点的本地时钟。
3.多跳同步:gPTP协议可以支持多跳同步,即可以通过中间节点的传递来实现更远距离的节点之间的同步。
4.适应网络拓扑:gPTP协议可以适应不同的网络拓扑结构,如星型、树型、环型等。
5.可靠性和鲁棒性:gPTP协议具有可靠性和鲁棒性,可以在网络中出现故障或延迟时仍然保持同步精度。
总之,gPTP协议是一种高精度的时间同步协议,适用于需要精确时间同步的局域网网络应用场景。
• gPTP假设PTP实例之间的所有通信仅使用IEEE 802 MAC pdu和寻址完成,而IEEE Std 1588-2019支持各种第2层和第3-4层通信方法。
• gPTP指定了一个独立于媒体的子层,它简化了具有完全不同的媒体访问协议的多种不同网络技术在单个定时域中的集成。gPTP为每种媒体指定一个与媒体相关的子层。在PTP实例之间交换的信息被一般化,以支持不同的数据包格式和适合特定网络技术的管理方案。另一方面,IEEE Std 1588-2019引入了一种基于媒体独立和媒体依赖子层的新架构(参见IEEE Std 1588-2019的6.5.2、图5和图6);然而,这种体系结构是可选的。IEEE标准1588-2008 [B10]的体系结构不是基于媒体独立和媒体依赖层,它被保留在互联网协议(IP)版本4、IP版本6、以太网局域网和几个工业自动化控制协议中。IEEE Std 1588- 2019的意图是,基于媒体独立层和媒体依赖层的新架构将用于使用gPTP规范的IEEE 802.11网络、IEEE 802.3 EPON和CSN,并且如果使用了本机定时机制,则必须将该架构用于定义本机定时机制的传输。
•在gPTP中只有两种类型的PTP实例:PTP结束实例和PTP中继实例,而IEEE Std 1588-2019有普通时钟,边界时钟,端到端透明时钟和P2P透明时钟。PTP结束实例对应于IEEE 1588普通时钟,而PTP中继实例是IEEE 1588边界时钟的一种,其操作定义非常严格,以至于具有以太网端口的PTP中继实例可以在数学上等同于如何执行同步的P2P透明时钟,如11.1.3所示。此外,PTP中继实例可以在一种模式下运行(即,变量syncLocked为TRUE的模式;参见10.2.5.15),其中PTP中继实例在发送时间同步消息方面相当于P2P透明时钟。时间感知系统测量链路延迟和停留时间,并在校正场中进行通信。综上所述,PTP中继实例符合IEEE Std 1588-2019中对边界时钟的规范,但PTP中继实例不符合IEEE Std 1588-2019中对P2P透明时钟的完整规范,因为:
–当syncLocked为FALSE时,PTP中继实例根据边界时钟的规格发送同步,并且
–PTP中继实例调用BMCA并具有PTP端口状态。
• PTP实例只与其他PTP实例直接通信gPTP信息。也就是说,一个gPTP域只由PTP实例组成。非ptp中继实例不能用于中继gPTP信息。在IEEE Std 1588-2019中,可以在IEEE 1588域中使用非IEEE-1588感知继电器,尽管这会减慢时间收敛并引入额外的抖动和抖动,必须由任何IEEE 1588时钟滤波。
•e)对于全双工以太网链路,gPTP要求使用点对点延迟机制,而IEEE Std 1588-2019也允许使用端到端延迟测量。f)对于全双工以太网链路,gPTP需要使用两步处理(使用Follow_Up和Pdelay_Resp_Follow_Up消息来通信时间戳),可选的一步处理模式是在同步中嵌入时间戳,因为它们正在传输(gPTP没有指定对对等延迟消息的一步处理)。IEEE Std 1588-2019允许根据特定配置文件需要两步或一步处理(同步和对等延迟消息)。
•一个gPTP域中所有的PTP实例在逻辑上是同步的;换句话说,它们都使用相同的频率来测量时间间隔。这是通过7.3.3中描述的过程完成的,并且是强制性的。IEEE Std 1588-2019中的同步是可选的。gPTP使用的同步方法在IEEE Std 1588-2019中作为一种选项得到支持,但使用的是IEEE Std 1588-2019中标准化的TLV(此功能是IEEE Std 1588-2019的新功能),而gPTP使用11.4.4.3中指定的ORGANIZATION_EXTENSION TLV。
•)最后,本标准包括时间感知应用的正式接口定义,包括原语(见第9条)。IEEE标准1588-2019描述外部接口,但没有描述特定的接口原语。
•OC(Ordinary Clock,普通时钟):该时钟节点在同一个PTP域内只有一个PTP接口参与时间同步,并通过该接口从上游时钟节点同步时间。此外,当时钟节点作为时钟源时,可以只通过一个PTP接口向下游时钟节点发布时间。
•BC(Boundary Clock,边界时钟):该时钟节点在同一个PTP域内拥有多个PTP接口参与时间同步,它通过其中一个接口从上游时钟节点同步时间,并通过其余接口向下游时钟节点发布时间。此外,当时钟节点作为时钟源时,可以通过多个PTP接口向下游时钟节点发布时间,如图1-1中的BC 1。
•TC(Transparent Clock,透明时钟):TC有多个PTP接口,但它只在这些接口间转发PTP协议报文并对其进行转发延时校正,而不会通过任何一个接口同步时间。与BC/OC相比,BC/OC需要与其他时钟节点保持时间同步,而TC则不与其他时钟节点保持时间同步。TC包括以下两种类型:
•E2ETC(End-to-End Transparent Clock,端到端透明时钟):直接转发网络中所有PTP协议报文,参与计算整条链路的延时。
•P2PTC(Peer-to-Peer Transparent Clock,对等透明时钟):只直接转发Sync报文、Follow_Up报文和Announce报文,而终结其他PTP协议报文,参与计算整条链路上每一段链路的延时。
主从关系(Master-Slave)是相对而言的,对于相互同步的一对时钟节点来说,存在如下主从关系:
•主/从节点:发布同步时间的时钟节点称为主节点(Master Node),而接收同步时间的时钟节点则称为从节点(Slave Node)。
•主/从时钟:主节点上的时钟称为主时钟(Master Clock),而从节点上的时钟则称为从时钟(Slave Clock)。
•主/从接口:时钟节点上发布同步时间的PTP接口称为主接口(Master Port),而接收同步时间的PTP接口则称为从接口(Slave Port),主接口和从接口均可存在于BC或OC上。
•此外,还存在一种既不发布也不接收同步时间的PTP接口,称为被动接口(Passive Port)。
在autosar 架构中,时间同步的对上层使用接口,时间同步协议,底层通讯介质都是相互独立解耦的存在。
基于以太网的 gPTP 协议涉及到的模块有以下几个。
STBM(Software Timer Bus)是AUTOSAR软件定时器总线模块,它提供了一个用于管理软件定时器的统一接口,并支持在分布式系统中对多个软件组件进行时间同步。STBM模块通过定义一个时间戳接口来传递定时器事件,并使用一个时间同步状态接口来报告时间同步的状态。
ETHTsync是AUTOSAR中用于以太网时间同步的模块。它通过以太网连接接收来自其他节点的时钟同步信号,并使用该信号来同步自己的时间。ETHTsync模块还提供了一个接口,以便其他软件组件可以通过调用其接口来获取当前的时间戳。
ETHIF是AUTOSAR中用于以太网接口的模块。它提供了一个用于发送和接收以太网数据包的接口,以便在车辆网络中实现数据通信。ETHIF模块支持各种以太网协议,包括TCP/IP、UDP等。
MCAL(Microcontroller Abstraction Layer)是AUTOSAR微控制器抽象层模块。它位于AUTOSAR BSW(Basic Software)的最底层,为上层软件提供了一个统一的接口来访问微控制器和外设芯片。MCAL主要包括微控制器驱动、存储器驱动、通信驱动和输入输出驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组成。此外,MCAL还包含加密驱动和无线通讯驱动等其他部分。
对于对时本身来说,最重要的有两个事情。
•StbM 与 下层的协议时间信息
•StbM 为 上层应用提供时间信息
所以从StbM 的角度,无所谓时间来源,也可以说无所谓时间的对与错。只需要知道时间已经被“同步”,可以获取到时间信息。当然也会提供一些set时间的接口,这本质还是让 时间对其。
在main函数中,主要是同步系统时间宇stbm的时间信息。下面有一个全局变量的维护作为基础。
StbM_TimeStampType StbM_GlobalTimeTupleArray_ast[STBM_CFG_NUM_OF_TIMEBASES];
代码逻辑如下
我们把重点放在下面的gPTP 协议本身
在 gPTP 中 main函数主要维护了
•同步报文
•发送消除误差报文
•响应消除误差报文
主要体现在上面三个状态机。在这三个状态机里面用来
发送 sync, follow up 报文
发送 peer_delay_req 报文
响应 peer_delay_req 报文
具体的实现来自于下面几个子集状态机。
需要说明一下。sync 和 follow up 报文 是master 发送给slaver 用来时间同步用。
peer delay 是消除传输误差的作用。
master 主动发送sync 和 follow up 报文来对slaver 进行时间信息传入。这个是向的过程。
通过函数
static void EthTSyn_GetHwTime( uint8 CtrlrIdx_u8,
uint8 BufIdx_u8,
uint8 *MsgType_pu8,
Eth_TimeStampType *TimeStampPtrCurrent_pst,
uint8 IdxDomain_u8,
uint8 IdxGlbTim_u8 )
获取硬件时间戳,经过Follow Up 报文发送出去。如果前面的STBM 与 ETH 的时间已经同步完成,注意这里不是与外部时间同步。
那么控制器是在哪里拿到系统时间的呢。这里我们使用ETH硬件MAC 时间。下面是时间戳寄存器。可以读取。
如果说需要更新mac 的时候,需要对其他寄存器进行操作。这里不一一列取。通过Mcal 提供的函数进行更新系统时间戳。
/*******************************************************************************
** **
** Traceability : [cover parentID={0CC425E3-DC66-46d8-AB0B-587E1C70CDEA}] **
** **
** Syntax : Std_ReturnType Eth_17_GEthMac_SetGlobalTime **
** (const uint8 CtrlIdx, **
** const Eth_TimeStampType* const timeStampPtr) **
** **
** Description : Allows the Time Master to adjust the global ETH **
** Reference clock in HW. We can use this method to **
** set a global time base on ETH in general or to **
** synchronize the global ETH time base with another **
** time base, e.g. FlexRay. **
** **
** [/cover] **
** **
** Service ID : 0x1b **
** **
** Sync/Async : Synchronous **
** **
** Reentrancy : Non Reentrant **
** **
** Parameters (in) : CtrlIdx - Index of Eth Controller within the **
** context of the Ethernet driver. **
** timeStampPtr - new time stamp **
** **
** Parameters (out) : None **
** **
** Return value : Std_ReturnType - E_OK: successful **
** E_NOT_OK: failed **
** **
*******************************************************************************/
Std_ReturnType Eth_17_GEthMac_SetGlobalTime(const uint8 CtrlIdx, const
Eth_TimeStampType* const timeStampPtr)
其实就是对这些寄存器(没完全列出来)进行了操作。即更新了MAC 的时间戳。
Ifx_GETH_MAC_SYSTEM_TIME_HIGHER_WORD_SECONDS MAC_SYSTEM_TIME_HIGHER_WORD_SECONDS;
peer delay 是为了消除master 到 slaver, 和 slaver 到master. 这是平等的过程,也是一样的过程。这里只介绍一下master发送peerdelay req.
在发送过程中是不需要带有时间信息的。只是响应端需要回复带有时间信息的报文。即 response, response follow up. 因为发送端是知道自己发送时候的具体时间的。
autosar 实现的具体逻辑分流
这时候slaver 收到req之后,进行响应response. 逻辑如下
这里就出现一个问题,看着response 和 follow up 报文一样,但是发送的内容是不一样的。所以autosar 组包,组以太网包
/**
***************************************************************************************************
* \Function Name : EthTSyn_ComposePdelayRespMsg()
*
* \Function Description
* Composes Pdelay_Resp message
*
* Parameters (in) :
* \param BufPtr_pu8 - Buffer pointer
*
* Parameters (inout):
* None
*
* Parameters (out):
* None
*
* Return Value: None
* Return Type : void
***************************************************************************************************
*/
void EthTSyn_ComposePdelayRespMsg( uint8 *BufPtr_pu8 )
/**
***************************************************************************************************
* \Function Name : EthTSyn_ComposePdelayRespFollowUpMsg()
*
* \Function Description
* Composes Pdelay_Resp_Follow_Up message
*
* Parameters (in) :
* \param BufPtr_pu8 - Buffer pointer
*
* Parameters (inout):
* None
*
* Parameters (out):
* None
*
* Return Value: None
* Return Type : void
***************************************************************************************************
*/
void EthTSyn_ComposePdelayRespFollowUpMsg( uint8 *BufPtr_pu8 )
反向过程,同上
更多文章
会员权益: (点击可进入)谈思实验室VIP会员