时间同步 - AUTOSAR之CanTsyn

本文将主要讲解AUTOSAR时间同步方案,并仅CANTsyn时间同步方案为例来介绍AUTOSAR时间同步协议的整个过程,对于AUTOSAR的以太网时间同步等方案基本一致,大家可以举一反三。

Can Tsync 协议框架

首先介绍下整个Can Tsync的整个协议栈框架,主要包含以下两个方面,一个是协议软件架构,这部分主要描述了Can 时间同步的协议栈组成;另一个则是协议初始化,此部分则用来描述使用该协议之前必须要做的初始化工作。

协议软件架构

如下图2所示描述了整个Can 时间同步方案的协议栈软件架构:

在上图中我们看到AUTOSAR时间同步方案又可以根据传输传输介质的不同分为如下四种时间同步方式:

  • CAN TimeSync:基于CAN总线完成时间同步;

  • FR TimeSync:基于Flexray总线完成时间同步;

  • Eth TimeSync:基于车载以太网完成时间同步;

  • CDD TimeSync:基于其他外设驱动完成时间同步;

其中CAN 时间同步过程由如下模块Can Driver, Canif,Can Tsync,StbM组成,三个软件模块各司其职,进而完成基于CAN的时间同步,具体分工如下:
  • Can Driver:提供CAN接收与发送能力;
  • Canif:负责发送或接收承载着时间同步信息的报文;
  • Can Tsync:负责时间同步协议的实现;
  • StbM:负责抽象基于不同传输介质的AUTOSAR时间同步协议,为整个软件系统来提供时间同步之后的全局时间戳;

协议初始化

基于Can的时间同步协议初始化包含如下过程:

  • 执行CanTSyn_Init()函数来完成内部变量的初始化与内部状态的初始化;
  • 当未执行CanTSyn_Init()函数却调用了CanTsync模块其他除去获取版本号的函数就会上报Det错误;
  • Sequence Counter必须初始化为0;


CAN Timesync 报文格式


SYNC and FUP Message

如下图3所示为SYNC Message 与 FUP Message的报文格式,这两类报文应成对存在,DLC为8,两类报文都共用同样一个CAN ID。

Offset Message

如下图4所示为Offset Message中的OFS 与OFNS Message的报文格式,这两类报文应成对存在,DLC为8,两类报文都共用同样一个CAN ID。

Time Master

所谓“Time Master”就是主时钟的意思,不过该主时钟也是要在一定时钟域内的主时钟,因为主时钟的定义可以是相对的 。

如下图5所示清楚了描述了在AUTOSAR时间同步策略中几种时钟角色:

从上图中我们可以看到在一个Time Domain中存在如下三种时间同步节点:

  • Time Master:在同一Time Domain中提供全局时间基准的主时钟;
  • Time Gateway:在同一Time Domain中既作为上级时钟源的从时钟,又同时作为网关域内的主时钟源;
  • Time Slave:在同一Time Domain中作为需要同步的从时钟;

如果Time Master是全局时间基准的拥有者,那么该Time Master就被称为Global Time Master。Time Gateway一般作为网关域内的多个Time Slave的主时钟。

SYNC and FUP 报文处理流程

时间同步的过程发生在Time Master与Time Slave之间,Time Master通过发送带有全局时间信息的SYNC 报文与Followup 报文对,Time Slave通过接收并处理这两类报文进而完成与Time Master的时间同步,大家就这样把各自的时钟表也对上了。

同时SYNC与FUP 报文在发送过程存在诸多细节需要密切关注,否则很有可能造成时间同步无效。

  • 在同一Time Domain中SYNC 报文与FUP 报文必须成对出现才能够成功完成一次时间同步;
  • Time Master中SYNC报文发送出去之后,如果在等待CanTsyn_Txconfirmation()超出一定时间,该时间通过参数 CanTSynMasterConfirmationTimeout来设定,那么Time Master应当主动重置内部状态并开启一次新的SYNC 报文发送(超时时间需比SYNC与FUP之间的时间间隔以及FUP与SYNC之间的时间间隔两者中的最小时间还要短);
  • Time Master应按照参数CanTSynGlobalTimeTxPeriod的周期限定来完成SYNC报文周期性发送;
  • SYNC跟FUP序列不能被打乱,即使是同一Time Domain也不例外;

