车载时钟同步can_tsync实现原理

描述

CAN时钟同步来源,AUTOSAR cp的规范,AUTOSAR定义的基于CAN总线时间同步的CanTSyn模块处理CAN总线上的时间信息分发,它以广播的形式将时间信息从master节点(TM) 传输到各slave节点(TS),还可通过时间网关(TW)将时间同步到其他子网,以解决因各ECU节点的硬件时钟信号偏差、CAN总线传输延时如协议仲裁以及各ECU节点内的软件处理等原因导致的时间延迟。网络拓扑如下:

CAN
can_tsync实现原理

有了上述基础之后,我们会理解到can timesync实现起来也不会太难,在autosar cp的框架下,所有的时间都是从StdmM(Synchronized Time-Base Manager)获取的。所以,我们可以如下伪代码:

C                  
// can time master                  
TimeRaw_t t0r;                  
StbM_GetCurrentTimeRaw(&t0r);                  
CanTsync_SetT0r(t0r);                  
CanIf_Transmit(sync_message);                  
CanTsync_TxComfirmation()                  
{                  
    TimeRaw_t t1r;                  
    StbM_GetCurrentTimeRaw(&t1r);                  
    uint32_t t4r = CanTsync_GetT4r(t0r, t1r);                  
    CanTsync_SetT4r(t4r);                  
    CanIf_Transmit(fup_message)                  
}
C                  
// can time slave                  
TimeRaw_t t2r, t3r, t4r, t0r;                  
CanSync_RxIndication(sync_msg)                  
{                  
    StbM_GetCurrentTimeRaw(&t2r);                  
    t0r = CanTsync_GetT0r(sync_msg);                  
}                  
CanSync_RxIndication(fup_msg)                  
{                  
    StbM_GetCurrentTimeRaw(&t3r);                  
    t4r = CanTsync_GetT0r(fup_msg);                  
    TimeRaw_t real_time = CanTsync_CalcuTimeOffset(t0r, t2r, t3r, t4r);                  
    StbM_SetGlobalTime(real_time);                  
}

can tsync来源于autosar cp,所以上述实现风格也是仿照autosar cp的风格。StbM是整个cp的时间基础管理,负责抽象底层不同的时间同步协议,为上层提供统一的时间戳接口以及当前的时间同步状态的接口。整体框架如下:

CAN

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_17930234 2023-11-08
0 回复 举报
请问这个模块有源代码吗?或者可以帮助做源代码吗?有偿 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分