【小猫爪】AUTOSAR学习笔记10-Communication Stack之CanTsyn模块

  • 前言
  • 1 时间同步的引入
  • 2 时间同步的角色
  • 3 时间同步过程
    • 3.1 四种报文
    • 3.2 时间同步过程
  • END

前言

  这一节来稍微介绍一下基于CAN总线实现时间同步的CanTsyn模块。

1 时间同步的引入

  时间同步有啥用呢?就拿现在爆火的ADAS来说,域控制器需要融合雷达,摄像头等传感器的数据,然后进行算法融合所有传感器的数据后最终才能进行判断和执行,这个时候就存在一个问题,因为传感器数据并不都是来源于同一个ECU,所以就需要一个手段来保证域控融合的所有传感器数据都是产自同一时刻,所以传感器在向域控制器发送传感数据时都需要加上一个时间戳,所以让车上所有的ECU里面的时间戳都保证一模一样就成了必要的事情。

  而CanTsyn模块就是基于CAN总线的时间同步方案,所以它的功能也是非常的简单,就是接收一些时间同步报文,然后根据报文中包含的时间信息获取当前时间。

  这里多说一句,还有在Ethernet总线上的负责时间同步的模块叫做EthTSyn模块,这个模块其实就是基于PTP (Precision Time Protocol)协议搞出来的,有的朋友可能还知道gPTP,gPTP其实是PTP协议的一个子集,而EthTSyn模块则是针对汽车应用基于PTP还额外做出一点点改变,感兴趣的朋友可自行搜索一下。

2 时间同步的角色

  时间同步框架如下图所示:

  Time Domain:表示哪些组件(例如节点,通信系统)链接到某个时基。一个时域可以没有、包含一个或多个子时域。如果时域的时序层次结构中不包含时间网关,即所有节点都连接到同一总线系统,则不存在子时域。
  Time Subdomain:表示哪些组件(例如节点)链接到某个时基,范围仅限于一条通信总线。
  Global Time Master: 在整个Time Domain中提供全局时钟基准的主时钟。
  Time Master:在同一个Time Subdomain中提供全局时间基准的主时钟。
  Time Gateway:在整个Time Domain中既作为上级时钟源的从时钟,又同时作为下级时钟源的主时钟源。
  Time Slave:在一个Time Subdomain中作为需要同步的从时钟。

3 时间同步过程

  基于CAN总线的时间同步过程从下至上可分为CANDrv、CanIf、CanTsyn、StbM四个模块,如下:

  其中CanTsync模块负责时间同步实现,而StbM则负责抽象基于不同传输介质的AUTOSAR时间同步协议,为整个软件系统来提供时间同步之后的全局时间戳。其他总线原理和过程一样,下面就以CanTsync模块为例说明一下时间同步过程。

3.1 四种报文

  在时间同步过程中主要有SYNC、FUP、OFS、OFNS 这四种报文,每一种报文又分为需要校验 CRC 和不需要校验 CRC 两种方式,有无CRC校验由参数CanTSynGlobalTimeTxCrcSecured决定。

  在时间同步过程中,SYNC和FUP报文为一组,需要成对发送和接收,其格式如下:

报文类型 (Type)Byte0 Byte1 Byte2 Byte3 Byte4~Byte7
SYNC no CRC 0x10 User Data, 默认为 0 bit7 ~ bit4:Time Domain
bit3 ~ bit0:Sequence Count
User Data, 默认为 0 SyncTimeSec:48 位秒的低 32 位的部分时间
SYNC CRC 0x20 CRC Time Domain(bit7 ~ bit4)
Sequence Count(bit3 ~ bit0)
User Data, 默认为 0 SyncTimeSec:48 位秒的低 32 位的部分时间
FUP no CRC 0x18 User Data,默认为 0 Time Domain(bit7 ~ bit4)
Sequence Count(bit3 ~ bit0)
bit7 ~ bit3:保留位,默认为0;
bit2:SGW, 时间网关同步状态, 当 SGW 值为 0 时,本地时间与 GTM 同步;当 SGW 值为 1 时,本地时间与 GTM 下的 TG 同步。bit1 ~ bit0:OVS,SyncTimeNSec 溢出的部分
SyncTimeNSec:以纳秒为单位的 32 位的时间戳
FUP CRC 0x28 CRC Time Domain(bit7 ~ bit4)
Sequence Count(bit3 ~ bit0)
bit7 ~ bit3:保留位,默认为0;
bit2:SGW, 时间网关同步状态, 当 SGW 值为 0 时,本地时间与 GTM 同步;当 SGW 值为 1 时,本地时间与 GTM 下的 TG 同步。bit1 ~ bit0:OVS,SyncTimeNSec 溢出的部分
SyncTimeNSec:以纳秒为单位的 32 位的时间戳

  在时间同步过程中,OFS和OFNS 报文为一组,需要成对发送和接收,其格式如下:

