來源 | 汽車ECU開發
對于自動駕駛而言,通常需要攝像頭、毫米波雷達、超聲波雷達、激光雷達等傳感器,而這些傳感器的精確的數據采集時間是及其重要的,因為這些數據是感知和決策規劃的輸入。如果輸入數據的時間不同步,可能會引起決策規劃出錯誤的動作,導致車輛做出危險的動作。
時間同步技術就是為了解決精確獲取傳感器采樣時間的,在以太網、CAN、Flexray總線上都有相應的實現。時間同步信息以廣播的形式從Master(TM)節點發送至各Slave節點(TS),或者通過時間網關將時間同步信息同步至其他子網絡(如圖1所示),用于解決各ECU因硬件時鐘信號偏差、總線仲裁、總線傳輸、軟件處理等原因帶來的時間延遲。
下面我們主要來梳理基于CAN總線的時間同步。從AUTOSAR規范來看,其主要分為兩步,第一步是TM發送SYNC信息,第二步是發送FUP(Timeadjustment message (Follow-Up),時間調整信息),如圖2所示。
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時間同步中使用到的SYNC和FUP幀的幀格式如圖3所示。
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;
Byte4~Byte7為同步時間,長度為32bits,單位為秒;
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。
在AUTOSAR中要實現CAN時間同步,其涉及到的模塊有3個,分別為STdM、CanIf、CanTSyn,各模塊之間的關系如圖4所示。
圖4 AUTOSAR中實現CAN時間同步涉及到的模塊
其中StdM用于同步各軟件模塊,并提供絕對時間值。涉及到的配置Timebase、時鐘源等,主要幾個如下所示。
對于CanTSyn模塊而言,其涉及到的配置如下所示。
而在CanIf模塊而言,需要將報文設置為時間同步報文,如下所示。
以上就是CAN時間同步的一個簡單介紹,主要是梳理了時間同步技術的緣由、CAN時間同步機制、CAN時間同步在AUTOSAR架構下的實現。
參考:部分圖片來自CSDN,https://blog.csdn.net/RichardsZ_/article/details/116714179