李志濤,耿偉峰
(長(zhǎng)城汽車股份有限公司技術(shù)中心,河北 保定 071000)
CAN(Controller Area Network)總線作為一種可靠的汽車計(jì)算機(jī)網(wǎng)絡(luò)總線,已經(jīng)在汽車上應(yīng)用多年[1]。CAN總線因其實(shí)時(shí)性好、抗干擾能力強(qiáng)、可靠性高等優(yōu)點(diǎn)成為當(dāng)今最成功的車載總線之一,被廣泛應(yīng)用在車載通信中。隨著汽車電子技術(shù)與車輛智能化的發(fā)展,對(duì)汽車上電器控制單元(ECU)的通信實(shí)時(shí)性要求日趨嚴(yán)格,特別是在某些高速或安全駕駛場(chǎng)景下,微小時(shí)間的偏差可能導(dǎo)致災(zāi)難性的后果。各個(gè)控制單元間要有一個(gè)一致的時(shí)鐘來(lái)提供相對(duì)準(zhǔn)確、精度足夠的絕對(duì)時(shí)間值,并且將此時(shí)間同步到各個(gè)ECU,實(shí)現(xiàn)高精度和高可靠的時(shí)鐘同步,來(lái)滿足車輛功能實(shí)時(shí)性需求。因此,一種基于CAN總線的時(shí)間同步技術(shù)應(yīng)運(yùn)而生。
時(shí)間同步是分布式系統(tǒng)的核心技術(shù)之一,其目的是維護(hù)一個(gè)全局一致的物理或邏輯時(shí)鐘,以使系統(tǒng)中的節(jié)點(diǎn)基于一個(gè)全局一致的時(shí)間進(jìn)行信息交互。時(shí)間同步技術(shù)在以太網(wǎng)、CAN、Flexray總線上都有相應(yīng)的實(shí)現(xiàn),用于各節(jié)點(diǎn)精確獲取采樣時(shí)間。CAN系統(tǒng)時(shí)間同步可分為兩類,物理層時(shí)鐘同步和應(yīng)用層時(shí)鐘同步。物理層時(shí)鐘同步包含硬同步和重同步兩種同步方式,節(jié)點(diǎn)根據(jù)總線上檢測(cè)到的信號(hào)沿與自身位定時(shí)相比較,通過(guò)硬同步或重同步適當(dāng)調(diào)整位定時(shí),保證數(shù)據(jù)幀的正確收發(fā);應(yīng)用層時(shí)鐘同步通過(guò)軟件、硬件或者軟硬件相結(jié)合調(diào)整各個(gè)節(jié)點(diǎn)時(shí)鐘,使得各節(jié)點(diǎn)擁有一個(gè)全局一致的邏輯時(shí)鐘,實(shí)現(xiàn)CAN網(wǎng)絡(luò)各節(jié)點(diǎn)協(xié)同工作以及節(jié)點(diǎn)間消息的實(shí)時(shí)調(diào)度。只有物理層硬同步和重同步準(zhǔn)確無(wú)誤,應(yīng)用層時(shí)鐘同步才能被正確執(zhí)行。
AUTOSAR標(biāo)準(zhǔn)[2]規(guī)定了CAN總線時(shí)鐘同步機(jī)制與相關(guān)需求。在CAN總線網(wǎng)絡(luò)中,ECU分為時(shí)間網(wǎng)關(guān)節(jié)點(diǎn)(TG)、主時(shí)鐘節(jié)點(diǎn)(TM)與從時(shí)鐘節(jié)點(diǎn)(TS),映射到網(wǎng)絡(luò)中的真實(shí)ECU時(shí),網(wǎng)絡(luò)中的一個(gè)ECU可以是主時(shí)鐘節(jié)點(diǎn),甚至是全局主時(shí)鐘節(jié)點(diǎn),而對(duì)于網(wǎng)絡(luò)中的其它ECU需為從時(shí)鐘節(jié)點(diǎn),網(wǎng)絡(luò)中的相關(guān)ECU在總線網(wǎng)絡(luò)中或子網(wǎng)中,組建成時(shí)間域和相應(yīng)的時(shí)間子域,見圖1。
圖1 時(shí)間域示例
主時(shí)鐘節(jié)點(diǎn)是一個(gè)實(shí)體,它是某一時(shí)間基的參考源,并將該時(shí)間基傳播到網(wǎng)絡(luò)中的從時(shí)鐘節(jié)點(diǎn),作為從時(shí)鐘節(jié)點(diǎn)的時(shí)間基源。如果主時(shí)鐘節(jié)點(diǎn)也是全局時(shí)間基的所有者,網(wǎng)絡(luò)中其它節(jié)點(diǎn)的時(shí)間基都從該節(jié)點(diǎn)派生,那么該主時(shí)鐘節(jié)點(diǎn)為全局時(shí)間主時(shí)鐘節(jié)點(diǎn)。通常車載網(wǎng)關(guān)節(jié)點(diǎn)作為全局時(shí)基的所有者,由一個(gè)時(shí)間主端口組成,該端口連接到一個(gè)或多個(gè)時(shí)鐘從端口,從而構(gòu)建成一個(gè)或多個(gè)時(shí)間子域。
CAN總線時(shí)間同步,采用主時(shí)鐘節(jié)點(diǎn)發(fā)送特定的同步報(bào)文,從時(shí)鐘節(jié)點(diǎn)作為同步報(bào)文接收節(jié)點(diǎn),對(duì)本地時(shí)鐘進(jìn)行調(diào)節(jié),以獲得更加精準(zhǔn)的時(shí)間信息,從而實(shí)現(xiàn)與主時(shí)鐘節(jié)點(diǎn)的同步,以解決因各ECU節(jié)點(diǎn)的硬件時(shí)鐘信號(hào)偏差、CAN總線傳輸延時(shí)(如協(xié)議仲裁)以及各ECU節(jié)點(diǎn)內(nèi)的軟件處理等原因?qū)е碌臅r(shí)間延遲。
基于CAN總線的時(shí)間同步機(jī)制,主時(shí)鐘節(jié)點(diǎn)(TM)以廣播的形式將時(shí)間信息傳輸?shù)礁鲝臅r(shí)鐘節(jié)點(diǎn)(TS),還可通過(guò)時(shí)間網(wǎng)關(guān)(TW)將時(shí)間同步到其它子網(wǎng),同步通信機(jī)制主要分為兩步。第1步,主時(shí)鐘節(jié)點(diǎn)(TM)發(fā)送SYNC報(bào)文;第2步,主時(shí)鐘節(jié)點(diǎn)(TM)發(fā)送FUP報(bào)文。CAN時(shí)間同步機(jī)制,見圖2。
圖2 CAN時(shí)間同步機(jī)制
TM節(jié)點(diǎn)在t0r時(shí)刻開始發(fā)送SYNC報(bào)文,t1r時(shí)刻發(fā)出SYNC報(bào)文,SYNC報(bào)文中攜帶的時(shí)間為SYNC開始發(fā)送的時(shí)刻t0r,并且為秒時(shí)間s(t0r);TS節(jié)點(diǎn)接收SYNC報(bào)文,并通過(guò)接收確認(rèn)機(jī)制獲取完成SYNC報(bào)文接收的時(shí)間戳(t2r);TM節(jié)點(diǎn)在發(fā)送完SYNC報(bào)文后,再次發(fā)送FUP報(bào)文,該報(bào)文中攜帶時(shí)間信息t4r,t4r為上一個(gè)SYNC報(bào)文開始發(fā)送與實(shí)際確認(rèn)發(fā)送完成之間的時(shí)間。TS節(jié)點(diǎn)在接收到FUP報(bào)文后,根據(jù)接收SYNC報(bào)文后獲取的t2r時(shí)間信息,計(jì)算t3r時(shí)刻的本地的時(shí)間同步值,即本地的相對(duì)時(shí)間為t3r-t2r+s(t0r)+t4r=t3rt2r+t1r。主時(shí)鐘節(jié)點(diǎn)分配同步時(shí)基,從時(shí)鐘節(jié)點(diǎn)接收同步時(shí)基,實(shí)現(xiàn)網(wǎng)絡(luò)從時(shí)鐘節(jié)點(diǎn)與主時(shí)鐘節(jié)點(diǎn)之間的時(shí)間同步。
在AUTOSAR軟件協(xié)議棧中[3],實(shí)現(xiàn)CAN時(shí)間同步,需配置的模塊主要涉及3個(gè),分別為StbM、CanIf、CanTSyn。其中StbM用于同步各軟件模塊,獲取和設(shè)置當(dāng)前時(shí)間值,提供絕對(duì)時(shí)間值,涉及到Timebase、時(shí)鐘源等配置信息;對(duì)于CanTSyn模塊而言,需配置Time Domain與參考時(shí)鐘源;在CanIf模塊中,用于接收和發(fā)送報(bào)文,需要將報(bào)文設(shè)置為時(shí)間同步報(bào)文等。
1)SYNC報(bào)文發(fā)送。通過(guò)StbM_GetCurrentTime()獲取同步基準(zhǔn)時(shí)間t0,并將t0秒時(shí)間部分寫入SYNC報(bào)文中的SyncTimeSec;通過(guò)StbM_GetCurrentTimeRaw()獲取傳輸延遲時(shí)間測(cè)量的原始時(shí)間t0r。
2)SYNC報(bào)文TX確認(rèn)。計(jì)算FUP報(bào)文中的t4為t4r=[t1r-s(t0r)],其中t0r ns為t0的納秒部分。
3)FUP報(bào)文的發(fā)送。將t4(t4>=1s)的時(shí)間的秒部分寫入OVS;將t4的納秒部分寫入SyncTimeNSec。
經(jīng)過(guò)以上這些步驟,計(jì)算出TM節(jié)點(diǎn)的同步時(shí)基為(s(t0r)+t4r)。
1)通過(guò)SYNC報(bào)文接收確認(rèn)機(jī)制,SYNC報(bào)文傳遞同步時(shí)基的t0部分,并通過(guò)StbM_GetCurrentTimeRaw()獲取本地時(shí)間戳,定義為t2r。
2)通過(guò)FUP報(bào)文接收,F(xiàn)UP報(bào)文傳遞同步時(shí)基的t4部分(t4=OVS+SyncTimeNSec),并通過(guò)StbM_GetCurrentTimeDiff()獲取函數(shù)調(diào)用期間內(nèi)部時(shí)間戳t3r和之前接收到t2r的時(shí)間戳之間的時(shí)間差,即t3diff=(t3r-t2r)。
經(jīng)過(guò)以上步驟,TS節(jié)點(diǎn)計(jì)算全局時(shí)基來(lái)更新本地時(shí)基為:GlobalTimeBase=(t3r-t2r)+s(t0r)+t4r=t3r-t2r+t1r
通過(guò)以上TM與TS節(jié)點(diǎn)的時(shí)間同步步驟,各個(gè)TS節(jié)點(diǎn)基于一個(gè)一致的主時(shí)鐘節(jié)點(diǎn)(TM節(jié)點(diǎn)),來(lái)提供絕對(duì)時(shí)間值,并且將此時(shí)間同步到時(shí)間域內(nèi)的各個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)。
CAN時(shí)間同步所應(yīng)用的同步幀,包含SYNC報(bào)文幀和FUP報(bào)文幀。SYNC報(bào)文和FUP報(bào)文共用一個(gè)CAN ID,分時(shí)發(fā)送,先發(fā)送SYNC報(bào)文,再發(fā)送FUP報(bào)文。同步報(bào)文幀中的CRC校驗(yàn)是可配置的,可配置使用TM節(jié)點(diǎn)發(fā)送的Time Base值,無(wú)需應(yīng)用CRC校驗(yàn),同步報(bào)文幀格式見圖3。
圖3 SYNC/FUP報(bào)文幀
SYNC報(bào)文幀的Byte0表示是否應(yīng)用CRC校驗(yàn),其中Byte0=0x10表示未應(yīng)用,Byte0=0x20表示應(yīng)用;若Byte0=0x20,Byte1用于存儲(chǔ)CRC的值,Byte0=0x10時(shí),Byte1的默認(rèn)值為0;Byte2的高四位表示時(shí)間同步域,低四位為Sequence Counter,該序列計(jì)數(shù)器用于檢測(cè)錯(cuò)誤的協(xié)議序列和數(shù)據(jù);Byte3為用戶自定義數(shù)據(jù),默認(rèn)值為0;Byte4-Byte7為同步時(shí)間,長(zhǎng)度為32bits,單位為秒。
FUP報(bào)文幀的Byte0表示是否應(yīng)用CRC校驗(yàn),其中Byte0=0x18表示未應(yīng)用,Byte0=0x28表示應(yīng)用;若Byte0=0x28,Byte1用于存儲(chǔ)CRC的值,Byte0=0x18時(shí),Byte1的默認(rèn)值為0;同樣Byte2的高四位表示時(shí)間同步域,低四位為Sequence Counter,該序列計(jì)數(shù)器用于檢測(cè)錯(cuò)誤的協(xié)議序列和數(shù)據(jù);Byte3的高5位為保留位,默認(rèn)值為0,Byte3字節(jié)的bit2位為SGW位,用于表示時(shí)間同步狀態(tài),其中數(shù)值0表示為Sync-ToGTM,數(shù)值1表示為SyncToSubDomain,Byte3字節(jié)的bit1與bit0位為OVS(Overflow of seconds)位,表示時(shí)間同步溢出時(shí)間;Byte4-Byte7字節(jié)中的高2位為數(shù)值0,低30位表示同步時(shí)間,單位為納秒。
在汽車電子電氣領(lǐng)域,典型的V模型在OEM電子電器產(chǎn)品開發(fā)中廣泛應(yīng)用,該模型從左到右,描述了電子電器產(chǎn)品基本的開發(fā)過(guò)程和測(cè)試行為[4]。參照V模型,總線時(shí)間同步協(xié)議測(cè)試可分為ECU級(jí)測(cè)試、集成級(jí)測(cè)試。ECU級(jí)測(cè)試,用于ECU協(xié)議一致性測(cè)試,集成級(jí)測(cè)試包含系統(tǒng)臺(tái)架與實(shí)車環(huán)境下的測(cè)試,用于總線系統(tǒng)時(shí)間同步協(xié)議正確性及應(yīng)用穩(wěn)定性的驗(yàn)證。
基于Vector測(cè)試工具鏈,通過(guò)CANoe軟、硬件開發(fā)測(cè)試系統(tǒng),集成相應(yīng)的硬件工具,完成測(cè)試環(huán)境的搭建。依據(jù)被測(cè)系統(tǒng)的總線拓?fù)浼皶r(shí)間同步域,測(cè)試工具連接至相應(yīng)的時(shí)間域鏈路中,分別監(jiān)測(cè)TG節(jié)點(diǎn)與TM節(jié)點(diǎn),TM節(jié)點(diǎn)與各TS節(jié)點(diǎn)之間的通信數(shù)據(jù),實(shí)現(xiàn)整個(gè)時(shí)間域與子時(shí)間域數(shù)據(jù)的采集、測(cè)試等。測(cè)試環(huán)境連接示意圖,見圖4。
總線集成測(cè)試,對(duì)時(shí)間同步系統(tǒng)基本需求實(shí)現(xiàn)的正確性、準(zhǔn)確性、合理性進(jìn)行測(cè)試,并結(jié)合不同的車輛運(yùn)行場(chǎng)景,對(duì)系統(tǒng)在不同場(chǎng)景下的運(yùn)行狀態(tài)進(jìn)行檢測(cè),結(jié)合用戶典型應(yīng)用場(chǎng)景,進(jìn)行誤用和濫用方面的測(cè)試,同時(shí)考慮主機(jī)廠自定義及一些特殊需求,開展相應(yīng)測(cè)試。主要涉及的測(cè)試內(nèi)容為時(shí)間同步序列的測(cè)試、同步報(bào)文格式的測(cè)試、時(shí)間同步算法測(cè)試、魯棒性測(cè)試、故障注入、車輛電源模式切換、發(fā)動(dòng)機(jī)啟動(dòng)、用戶功能應(yīng)用觸發(fā)場(chǎng)景下的測(cè)試等。
時(shí)間同步協(xié)議測(cè)試,不僅需開展ECU級(jí)協(xié)議一致性的測(cè)試、系統(tǒng)層級(jí)協(xié)議需求實(shí)現(xiàn)的正確性測(cè)試,更需基于整個(gè)時(shí)間域網(wǎng)絡(luò)、功能應(yīng)用、車輛場(chǎng)景等維度,評(píng)估系統(tǒng)的性能指標(biāo)的符合性、驗(yàn)證時(shí)間域系統(tǒng)通信的穩(wěn)定性和可靠性。
本示例為同步報(bào)文發(fā)送序列及數(shù)據(jù)正確性的測(cè)試,驗(yàn)證CAN總線時(shí)間同步系統(tǒng)中TM節(jié)點(diǎn)所發(fā)送的SYNC/FUP報(bào)文的序列、周期、間隔、數(shù)據(jù)字段等是否滿足設(shè)計(jì)需求。測(cè)試前,參照?qǐng)D4搭建測(cè)試環(huán)境,連接測(cè)試設(shè)備。
圖4 測(cè)試環(huán)境連接示意圖
運(yùn)行CANoe工具,開始進(jìn)行數(shù)據(jù)采集。系統(tǒng)上電,CAN總線系統(tǒng)被激活。系統(tǒng)中的TM節(jié)點(diǎn)開始發(fā)送同步報(bào)文,分別為SYNC報(bào)文與FUP報(bào)文,見圖5。
圖5 總線同步報(bào)文
查看并分析所采集的數(shù)據(jù),SYNC報(bào)文和FUP報(bào)文共用一個(gè)CAN ID,分時(shí)發(fā)送,先發(fā)送SYNC報(bào)文,間隔50ms再發(fā)送FUP報(bào)文,然后再進(jìn)行下一次同步過(guò)程。SYNC報(bào)文中的Payload Type=0x10、Payload SGW=0、Payload SC=6、Payload CRC=0;FUP報(bào)文中的Payload Type=0x18、Payload SGW=0、Payload SC=6、Payload CRC=0。經(jīng)分析同步報(bào)文發(fā)送序列、周期、時(shí)間間隔、Payload字段數(shù)值符合設(shè)計(jì)需求。同樣按以上測(cè)試步驟及要求,進(jìn)行各子時(shí)間域同步報(bào)文發(fā)送序列、周期、數(shù)據(jù)字段格式正確性的驗(yàn)證。
隨著汽車智能化發(fā)展、汽車功能的增加,汽車上的電子控制單元也越來(lái)越多[5],ECU數(shù)量的爆發(fā)式增長(zhǎng),對(duì)車載通信的速率、實(shí)時(shí)性、可靠性等方面提出了更高的要求,尤其是對(duì)于自動(dòng)駕駛的感知和決策輸入而言,通常需要攝像頭、毫米波雷達(dá)、超聲波雷達(dá)、激光雷達(dá)等傳感器具備精確的數(shù)據(jù)采集能力,防止車輛決策規(guī)劃出錯(cuò)誤的動(dòng)作。因此,總線時(shí)間同步技術(shù)應(yīng)用的必要性至關(guān)重要,本文對(duì)CAN總線時(shí)間同步機(jī)制與測(cè)試進(jìn)行了研究分析,為進(jìn)一步深入開展相關(guān)測(cè)試工作奠定了基礎(chǔ)。