通过参数CanTSynGlobalTimeTxCrcSecured来确保SYNC跟FUP报文是否需要添加CRC保护,是否添加CRC保护将决定同步报文中的第一个字节的值,如下图6所示:

  • 通过参数 CanTSynGlobalTimeTxFollowUpOffset来控制SYNC报文发送之后触发FUP 报文的时间间隔;

Offset Message报文处理流程

Offset Message报文处理流程与上述流程基本相似,概括起来可以表述为以下几点:

  • 在同一Time Domain中,每次Offset Message序列均由OFS Message与OFNS Message组成且必须成对出现;
  • Time Master中OFS报文发送出去之后,如果在等待CanTsyn_Txconfirmation()超出一定时间,该时间通过参数 CanTSynMasterConfirmationTimeout来设定,那么Time Master应当主动重置内部状态并开启一次新的OFS 报文发送(超时时间需比OFS与OFNS之间的时间间隔以及OFS与OFNS之间的时间间隔两者中的最小时间还要短);
  • Time Master应按照参数CanTSynGlobalTimeTxPeriod的周期限定来完成OFS报文周期性发送;
  • OFS跟OFNS序列不能被打乱,即使是同一Time Domain也不例外;

通过参数CanTSynGlobalTimeTxCrcSecured来确保OFS跟OFNS报文是否需要添加CRC保护,是否添加CRC保护将决定同步报文中的第一个字节的值,如下图7所示:

  • 通过参数 CanTSynGlobalTimeTxFollowUpOffset来控制OFS报文发送之后触发OFNS报文的时间间隔;

传输模式

AUTOSAR 时间同步方案可以通过标准API函数CanTSyn_SetTransmissionMode(Controller, Mode) 来完成针对CAN时间同步报文的发送请求控制。

  • 当Mode == CANTSYN_TX_OFF,所有在该对应物理CAN通道上的时间同步报文发送请求均将被舍弃;
  • 当Mode == CANTSYN_TX_ON, 所有在该对应物理CAN通道上的时间同步报文发送请求均能够被正确处理;

报文装配流程

1.Global Time Calculation

如下图8所示,我们可以通过时序图能够清晰的看到作为Time Master 装配SYNC/FUP报文的完整流程。

如果是基于SYNC Time Base,根据上图具体装配过程可拆解成如下几个步骤:

  • 发送SYNC报文中通过函数**StbM_GetCurrentTime()来获取T0的秒部分,T0= SyncTimeSec,同时通过函数StbM_GetCurrentTimeRaw()**获取T0raw的原始值;
  • 在得到发送SYNC报文的Txconfirmation的过程中通过调用函数**StbM_GetCurrentTimeDiff()**来获取与T0raw之间的时间间隔,然后将T4 = T0ns + T0diff的ns部分通过FUP报文发送出去;
  • 如果T4 >= 1秒,那么将T4的秒部分写入到OVS位中,T4的ns部分则写入SyncTimeNSec中;
  • 通过上述步骤的SYNC/FUP报文的装配发送过程,我们就可以知道当前Time Master发送出去的全局时间基准为T0+T4。

如果是基于Offset Time Base,那么装配过程如下图所示:

  • 通过函数StbM_GetOffset()获取秒部分,并写入到OfsTimeSecLsbLo,OfsTimeSecLsbHi,OfsTimeSecMsb中;
  • 将Offset Time Base的ns部分写入到OfsTimeNSec中;

2.OVS Calculation

在FUP报文发送的过程中如果存在Time Master的ns的范围(uint32),那么溢出的秒部分应填入到OVS域。

3.SGW Calculation

如果StbM模块中的timeBaseStatus中的STBM_SYNC_TO_GATEWAY bit位没有置位,那么SGW就应该设置为SyncToGTM=0,否则应该设置为SyncToSubDomain=1。

4.Sequence Counter Calculation

在每一个Time Domain中,该Sequence Counter(简称SC)应按照0-15依次循环,SYNC报文与OFS报文的SC每发一次报文就只能依次加1,同时FUP与OFNS报文中的SC应分别与SYNC及OFS报文一致,依次递增。

5.CRC Calculation

如果针对时间同步报文均配置了CRC,那么采用的统一的CRC算法为 Crc_CalculateCRC8H2F(),其中CRC算法中的初始值为0xFF,CRC多项式为0x2F,CRC最终XOR值应为0xFF, 其中CRC的计算范围为SYNC/FUP报文中Byte2-Byte7再加上配置的DataID值,该DataID值与SC Counter一一对应,DataID的值由DataIDList[SC]来决定。

