CAN時鐘同步來源,AUTOSAR cp的規范,AUTOSAR定義的基于CAN總線時間同步的CanTSyn模塊處理CAN總線上的時間信息分發,它以廣播的形式將時間信息從master節點(TM) 傳輸到各slave節點(TS),還可通過時間網關(TW)將時間同步到其他子網,以解決因各ECU節點的硬件時鐘信號偏差、CAN總線傳輸延時如協議仲裁以及各ECU節點內的軟件處理等原因導致的時間延遲。網絡拓撲如下:
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
+關注
關注
57文章
2766瀏覽量
464170 -
車載
+關注
關注
18文章
617瀏覽量
83422 -
總線
+關注
關注
10文章
2900瀏覽量
88293 -
時鐘同步
+關注
關注
0文章
89瀏覽量
12791
發布評論請先 登錄
相關推薦
評論