AUTOSAR基础篇之CanTsyn

这篇具有很好参考价值的文章主要介绍了AUTOSAR基础篇之CanTsyn。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AUTOSAR基础篇之CanTsyn

前言

首先,请问大家几个小小问题,你清楚:

  • 你知道为什么需要进行时间同步吗?
  • 时间同步的应用场景有哪些呢?
  • 当前主流的时间同步方案有哪些吗?
  • 对于CAN 时间同步的协议又是怎样设计的呢?

今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:

AUTOSAR基础篇之CanTsyn


正文

为何需要时间同步

时间同步,顾名思义就是用来保证多方在同一时刻使用的都是全局且一致的时间戳。随着自动驾驶的浪潮日益高涨,中央集中式架构越来越成为主机厂更为青睐的选择。

既然选择了中央集中式架构,就同时意味着整个架构中会存在多种不同传感器数据的融合,而完成数据融合的一个基本前提就是各个传感器传过来的数据需打上对应的时间戳,为了保证各传感器使用的时间戳一致性,就必然需使用时间同步方案来保证各个传感器的全局时间基准是唯一的。

讲清楚了为什么需要时间同步,怎么选择合适的时间同步方案同样是各个主机厂或者Tier1需要仔细考虑的问题,当前对于ADAS领域的时间同步大体可以分为如下几种,见如下图1:

AUTOSAR基础篇之CanTsyn

图1 时间同步方案比较

因此,基于上述几大常见的时间同步方案的区别,我们需要从我们实际的应用场景,精度要求,系统设计等方面综合分析来选择合适的时间同步方案。

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

Can Tsync 协议框架

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

协议软件架构

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

AUTOSAR基础篇之CanTsyn

图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。

AUTOSAR基础篇之CanTsyn

图3 SYNC and FUP 报文格式

Offset Message

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

AUTOSAR基础篇之CanTsyn

图4 OFS and OFNS的报文格式
Time Master

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

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

AUTOSAR基础篇之CanTsyn

图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所示:

    AUTOSAR基础篇之CanTsyn

图6 SYNC/FUP报文与CRC关系
  • 通过参数 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所示:

    AUTOSAR基础篇之CanTsyn

图7 Offset Message与CRC关系
  • 通过参数 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报文的完整流程。

AUTOSAR基础篇之CanTsyn

图8 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,那么就只能接收0x20SYNC报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成 CRC_NOT_VALIDATED,那么就只能接收0x10SYNC报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成 CRC_IGNORED,那么可以接收0x10或者0x20SYNC报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x28FUP报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成CRC_NOT_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x18FUP报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成CRC_IGNORED,CanTsyn模块仅接收一定SC的ID为0x28或者0x18FUP报文,其他报文将会忽略;

  • 针对每一个Time Slave,CANTsyn模块需配置参数CanTSynGlobalTimeFollowUpTimeout来完成针对SYNC报文之后FUP报文的接收超时时间阈值且内部状态被重置准备接收新的SYNC报文;

  • 当一个完整有效的SYNC/FUP报文接收之后,便会调用函数 StbM_BusSetGlobalTime() 来完成全局时间基准的对齐;

Offset Message报文处理流程

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

  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,那么就只能接收0x40OFS报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成 CRC_NOT_VALIDATED,那么就只能接收0x30OFS报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成 CRC_IGNORED,那么可以接收0x40或者0x30OFS报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成CRC_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x48OFNS报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成CRC_NOT_VALIDATED,CanTsyn模块仅接收一定SC的ID为0x38OFNS报文,其他报文将会忽略;

  • 如果参数CanTSynRxCrcValidated配置成CRC_IGNORED,CanTsyn模块仅接收一定SC的ID为0x48或者0x38OFNS报文,其他报文将会忽略;

  • 针对每一个Time Slave,CANTsyn模块需配置参数CanTSynGlobalTimeFollowUpTimeout来完成针对SYNC报文之后FUP报文的接收超时时间阈值且内部状态被重置准备接收新的OFS报文;

  • 当一个完整有效的OFS/OFNS报文接收之后,便会调用函数 StbM_SetOffset() 来完成全局时间基准的对齐;

报文解析流程

1.Global Time Calculation

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

AUTOSAR基础篇之CanTsyn

图9 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的计算结果应保持一致;
  • 最终计算出最新的全局同步时间基准;

更多精彩内容,敬请关注公众号“ADAS与ECU之吾见”!
文章来源地址https://www.toymoban.com/news/detail-410787.html

