周 恒, 梁貴友, 柳 旭, 張建平, 周時瑩, 王 騰, 馬 骉
(中國第一汽車集團有限公司 智能網(wǎng)聯(lián)開發(fā)院,長春 130013)
隨著汽車智能化、網(wǎng)聯(lián)化的發(fā)展,OTA功能已成為智能網(wǎng)聯(lián)汽車發(fā)展的必然趨勢[1-3]。常見OTA升級架構(gòu)是云服務器端通過TBOX 將升級包下載至車端緩存,由升級主控節(jié)點對網(wǎng)絡架構(gòu)中控制器按照刷寫流程進行升級更新[4-5]。陳祖銳等[6]采用將升級程序直接刷寫在應用程序分區(qū)的升級技術(shù),其局限性在于當應用程序升級失敗后,原分區(qū)里的程序已被擦除導致沒有程序可正常運行,控制器將始終處于引導加載程序(Boot Loader)中無法正常工作。針對沒有可執(zhí)行的回滾程序問題,王棟梁等[7]采用在網(wǎng)關(guān)內(nèi)部Flash 中存儲當前版本的技術(shù),當升級失敗時網(wǎng)關(guān)會調(diào)用Flash 中的軟件再次進行刷寫,此技術(shù)只針對RTOS傳統(tǒng)實時操作系統(tǒng)的控制,并且存在網(wǎng)關(guān)內(nèi)存空間大且回滾邏輯繁瑣的缺點。嚴娟等[8]針對網(wǎng)關(guān)自升級將Flash 劃分為兩個相同區(qū)域,兩者功能上完全一樣互為備份,升級時只針對其中一個區(qū)域進行升級,失敗時利用另一個區(qū)域進行回滾,但是只針對Linux、QNX 和安卓等智能操作系統(tǒng)的控制器,RTOS 傳統(tǒng)控制器并沒有此類升級技術(shù)。
因此,針對現(xiàn)有RTOS 控制器只有1個分區(qū)[9],且升級失敗造成無程序可回滾的問題,提出了一種雙分區(qū)升級技術(shù)[10-11]??紤]控制器內(nèi)存空間大小不同,設(shè)計了同面啟動和異面啟動升級技術(shù)。
該技術(shù)具有以下貢獻:
(1)針對如何管理分區(qū)的問題,設(shè)計了啟動信息用于標識雙分區(qū)屬性信息,選擇對應的分區(qū)進行刷寫升級、啟動或回滾;
(2)在原芯片的基礎(chǔ)上通過外擴存儲器實現(xiàn)同面啟動的雙分區(qū)升級技術(shù),避免了芯片重新選型及硬件設(shè)計,減少了開發(fā)的工作量;
(3)設(shè)計了一種新的升級包選擇下載、安裝啟動及回滾的異面啟動雙分區(qū)升級技術(shù),優(yōu)化了升級包制作和刷寫流程,可以快速實現(xiàn)分區(qū)切換和軟件回滾。
雙分區(qū)控制器除了引導加載程序分區(qū)外,一般需要激活分區(qū)(Active Slot)存放當前執(zhí)行應用程序,備份分區(qū)(Backup Slot)存放回滾舊版本程序,此外,還需要一個啟動信息(Slot Info)分區(qū),用于存儲激活分區(qū)和備份分區(qū)的相關(guān)屬性信息,硬件存儲空間如圖1所示。
引導加載程序需要根據(jù)啟動信息來判斷當前激活分區(qū)并引導啟動對應的應用程序。該啟動信息將在應用程序的有效性判斷、下載刷新完成或版本回滾時進行必要的狀態(tài)切換。啟動信息關(guān)鍵屬性見表1。
表1 啟動信息關(guān)鍵屬性
對于純軟件實現(xiàn)雙分區(qū)的控制器,一般會有兩個起始地址不同的應用程序分區(qū),升級時需要兩個功能相同但起始地址不同的應用程序。將兩個不同地址的應用程序通過編譯合并后,生成一個大小為兩個程序分區(qū)的文件用于控制器的選取升級,如圖2所示。
圖2 雙分區(qū)升級包組成
同面啟動升級技術(shù)要求每次下載刷新及啟動始終在片內(nèi)Flash 的激活分區(qū)進行,設(shè)計的升級技術(shù)流程如下。
(1)控制器默認出廠設(shè)置時激活分區(qū)和備份分區(qū)的軟件版本一致。
(2)控制器收到主控節(jié)點發(fā)送的0x31 01 FF 00擦除程序區(qū)指令時[13],需先對比激活分區(qū)和備份分區(qū)程序版本號,如果不一致則需將激活分區(qū)中的程序復制到備份分區(qū)中。外擴存儲器升級包下載流程如圖3所示。
圖3 外擴存儲器升級包下載流程
(3)升級包下載刷新到激活分區(qū)后,啟動信息屬性信息更新,控制器會先判斷激活分區(qū)程序有效性,如果激活分區(qū)程序有效,啟動激活分區(qū)程序,并上報本次OTA任務升級成功。
(4)當激活分區(qū)程序無效或安裝失敗時,利用備份分區(qū)程序復制到激活分區(qū)實現(xiàn)軟件版本回滾,升級流程及啟動信息屬性更新變化如圖4所示。
圖4 同面啟動升級流程
異面啟動是目前主流升級技術(shù),控制器內(nèi)存空間滿足雙分區(qū)要求,主要分為基于SWAP AB 和基于非SWAP AB的雙分區(qū)升級技術(shù)。
2.2.1 基于SWAP AB技術(shù)的下載流程
SWAP AB 技術(shù)是指利用地址重映射技術(shù)[13-15]將激活分區(qū)和備份分區(qū)的物理內(nèi)存地址進行互換,保證了激活分區(qū)的地址始終保持固定,所以升級的重點在于如何管理下載刷新和分區(qū)切換,設(shè)計的升級下載流程如下。
(1)主控節(jié)點根據(jù)0x34 請求下載服務的起始地址和字節(jié)數(shù),將升級包下載刷新到備份分區(qū)。
(2)當升級包下載完成且校驗通過后,啟動信息屬性更新。
(3)控制器在進行重啟或升級失敗回滾時,利用SWAP AB 技術(shù)將備份分區(qū)地址與激活分區(qū)地址互換,其下載流程如圖5所示。
圖5 基于SWAP AB技術(shù)升級包下載流程
2.2.2 基于非SWAP AB技術(shù)的下載流程
所謂非SWAP AB 技術(shù)是指控制器硬件上不支持兩個物理內(nèi)存地址的互換,而且控制器的激活分區(qū)和備份分區(qū)起始地址不同,所以設(shè)計的升級技術(shù)下載流程如下。
(1)由于控制器激活分區(qū)是Slot A 還是Slot B只有控制器可知,所以主控節(jié)點內(nèi)必須包含兩個內(nèi)存地址的升級包,升級包制作過程如圖2所示。
(2)在主控節(jié)點發(fā)送0x31 01 FF 00 擦除指令前,控制器需將啟動信息中備份分區(qū)的起始地址發(fā)給主控節(jié)點,由此確保擦除程序是備份分區(qū)程序。
(3)擦除成功后,由主控節(jié)點判斷選擇哪部分程序?qū)儆趥浞莘謪^(qū)并進行下載刷新。
(4)當升級包下載完成且校驗通過后,重啟或升級失敗進行軟件回滾時,啟動信息中激活分區(qū)和備份分區(qū)狀態(tài)互換,下載刷新過程及啟動信息狀態(tài)變化如圖6所示。
2.2.3 異面啟動升級流程
升級包刷新成功后再判定激活分區(qū)程序有效性,如果激活分區(qū)中程序有效,則從激活分區(qū)啟動執(zhí)行;如果程序初次判定無效,再次嘗試判斷,當重復次數(shù)達到最大時說明程序無效,需要進行程序回滾。
在進行程序回滾時,控制器需先判斷備份分區(qū)中的程序有效性,當判定無效次數(shù)達到最大時,則回滾失敗,控制器功能失效;如果備份分區(qū)中程序有效,更新啟動信息屬性并啟動回滾后的激活分區(qū)程序。具體異面啟動升級流程如圖7所示。
圖7 異面啟動升級流程
雙分區(qū)升級技術(shù)測試環(huán)境主要分為ECU和上位機診斷儀系統(tǒng)[16-17],系統(tǒng)框圖及實物分別如圖8~9所示。兩系統(tǒng)之間通過USB1、USB2接口進行數(shù)據(jù)傳輸模擬主控節(jié)點刷新下載,其中,ECU側(cè)有一個KEY 按鍵控制LED 的閃爍,用于指示app的運行情況。其中,USB1 用于引導加載程序的升級,USB2用于app中的通信。
圖8 雙分區(qū)升級測試框圖
圖9 雙分區(qū)升級測試實物
采用STM32H7 系列芯片驗證升級技術(shù),其內(nèi)部Nor Flash的存儲空間分區(qū)配置見表2。
表2 存儲空間分區(qū)配置表
針對雙分區(qū)與傳統(tǒng)分區(qū)升級技術(shù)的差異點,設(shè)計測試用例時需要重點考慮升級異常時程序回滾功能的有效性、雙分區(qū)運行的穩(wěn)定性等,測試類型主要分為正常系和異常系,主要測試用例及方法見表3。
表3 測試用例及方法
測試時先通過搭建的測試系統(tǒng)驗證單控制器升級回滾情況,通過后將開發(fā)的雙分區(qū)升級控制器安裝到實車上,利用目前上線運營的OTA整套升級系統(tǒng),以及布置多控制器升級包來驗證實車環(huán)境下失敗程序回滾功能。
根據(jù)上述測試內(nèi)容和方法,利用搭建的系統(tǒng)及實車測試驗證結(jié)果(表4),每項測試內(nèi)容至少需要正向測試50 次,且每次測試結(jié)果都滿足要求才能證明該項功能正常。
表4 雙分區(qū)升級技術(shù)測試內(nèi)容及結(jié)果
測試結(jié)果表明,利用啟動信息進行分區(qū)管理,解決了升級啟動分區(qū)選擇問題;針對外擴存儲器不能啟動執(zhí)行的問題,提出軟件復制備份的回滾機制,實現(xiàn)了雙分區(qū)升級技術(shù);針對異面啟動中升級包下載的問題,提出備份分區(qū)信息讀取選擇下載技術(shù),解決了下載的升級包與分區(qū)不對應的問題。因此,上述技術(shù)解決了整個雙分區(qū)OTA升級流程中的技術(shù)難題,實現(xiàn)了RTOS控制器雙分區(qū)升級。
本文提出了車載ECU 雙分區(qū)升級技術(shù),介紹了同面啟動和異面啟動的升級刷寫流程,通過開發(fā)測試系統(tǒng)驗證了該技術(shù)的有效性,得到的結(jié)論如下。
(1)對比異面啟動升級中的兩種技術(shù),發(fā)現(xiàn)具有SWAP AB 技術(shù)的芯片實現(xiàn)雙分區(qū)升級技術(shù)的開發(fā)較簡單,升級包傳輸時間更少,同時也減少了主控節(jié)點的判斷邏輯。目前,多數(shù)芯片都支持SWAP AB 技術(shù),建議推廣使用基于SWAP AB 的異面啟動升級技術(shù)以實現(xiàn)控制器雙分區(qū)升級。
(2)同面啟動升級中升級前備份或回滾時需要程序進行復制,導致升級過程時間比較長,帶給用戶體驗不如異面啟動升級技術(shù),但是其優(yōu)點在于可基于原芯片實現(xiàn)雙分區(qū)升級技術(shù),無需重新選型開發(fā)。
(3)通過對測試系統(tǒng)及實車不同控制器進行大量的升級測試,驗證了控制器雙分區(qū)升級系統(tǒng)的穩(wěn)定性和回滾時分區(qū)切換的有效性,同時得出控制器升級失敗的回滾成功率為100%。因此,該技術(shù)的應用從根本上解決了因OTA升級失敗而導致車輛控制器功能失效的問題。