陶媛媛,杜 彬,田 彬
(陜西重型汽車有限公司汽車工程研究院,陜西 西安 710200)
汽車電子領(lǐng)域的ECU(Electronic Control Unit,電子控制單元)大多為普通單片機(jī),其BootLoader(簡稱BT)主要負(fù)責(zé)應(yīng)用程序的升級。隨著智能網(wǎng)聯(lián)汽車時代的不斷發(fā)展,ECU軟件可以通過OBD(On Board Diagnostics,車載診斷系統(tǒng))接口,利用總線通信,將升級包傳輸給BootLoader進(jìn)行寫Flash操作,完成程序升級,也可以通過OTA(Over the Air Technology,空中下載技術(shù))進(jìn)行遠(yuǎn)程程序升級。
在程序升級過程中,可能會出現(xiàn)一些問題,導(dǎo)致應(yīng)用軟件或數(shù)據(jù)不能正常使用,如程序更新流程意外終止,軟件數(shù)據(jù)包與ECU不匹配等,此時會影響到車輛功能的正常使用,降低整車性能。為防止出現(xiàn)問題時ECU的基本功能失效,本文采用一種基于車載以太網(wǎng)的數(shù)據(jù)備份刷寫策略,實現(xiàn)恢復(fù)上一版本軟件和數(shù)據(jù)的功能,解決ECU功能異常問題,提升車載控制器性能。
備份刷寫的方案實現(xiàn)主要包括Flash區(qū)域劃分和不同情況下的數(shù)據(jù)備份流程。
為了實現(xiàn)異常情況的數(shù)據(jù)備份升級,該策略要求ECU的Flash區(qū)域容量至少為應(yīng)用程序的2倍,將Flash區(qū)域劃分為兩塊完全獨立的空間,NA(Normal Area)和SA(Spare Area),NA為軟件正常運行的區(qū)域,SA為NA程序和數(shù)據(jù)的備份區(qū)域。以Infineon TC299芯片為例,BootLoader、NA和SA軟件數(shù)據(jù)的內(nèi)存分配如圖1所示。

圖1 軟件數(shù)據(jù)內(nèi)存分配方案
應(yīng)用程序運行在NA區(qū),SA區(qū)作為NA區(qū)的備份,可以將軟件和數(shù)據(jù)從SA區(qū)回滾到NA區(qū)。此方案不受硬件的限制,并且應(yīng)用程序設(shè)計時無需考慮位置無關(guān)代碼的設(shè)計,不受硬件或編譯器的限制,通用性強(qiáng)。
Flash的NA區(qū)和SA區(qū)均是獨立的區(qū)域,可以存儲完整的APP程序,根據(jù)備份刷寫方式,將數(shù)據(jù)備份流程分為自動回滾和手動回滾,以下分別針對這兩種方式詳細(xì)介紹備份流程。
1.2.1 自動回滾
自動回滾方案適用于升級意外中斷情況,加入自動回滾后,每次上電或復(fù)位,系統(tǒng)先運行BootLoader程序,判斷程序更新標(biāo)志位是否有效,若無效,則在NA區(qū)運行APP程序;若有效,則執(zhí)行BT刷寫流程。進(jìn)入BT刷寫流程,判斷NA區(qū)軟件數(shù)據(jù)標(biāo)志位APP_NA_Flag是否有效,若有效,則先將NA區(qū)數(shù)據(jù)備份到SA區(qū),然后擦除NA區(qū)數(shù)據(jù),下載NA區(qū)刷寫文件,刷寫升級完成后將APP_NA_Flag置為有效,運行APP程序;若APP_NA_Flag無效,則判斷APP_SA_Flag是否有效,若無效,則停留在BootLoader程序中,若有效,則將SA數(shù)據(jù)拷貝到NA區(qū),然后執(zhí)行擦除NA區(qū)以及后續(xù)步驟,最后運行APP程序,具體流程如圖2所示。