到了这里,关于AUTOSAR基础篇之CanTsyn的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UDS服务基础篇之14

    前言 你知道如果系统产生了DTC,应当如何清除呢? 14服务具体的执行流程如何? 14服务在使用过程中的常见bug又有哪些? 这篇,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲: 正文 根据 ISO14119-1 标准中所述,诊断服务14主要用于Client向Server

    2023年04月17日
    浏览(74)
  • #车载基础软件——AUTOSAR AP技术形态

    我是穿拖鞋的汉子! 今天是2023年2月11日,时间好快,疫情解封已好几个月,生活节奏也在逐渐恢复到三年前的节奏。可能是感觉疫情与自己距离变远了,大家也开始慢慢的不再恐惧! 老规矩分享一段喜欢的文字,避免自己成为高知识低文化的工科男: 我们都太迷恋结尾!这

    2023年04月26日
    浏览(95)
  • 使用AUTOSAR来开发汽车基础软件的优点

    1、高质量 。以前我们采用手写代码的方式,是几个工程师在战斗。现在我们采用平台,BSW代码都是供应商提供的,我们相当于后面还有一个团队陪着我们在战斗。 2、低成本 。大家都说采用AUTOSAR平台好贵,但是从长远来看是值得的,因为你不用花很多人力和时间成本去找

    2024年02月02日
    浏览(58)
  • Autosar存储入门系列01_NVM基础

    最近工作比较忙,下班到家都快十点了,实在是没有多余的精力输出,但整理写作的过程我一直觉得就是与自己对话的过程,一场一个人的修行,通过这个过程让自己对知识点的理解更加清晰、成体系,所以我一直在坚持,成人达己,也希望能对阅读的伙伴带来收获。 本篇是

    2024年02月12日
    浏览(58)
  • Selenium基础篇之指定窗口关闭

    大家好,我是空空star,本篇给大家分享一下Selenium基础篇之指定窗口关闭。 本篇使用的selenium版本如下: Version: 4.8.2 本篇使用的浏览器如下: 访问C站首页,在toolbar搜索框输入selenium,点击搜索按钮; 在搜索结果页,点击第一个selenium资源标题; 先关闭搜索结果页窗口①;

    2023年04月09日
    浏览(37)
  • Selenium基础篇之屏幕截图方法

    大家好,我是空空star,本篇给大家分享一下Selenium基础篇之屏幕截图方法。 本篇使用的selenium版本如下: Version: 4.8.2 本篇使用的浏览器如下: Selenium截图是一种捕获网页屏幕截图的方式,它可以帮助开发人员在测试网页时捕获问题和错误,以便更好地分析和解决问题。 当测

    2023年04月27日
    浏览(73)
  • Selenium基础篇之键盘操作(一)

    大家好,我是空空star,本篇给大家分享一下Selenium基础篇之键盘操作。 本篇使用的selenium版本如下: Version: 4.8.2 send_keys() 方法用于输入文本, send_keys(Keys.ENTER) 方法用于模拟“回车”键, send_keys(Keys.TAB) 方法用于模拟“Tab”键, send_keys(Keys.SPACE) 方法用于模拟“空格”键,

    2024年02月01日
    浏览(40)
  • [AutoSar]基础部分 RTE 08 runnable mapping

       嵌入式、C语言、autosar、runnable 项目 Value OS autosar OS autosar厂商 vector 芯片厂商 TI 编程语言 C,C++ 编译器 HighTec (GCC) 回到总目录   runnable如果不mapping的话只是相当于一个函数,OS无法调度,并且一定会在Davinci configurator中报错(当前runnable未mapp)。   runnable mapping到t

    2024年01月22日
    浏览(42)
  • Selenium基础篇之Select下拉列表选择

    大家好,我是空空star,本篇给大家分享一下Selenium基础篇之Select下拉列表选择。 本篇使用的selenium版本如下: Version: 4.8.2 本篇使用的浏览器如下: 在Selenium中,Select是一个非常有用的类,它用于操作HTML页面中的下拉列表。使用Select可以方便地选择下拉列表中的选项,或者获

    2023年04月08日
    浏览(40)
  • 协议篇之以太网协议基础概念

      在学习了串口协议后,发现通过串口传输数据,数据传输的速率较慢,无法符合高速率传输场景下的要求,所以开始学习以太网协议,本文中学习了在以太网协议中的一些基础性的概念,为学习以太网协议的数据帧格式、时序等打个基础。   以太网(Ethernet)是一种计

    2023年04月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包