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