圖2 自動回滾流程
程序升級出現(xiàn)中斷時,ECU持續(xù)監(jiān)測總線報文,若5s內(nèi)總線無任何操作,APP_NA_Flag置0,為無效,ECU會產(chǎn)生復(fù)位,斷電或上位機(jī)的復(fù)位請求也可以使ECU產(chǎn)生復(fù)位。重新上電或復(fù)位后,系統(tǒng)從BootLoader程序開始運行,由于上一次的升級被中斷,此時系統(tǒng)會按照自動備份回滾流程,將SA區(qū)域的程序數(shù)據(jù)回滾至NA區(qū),實現(xiàn)數(shù)據(jù)恢復(fù)。
1.2.2 手動回滾
手動回滾適用于控制器可以正常更新軟件數(shù)據(jù),但當(dāng)前更新版本為測試版本或者出現(xiàn)功能問題需要恢復(fù)到上一個軟件版本的情況,此時,新的應(yīng)用程序和數(shù)據(jù)已經(jīng)被成功刷寫到NA區(qū),程序可以正常運行在NA區(qū)。
手動回滾流程如下:上位機(jī)設(shè)置手動回滾,執(zhí)行刷寫流程,收到啟動手動回滾例程請求后,將手動回滾標(biāo)志位FlashMode置1,執(zhí)行復(fù)位,復(fù)位后檢查手動回滾標(biāo)志位FlashMode有效,判斷APP_SA_Flag是否有效,若有效,則將SA區(qū)的數(shù)據(jù)備份回滾到NA區(qū),若無效,則系統(tǒng)重啟。手動回滾成功后NA區(qū)有效,復(fù)位后BootLoader將引導(dǎo)運行NA區(qū)軟件,具體流程圖如圖3所示。

圖3 手動回滾流程
搭建臺架測試環(huán)境,通過車載以太網(wǎng)DoIP協(xié)議的Boot-Loader刷寫流程,驗證控制器程序備份回滾機(jī)制。
對本次設(shè)計的備份刷寫方案進(jìn)行測試。給控制器ECU上電,將BootLoader引導(dǎo)程序刷寫進(jìn)控制器中,然后通過通信設(shè)備將控制器下位機(jī)與電腦端的上位機(jī)進(jìn)行通信連接,完成程序的升級更新。
測試的軟硬件環(huán)境及工具如表1和圖4所示。

圖4 測試環(huán)境

表1 軟硬件測試工具
本次測試基于控制器車載以太網(wǎng)DoIP協(xié)議,在電腦端用上位機(jī)模擬診斷儀對控制器ECU進(jìn)行BT刷寫,同時通過Wireshark抓包的方式記錄BootLoader刷寫流程log,對測試log進(jìn)行分析,驗證自動回滾和手動回滾機(jī)制。
為保證ECU能正常工作,控制器需要自動開啟回滾功能,自動回滾功能的開啟需要滿足兩個條件。
1)程序更新過程中遇到問題,如舊程序擦除成功后升級流程中斷,完整性校驗或兼容性校驗失敗,檢測到內(nèi)存溢出報出錯誤等。
2)遇到問題后5s內(nèi)未收到任意診斷報文。
以完整性校驗不通過為例,如圖5所示,應(yīng)用程序已刷寫至ECU中,通過31服務(wù)檢查編程完整性時得到否定響應(yīng),CRC校驗失敗,自動啟動回滾流程,將SA區(qū)的程序拷貝至NA區(qū),進(jìn)行備份程序的刷寫,刷寫成功后someip報文正常收發(fā),自動回滾完成。

圖5 完整性校驗失敗后自動回滾
手動回滾功能的開啟需要手動設(shè)置回滾標(biāo)志位,程序刷新完成后,遇到應(yīng)用功能錯誤、軟件版本錯誤或程序測試完成后需要對控制器進(jìn)行恢復(fù)等情況時,開啟手動回滾功能使控制器中程序回滾到上一版本。
以軟件版本不正確為例,如圖6所示,程序刷寫成功后,判斷軟件版本錯誤,需開啟手動回滾功能,ECU在收到啟動回滾例程請求:31 01 F5 1A后,設(shè)置手動回滾標(biāo)志位FlashMode為1,執(zhí)行手動回滾操作,手動回滾成功后控制器回到上一版本的程序,報文可正常收發(fā)。

圖6 軟件版本不正確后手動回滾
測試結(jié)果表明:本文設(shè)計的程序備份升級方案,能夠根據(jù)不同的情況實現(xiàn)自動回滾和手動回滾功能,保證控制器應(yīng)用功能正常。
本文基于車載控制器BootLoader設(shè)計了一種數(shù)據(jù)備份刷寫方案,并搭建測試環(huán)境記錄測試數(shù)據(jù)進(jìn)行分析驗證。結(jié)果表明:該方案可以實現(xiàn)自動回滾和手動回滾功能,能夠解決ECU的功能異常問題,極大提高了控制器的穩(wěn)定性。