综上所示,上述几个过程会按照如下的先后顺序来进行:

  • 在FUP报文中计算OVS;
  • 在FUP报文中计算SGW;
  • 计算SC;
  • 拷贝所有的数据至相应的报文位置;
  • 计算CRC;

Time Slave


Time Slave作为被同步的对象,仅需通过接收 SYNC/FUP报文便可以跟Time Master同步上时间,获得最新同步的全局时间基准。

SYNC and FUP 报文处理流程

对于接收Time Master发出的SYNC/FUP报文的Time Slave,为了保证时间同步信息的准确性,有必要对输入的时间同步报文信息进行一系列的检查,如下是常见的Checklist:

  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,那么就只能接收0x20的SYNC报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成 CRC_NOT_VALIDATED,那么就只能接收0x10的SYNC报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成 CRC_IGNORED,那么可以接收0x10或者0x20的SYNC报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x28的FUP报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成CRC_NOT_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x18的FUP报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成CRC_IGNORED,CanTsyn模块仅接收一定SC的ID为0x28或者0x18的FUP报文,其他报文将会忽略;
  • 针对每一个Time Slave,CANTsyn模块需配置参数CanTSynGlobalTimeFollowUpTimeout来完成针对SYNC报文之后FUP报文的接收超时时间阈值且内部状态被重置准备接收新的SYNC报文;
  • 当一个完整有效的SYNC/FUP报文接收之后,便会调用函数 StbM_BusSetGlobalTime() 来完成全局时间基准的对齐;

Offset Message报文处理流程

与SYNC/FUP报文类似,Offset Message的OFS/OFNS报文对于Time Slave对象也需要进行如下一系列的检查:

  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,那么就只能接收0x40的OFS报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成 CRC_NOT_VALIDATED,那么就只能接收0x30的OFS报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成 CRC_IGNORED,那么可以接收0x40或者0x30的OFS报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x48的OFNS报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成CRC_NOT_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x38的OFNS报文,其他报文将会忽略;
  • 如果参数CanTSynRxCrcValidated配置成CRC_IGNORED,CanTsyn模块仅接收一定SC的ID为0x48或者0x38的OFNS报文,其他报文将会忽略;
  • 针对每一个Time Slave,CANTsyn模块需配置参数CanTSynGlobalTimeFollowUpTimeout来完成针对SYNC报文之后FUP报文的接收超时时间阈值且内部状态被重置准备接收新的OFS报文;
  • 当一个完整有效的OFS/OFNS报文接收之后,便会调用函数 StbM_SetOffset() 来完成全局时间基准的对齐;

报文解析流程

1.Global Time Calculation

如下图所示9所示清晰地描述了作为Time Slave如何接收SYNC/FUP报文并最终完成全局时间基准同步地过程:

如果是基于SYNC Time Base,根据上图具体装配过程可拆解成如下几个步骤:

  • 当接收到SYNC报文之后,获得到T0时间,此时通过调用函数 **StbM_GetCurrentTimeRaw()**获得当前的T2raw;
  • 当接收到FUP报文之后,便可以从FUP报文获取T4=(OVS+SyncTimeNSec),同时调用**StbM_GetCurrentTimeDiff()**基于T2raw来获取两者之间的时间差T3diff = (T3raw-T2raw);
  • Time Slave同步之后的全局时间基准为 (T3raw - T2raw) + (T0 + T4);
  • 如果是基于Offset Time Base,根据上图具体装配过程可拆解成如下几个步骤:
  • 将Offset time base的秒部分同步至OfsTimeSecLsbLo, OfsTimeSecLsbHi*,*OfsTimeSecMsb这三个区域;
  • 将Offset Time base的ns部分同步至OfsTimeNSec;

2.OVS Consideration

对于Time Slave对象,在FUP报文中必须考虑到OVS的秒部分,并最终参与到全局时间同步基准的计算过程中。

3.SC Validation

针对Time Slave对象,Sequence Counter(SC)必须先完成如下检查,才会正确接收到SYNC/FUP时间同步报文序列:

  • 在同一Time Domain内的同一SYNC/FUP报文序列的SC应始终保持一致,如果不一致,那么之前接收到的SYNC报文将会被丢弃,收到的FUP报文也会被丢弃;
  • 在同一Time Domain内的同一OFS/OFNS报文序列的SC应始终保持一致,如果不一致,那么之前接收到的SYNC报文将会被丢弃,收到的FUP报文也会被丢弃;
  • 在前后两个SYNC/OFS报文的SC的间隔不能超过参数配置CanTSynGlobalTimeSequenceCounterJumpWidth的值,设置为0则不被允许;
  • 由于Time Slave与Time Master两者启动的不同步性,因此对于Time Slave对象,针对首次接收SYNC/OFS报文中的SC值不做任何要求,保证能够正常接收并处理;


