关于CAN时间同步的理解


来源 | 汽车ECU开发

01为什么需要时间同步

对于自动驾驶而言,通常需要摄像头、毫米波雷达、超声波雷达、激光雷达等传感器,而这些传感器的精确的数据采集时间是及其重要的,因为这些数据是感知和决策规划的输入。如果输入数据的时间不同步,可能会引起决策规划出错误的动作,导致车辆做出危险的动作。

时间同步技术就是为了解决精确获取传感器采样时间的,在以太网、CAN、Flexray总线上都有相应的实现。时间同步信息以广播的形式从Master(TM)节点发送至各Slave节点(TS),或者通过时间网关将时间同步信息同步至其他子网络(如图1所示),用于解决各ECU因硬件时钟信号偏差、总线仲裁、总线传输、软件处理等原因带来的时间延迟。

关于CAN时间同步的理解的图1
图1 时间同步框图

02 CAN时间同步机制


下面我们主要来梳理基于CAN总线的时间同步。从AUTOSAR规范来看,其主要分为两步,第一步是TM发送SYNC信息,第二步是发送FUP(Timeadjustment message (Follow-Up),时间调整信息),如图2所示。

关于CAN时间同步的理解的图2
图2 CAN时间同步步骤

具体如下:

1、TM节点在t0r时刻调用接口发送SYNC信号,SYNC信号中包含的时间信息为t0r,在t1r时刻SYNC信号发送完成,此时的时间为t1r。TS节点在t2r时刻接收到了SYNC信号。

2、TM节点再次发送FUP信号,信号中包含的时间信息为t4r=t1r-(st0r),其中st0r=t1r-t0r,TS节点在t3r时刻接收到了FUP信号。

根据上面两步的时间信息,TS节点可以计算本地的时间同步值为t3r-t2r+t1r。

CAN时间同步消息结构

CAN时间同步中使用到的SYNC和FUP帧的帧格式如图3所示。

关于CAN时间同步的理解的图3
图3 SYNC和FUP帧格式

SYNC帧:

1,Byte0用于表示CRC是否起作用,其中Byte0=0x10表示不采用CRC,Byte0=0x20表示采用CRC;

2、当Byte0=0x20时,表示采用CRC,则Byte1用于存储CRC的值,当Byte0=0x10时,Byte1的默认值为0;

3、Byte2的高4位表示时间同步域,低4位为Sequence Counter,有点类似与应用报文的rolling counter;

Byte3为用户自定义;

Byte4~Byte7为同步时间,长度为32bits,单位为秒;

FUP帧:

1、Byte0同样用于表示是否使用CRC,其中Byte0=0x18表示不适用CRC,Byte0=0x28表示使用CRC;

2、当Byte0=0x28时,表示采用CRC,则Byte1用于存储CRC的值,当Byte0=0x18时,Byte1的默认值为0;

3、Byte2与SYNC帧一样,高4位表示时间同步域,低4位为Sequence Counter;

4、Byte3的高5位为保留位,, bit2为SGW,表示时间同步状态(0:SyncToGTM, 1:SyncToSubDomain),bit1-bit0为OVS,表示时间同步溢出时间(overflow of seconds);

5、Byte4~Byte7中的高2位为0,低30位表示同步时间,单位为ns。


03 AUTOSAR中CanTSyn的配置


在AUTOSAR中要实现CAN时间同步,其涉及到的模块有3个,分别为STdM、CanIf、CanTSyn,各模块之间的关系如图4所示。

关于CAN时间同步的理解的图4
图4 AUTOSAR中实现CAN时间同步涉及到的模块

其中StdM用于同步各软件模块,并提供绝对时间值。涉及到的配置Timebase、时钟源等,主要几个如下所示。

关于CAN时间同步的理解的图5
关于CAN时间同步的理解的图6

对于CanTSyn模块而言,其涉及到的配置如下所示。

关于CAN时间同步的理解的图7
关于CAN时间同步的理解的图8
关于CAN时间同步的理解的图9

而在CanIf模块而言,需要将报文设置为时间同步报文,如下所示。

关于CAN时间同步的理解的图10

小结

以上就是CAN时间同步的一个简单介绍,主要是梳理了时间同步技术的缘由、CAN时间同步机制、CAN时间同步在AUTOSAR架构下的实现。


参考:部分图片来自CSDN,https://blog.csdn.net/RichardsZ_/article/details/116714179


默认 最新
当前暂无评论,小编等你评论哦!
点赞 评论 收藏
关注