报文类型 (Type)Byte0 Byte1 Byte2 Byte3 Byte4~Byte7
OFS no CRC 0x30 User Data, 默认为 0 bit7 ~ bit4:Time Domain
bit3 ~ bit0:Sequence Count
OfsTimeSecLsbHi:从 secondsHi 开始的 8 位偏移时间戳(LSB) OfsTimeSecLsbLo:来自 secondsLo 的 32 位偏移时间戳(LSB)
OFS CRC 0x40 CRC Time Domain(bit7 ~ bit4)
Sequence Count(bit3 ~ bit0)
OfsTimeSecLsbHi:从 secondsHi 开始的 8 位偏移时间戳(LSB) OfsTimeSecLsbLo:来自 secondsLo 的 32 位偏移时间戳(LSB)
OFNS no CRC 0x38 User Data,默认为 0 Time Domain(bit7 ~ bit4)
Sequence Count(bit3 ~ bit0)
OfsTimeSecMsb :从 secondsHi 开始的 8 位偏移时间戳(MSB) OfsTimeNSec :以纳秒为单位的 32 位的时间戳
OFNS CRC 0x48 CRC Time Domain(bit7 ~ bit4)
Sequence Count(bit3 ~ bit0)
OfsTimeSecMsb :从 secondsHi 开始的 8 位偏移时间戳(MSB) OfsTimeNSec :以纳秒为单位的 32 位的时间戳

:当参数CanTSynUseExtendedMsgFormat为TRUE时,OFS和OFNS的报文格式就会发生改变,这里就不多做介绍了,感兴趣的朋友可参考AUTOSAR官方文档。

3.2 时间同步过程

  CanTsyn模块的时间同步过程如下图所示:

  1. TM节点在t0r时刻调用接口发送SYNC信号,SYNC信号中包含当前时间戳为s(t0r),在t1r时刻SYNC信号发送完成,此时的时间为t1r,所以从TM开始发送报文,到发送成功需要时间t4r = t1r - t0r; 此时TM节点再次发送FUP信号,信号中包含的时间信息为t4r = t1r - t0r。

  2. TS节点在t2r时刻接收到了SYNC报文;在t3r时间接收到了FUP报文。

  3. 根据以上信息,TS节点在接收完SYNC和FUP报文的时候,即可根据下面的式子算出当前时间:real time = t3r-t2r+s(t0r)+t4r。

  对于CanTsyn模块的基本原理就说到这里了,其实还有很多小细节没有涉及到,比如Sequence Count的检查, OVS处理, CRC校验等,感兴趣的朋友可以参考文章:《AUTOSAR基础篇之CanTsyn》。

END