4.CRC Validation

如果针对时间同步报文均配置了CRC,那么采用的统一的CRC算法为 Crc_CalculateCRC8H2F(),其中CRC算法中的初始值为0xFF,CRC多项式为0x2F,CRC最终XOR值应为0xFF, 其中CRC的计算范围为SYNC/FUP报文中Byte2-Byte7再加上配置的DataID值,该DataID值与SC Counter一一对应,DataID的值由DataIDList[SC]来决定。

值得注意的是Time Master与Time Slave的DataIDList应始终保持一致,否则CRC计算的结果就没法保持一致,报文就不能够被Time Slave对象正常接收处理。

综上所述,时间同步报文的解析过程总体而言可以分为如下几个基本步骤:

  • 根据CanTSynRxCrcValidated参数来决定是否接收对应的SYNC/FUP报文;
  • SC应该匹配成对应的期望的值;
  • Time Doamin应与内部配置的Time Domain匹配上;
  • FUP/OFNS报文中的ns部分不应超出指定的范围(uint32);
  • CRC的计算结果应保持一致;
  • 最终计算出最新的全局同步时间基准;
  • 意的是Time Master与Time Slave的DataIDList应始终保持一致,否则CRC计算的结果就没法保持一致,报文就不能够被Time Slave对象正常接收处理。**

综上所述,时间同步报文的解析过程总体而言可以分为如下几个基本步骤:

  • 根据CanTSynRxCrcValidated参数来决定是否接收对应的SYNC/FUP报文;
  • SC应该匹配成对应的期望的值;
  • Time Doamin应与内部配置的Time Domain匹配上;
  • FUP/OFNS报文中的ns部分不应超出指定的范围(uint32);
  • CRC的计算结果应保持一致;
  • 最终计算出最新的全局同步时间基准;

### AUTOSAR 时间同步机制及实现方式 #### 基本概念 AUTOSAR(汽车开放系统架构)提供了一套标准化的方法来确保分布式系统的各个节点之间的时间一致性。时间同步对于实时性和安全性至关重要的应用尤为重要,比如车辆控制系统中的多个ECU之间的协调工作。 #### Synchronized Time-base Manager (StbM) Synchronized Time-base Manager 是负责管理和维护全局一致性的时基的服务组件[^2]。它通过收集来自不同源的时间信息并计算出一个统一的参考时间,从而使得整个网络内的设备能够保持同步。 #### CAN 总线上的时间同步 在基于CAN总线的环境中,通常采用广播的方式来进行时间同步- **Master Node**: 发送带有精确时间戳的消息给所有Slave Nodes。 - **Slave Nodes**: 接收这些消息,并据此调整自身的内部时钟以匹配Master Node 的时钟。 具体来说,在一次完整的同步过程中,CAN Time Slave 需要从CAN Time Master 获取 `s(t0r)` 和 `t4r` 这两个时刻的数据,以此为基础进行本地时间的校正[^3]。 ```c // C code example for receiving and processing time sync message on a slave node. void processTimeSyncMessage(const CanMsg_t* msg) { uint64_t masterTimestamp = extractTimestampFromCanMsg(msg); adjustLocalClock(masterTimestamp); // Adjust local clock based on received timestamp } ``` #### Ethernet 上的时间同步 (EthTSync) 除了传统的CAN总线外,现代汽车也越来越多地使用Ethernet作为通信媒介。在这种情况下,则会利用IEEE 1588 Precision Time Protocol (PTP),即所谓的EthTSync协议来达到更高级别的精度和可靠性。 #### 实现细节与注意事项 为了保证时间同步的有效性,还需要考虑以下几个方面: - 消息格式的设计应遵循特定的标准; - 序列计数器用于防止重复包的影响; - 对接收到的时间数据做必要的验证; - 加入适当的安全措施以防篡改或攻击行为; 以上提到的内容可以在具体的配置实践中进一步细化,涉及到诸如 StbM, CanTSyn 及 CanIf 等模块的具体设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值