1、时间同步目的
目的:合作时,无法有效各个控制器都有自己的晶振,可以自己计时,但是由于晶振不一致,和启动时间不一致,各自的计时没有一个统一的计时基准。这样在多控制器地将不同控制器的信号从时间上对齐。所以时间同步是为了给多个控制器间提供统一的时间基准。
2、时间同步报文格式
Byte0:时间同步类型,0x10:SYNC not CRC secured messag
0x20:SYNC CRC secured messag
Byte1:时间同步校验;
Byte2:D:时间同步域(多个同步域使用)
SC:时间同步序计数器(0-15循环累加)
Byte3:SYNC:UserByte0
FUP: SGW(跟随帧同步节点状态):0x0:SyncToGTM, 0x1:SyncToSubDomain
OVS:同步溢出时间
StbM:负责抽象基于不同传输介质的AUTOSAR时间同步协议,为整个软件系统来提供时间同步之后的全局时间戳
CanTsync:负责时间同步协议的实现;
Canif:负责发送或接收承载着时间同步信息的报文;
Can Driver:提供CAN接收与发送能力;
3、软件实现
在EAS添加CAN,CANIF,SYNC,STBM
导入DBC,配置CAN和CANIF
配置Stbm:
StbMMainFunctionPeriod:配置 StbM 模块主函数的调用周期,单位:ms
OsSecondsPerTick:计数器的周期,(文档单位是S,EAS这里不能写小数,实际单位是MS)
OsCounterMaxAllowerValue:计数器溢出值
StbMSyncLossThreshold:配置当前时间与待更新时间的最大允许差值,0 表示不做差值校验。
StbMSyncLossTimeout:配置时间同步报文的接收超时时间,单位:S
OsSecondsPerTick:计数器的周期,
(单位是S)
OsCounterMaxAllowerValue:计数器溢出值
SYNC配置(slave端)
CanSyncMainFunctionPeriod:配置 StbM 模块主函数的调用周期,单位:ms
DatdIdList:根据OEM需求设置
stbm需要提供一个时间基准
我在项目中是用GPT定时器提供us级计数(CAN时间同步最高支持ns)