02
CAN时间同步机制
下面我们主要来梳理基于CAN总线的时间同步。从AUTOSAR规范来看,其主要分为两步,第一步是TM发送SYNC信息,第二步是发送FUP(Timeadjustment message (Follow-Up),时间调整信息),如图2所示。
8w7ednc
图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所示。
8w7ednc
图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帧:
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所示。
8w7ednc
图4 AUTOSAR中实现CAN时间同步涉及到的模块
其中StdM用于同步各软件模块,并提供绝对时间值。涉及到的配置Timebase、时钟源等,主要几个如下所示。
对于CanTSyn模块而言,其涉及到的配置如下所示。
而在CanIf模块而言,需要将报文设置为时间同步报文,如下所示。
小结
以上就是CAN时间同步的一个简单介绍,主要是梳理了时间同步技术的缘由、CAN时间同步机制、CAN时间同步在AUTOSAR架构下的实现。