【小猫爪】AUTOSAR学习笔记10-Communication Stack之CanTsyn模块相关推荐

  1. 【小猫爪】AUTOSAR学习笔记12-功能安全之E2E模块

    [小猫爪]AUTOSAR学习笔记12-功能安全之E2E模块 前言 1 E2E模块简介 2 E2E功能简介 2.1 五种保护机制 2.2 E2E的状态机 2.3 E2E Protection Wrapp ...

  2. 【小猫爪】AUTOSAR学习笔记00-目录

    [小猫爪]AUTOSAR学习笔记00-目录   因为一个偶然的机会让我接触到了AUTOSAR,所以就花一点小小的时间来记录一下学习它的坎坷大道.这其中复制粘贴了很多,也包括了我的一些个人的小小见解和废 ...

  3. 【小猫爪】AUTOSAR学习笔记03-Communication Stack之CanIf模块

    [小猫爪]AUTOSAR学习笔记03-Communication Stack之CanIf模块 前言 1 CanIf简介 2 功能介绍 2.1 发送缓冲区 2.2 CAN Controller 模式控制 ...

  4. 【小猫爪】AUTOSAR学习笔记02-Communication Stack简介

    [小猫爪]AUTOSAR学习笔记02-Communication Stack简介 前言 1 简介 2 CAN消息的传播路径 2.1 Com服务 2.2 Dcm服务 2.3 SM服务和NM服务 3 补充 ...

  5. 【小猫爪】AUTOSAR学习笔记06-Communication Stack之ComM模块

    [小猫爪]AUTOSAR学习笔记06-Communication Stack之ComM模块 前言 1 ComM简介 2 ComM功能介绍 2.1 PNC 状态管理 2.2 Channel状态管理 2. ...

  6. 【小猫爪】AUTOSAR学习笔记16-Memory Stack之Nvm模块

    [小猫爪]AUTOSAR学习笔记16-Memory Stack之Nvm模块 前言 1 Memory Stack结构 2 NvM模块 2.1 Block 2.2 数据结构 2.3 Redundant B ...

  7. 【小猫爪】AUTOSAR学习笔记17-AUTOSAR OS

    [小猫爪]AUTOSAR学习笔记17-AUTOSAR OS 前言 1 OS 基础 1.1 Startup和Shundown 1.2 Task 1.3 Counter 1.4 Alarm 1.5 Res ...

  8. 【小猫爪】AUTOSAR学习笔记15-BswM模块

    [小猫爪]AUTOSAR学习笔记15-BswM模块 前言 1 BswM模块简介 2 BswM功能简介 2.1 模式仲裁 2.2 模式控制 END 前言   上一节介绍了一个非常夸张的EcuM模块,其中 ...

  9. 【小猫爪】AUTOSAR学习笔记14-EcuM模块

    [小猫爪]AUTOSAR学习笔记14-EcuM模块 前言 1 EcuM模块简介 2 EcuM功能简介 2.1 EcuM的状态机 2.2 RUN和POST_RUN 2.3 Startup阶段 1. St ...

最新文章

  1. Lenovo Setup(安装程序)
  2. python中函数的括号使用
  3. spark Docker镜像构建及push脚本
  4. MVC, MVP, MVVM比较以及区别(下)
  5. KVC/KVO 本质
  6. 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
  7. java后台解析json并保存到数据库_[Java教程]ajax 发送json 后台接收 遍历保存进数据库...
  8. 使用pip安装包提示TLS证书错误解决办法
  9. Effective C# 原则38:使用和支持数据绑定(译)
  10. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机
  11. 斗鱼赴美递交IPO招股书:拟登陆纽交所 融资5亿美金
  12. 【数据库系统设计】DBMS的数据库保护
  13. android 控件高度和图片一样高,Android 根据图片宽高比例设置控件宽高
  14. 使用百度图像识别时,提示错误“No address associated with hostname”
  15. 轻快的vim(二):插入
  16. 高级转录组调控分析和R语言数据可视化第十三期 (线上/线下同时开课)
  17. [iOS越狱开发]安装command line tools for Xcodew
  18. 关于dede获取购物车中商品ID及提交为表单问题总结
  19. 2022/06/03密码
  20. 马上消费金融基于 KubeSphere 的 AI 平台开发实践

热门文章

  1. DM556步进驱动器适配驱动步进电机
  2. java实现video标签视频流播放
  3. OpenGL - HDR
  4. ionic翻译:ion-nav-back-button
  5. 计算机毕业设计Node.js+Vue校友社交系统(程序+源码+LW+部署)
  6. TP-LINK路由器端口映射详解
  7. esp32与android蓝牙,ESP32通过蓝牙配置WIFI
  8. 原装苹果手机_二手原装正品苹果手机及平板批发报价单321
  9. 增值税税率下调!一文带你看懂K/3 WISE应对调整方案(K3服务号文章基础上调整)
  10. 注册商标的作用有哪些