【摘" 要】基于對(duì)支持嵌入式應(yīng)用軟件重編程的控制器進(jìn)行開發(fā),實(shí)現(xiàn)A/B分區(qū)軟件功能。具體而言,當(dāng)某應(yīng)用軟件區(qū)出現(xiàn)錯(cuò)誤或失效情況時(shí),能夠立即啟動(dòng)另一區(qū)軟件,從而確保ECU維持正常工作狀態(tài)。A/B分區(qū)能夠極大地滿足車載控制器本地升級(jí)軟件以及OTA升級(jí)軟件的穩(wěn)健性要求。文章通過(guò)對(duì)嵌入式軟件A/B分區(qū)的硬件需求設(shè)計(jì)與軟件需求設(shè)計(jì)等方面進(jìn)行研究,成功設(shè)計(jì)并實(shí)現(xiàn)某車型核心控制器的A/B分區(qū)功能,極大提升該控制器在軟件正常運(yùn)行以及軟件刷寫時(shí)的魯棒性。
【關(guān)鍵詞】重編程;A/B分區(qū);穩(wěn)健性
中圖分類號(hào):U463.6" " 文獻(xiàn)標(biāo)識(shí)碼:A" " 文章編號(hào):1003-8639(2025)02-0073-04
Automotive Embedded Software A/B Partition Design and Development
ZHAO Nengqing1,2,LI Jiaqiang1
(1. College of Mechanical Engineering and Transportation,Southwest Forestry University,Kunming 650051;
2. Jiangling Motor Co.,Ltd.,Nanchang 330200,China)
【Abstract】Based on the development of A controller that supports reprogramming of embedded application software,the function of A/B partition software is realized. Specifically,when an error or failure occurs in one area of the application software,the other area of the software can be started immediately,thus ensuring that the ECU remains in normal working condition. A/B partition can greatly meet the robustness requirements of local upgrade software and OTA upgrade software for vehicle controllers. Based on the research of hardware requirement design and software requirement design of embedded software A/B partition,this paper successfully designs and implements A/B partition function of a core controller of a certain vehicle model,which greatly improves the robustness of the controller during normal software operation and software writing.
【Key words】reprogramming;A/B partition;robustness
0" 引言
基于某車載核心控制器開發(fā)A/B分區(qū)功能,該控制器軟件支持本地和OTA升級(jí)。嵌入式軟件A區(qū)與B區(qū)的軟件具備獨(dú)立運(yùn)行能力。若當(dāng)前軟件運(yùn)行于A區(qū),外部合法源升級(jí)此ECU,ECU自動(dòng)將升級(jí)軟件包存儲(chǔ)于B區(qū);若當(dāng)前軟件運(yùn)行于B區(qū),外部合法源升級(jí)此ECU,ECU自動(dòng)將升級(jí)軟件包存儲(chǔ)于A區(qū)。軟件A/B分區(qū)能很好規(guī)避控制器軟件刷寫失敗后整車不能繼續(xù)正常工作的問(wèn)題。
1" 硬件需求設(shè)計(jì)
A區(qū)和B區(qū)被設(shè)計(jì)為具有同等大小的存儲(chǔ)空間。依據(jù)ECU軟件架構(gòu),將A區(qū)和B區(qū)存儲(chǔ)空間的物理地址與軟件包刷寫時(shí)的邏輯地址進(jìn)行合理映射,并且滿足ECU重新上電后軟件包不會(huì)丟失的要求。
支持A/B分區(qū)的ECU的下線EOL配置數(shù)據(jù)單獨(dú)存儲(chǔ)在芯片的某一特定存儲(chǔ)域中,在應(yīng)用軟件更新期間,配置數(shù)據(jù)不會(huì)被修改,以避免因更新軟件包而導(dǎo)致需要重新寫入配置數(shù)據(jù)。控制器MCU的應(yīng)用軟件Code Flash分布設(shè)計(jì)如圖1所示。
Flash中的BootLoader占用256kB空間,實(shí)際Bin文件不足256kB的部分將會(huì)使用0xFF進(jìn)行填充。Application Inf區(qū)域用于存儲(chǔ)升級(jí)標(biāo)志、軟件激活區(qū)標(biāo)志以及應(yīng)用軟件有效標(biāo)志信息。應(yīng)用軟件APP_A占用1392kB,應(yīng)用軟件APP_B占用1392kB。
2" 軟件需求設(shè)計(jì)
對(duì)于具有A/B分區(qū)功能的ECU,在出廠時(shí)會(huì)為該控制器內(nèi)部刷寫一版應(yīng)用軟件,此應(yīng)用軟件會(huì)優(yōu)先存儲(chǔ)于A區(qū)。診斷儀或者診斷上位機(jī)可以通過(guò)靜態(tài)DID(數(shù)據(jù)標(biāo)識(shí)符)0xA205讀取當(dāng)前應(yīng)用軟件運(yùn)行于哪個(gè)區(qū)域,并且可支持通過(guò)例程服務(wù)0x31和例程DID 0xFF02進(jìn)行A/B區(qū)域的強(qiáng)制切換。若目標(biāo)切換區(qū)域軟件無(wú)效時(shí),控制器將不支持切換,并回應(yīng)失敗原因,失敗類型為新區(qū)域無(wú)有效程序[1]。
由于軟件數(shù)據(jù)傳輸過(guò)程中可能存在來(lái)自外部的非法篡改,為此設(shè)計(jì)了一套融合AES128和SHA256的算法對(duì)應(yīng)用軟件數(shù)據(jù)包進(jìn)行合法性校驗(yàn)[2],檢驗(yàn)值將寫入軟件包末尾,并由控制器的Boot層完成驗(yàn)證。這種方法可以有效防止軟件包數(shù)據(jù)被篡改。在升級(jí)A/B分區(qū)的ECU時(shí),ECU的Boot層將會(huì)對(duì)升級(jí)軟件的完整性及合法性進(jìn)行校核。當(dāng)數(shù)據(jù)不合要求或有非法數(shù)據(jù)被寫入時(shí),Boot層會(huì)通過(guò)故障代號(hào)即時(shí)報(bào)錯(cuò),并終止軟件刷寫。當(dāng)新的軟件包校核成功后,外部合法源下發(fā)復(fù)位命令,ECU重啟后應(yīng)立即運(yùn)行新升級(jí)的軟件。
對(duì)于具有A/B分區(qū)功能的控制器,在進(jìn)行分區(qū)升級(jí)時(shí),外部合法源寫入數(shù)據(jù)不區(qū)分當(dāng)前寫入的是A區(qū)還是B區(qū),ECU的Boot層將自動(dòng)識(shí)別當(dāng)前升級(jí)包應(yīng)存儲(chǔ)于A區(qū)還是B區(qū),即無(wú)論當(dāng)前是A區(qū)還是B區(qū),升級(jí)軟件包都是相同的。
具有A/B分區(qū)功能的ECU設(shè)計(jì)了外部看門狗及軟件運(yùn)行有誤的容錯(cuò)功能。當(dāng)ECU運(yùn)行某一區(qū)軟件發(fā)生連續(xù)3次看門狗溢出復(fù)位時(shí),應(yīng)置故障碼——軟件Watchdog異常復(fù)位。將Boot配置成自動(dòng)切換分區(qū)功能開啟狀態(tài),即當(dāng)前即將運(yùn)行分區(qū)無(wú)效或當(dāng)前運(yùn)行分區(qū)看門狗異常復(fù)位3次且此時(shí)另一區(qū)域軟件有效時(shí),將立即啟動(dòng)另一區(qū)軟件運(yùn)行。
3" 安全需求設(shè)計(jì)
為確保控制器應(yīng)用軟件升級(jí)的安全性,在ECU重編程方面設(shè)計(jì)了如下特性。
1)ECU會(huì)對(duì)預(yù)編程進(jìn)行檢查,若當(dāng)前車輛或發(fā)動(dòng)機(jī)正在運(yùn)行,則不支持預(yù)編程,此時(shí)控制器不允許進(jìn)入編程會(huì)話模式10 02[3]。
2)必須通過(guò)安全訪問(wèn)方可進(jìn)行有效編程,并且對(duì)安全訪問(wèn)失敗的情況進(jìn)行嚴(yán)格控制,若連續(xù)失敗將啟動(dòng)安全訪問(wèn)延時(shí)處理。
4" 軟件啟動(dòng)流程設(shè)計(jì)
A/B分區(qū)控制器上電后進(jìn)入Boot層,將執(zhí)行以下流程,如圖2所示。
1)底層讀取軟件激活區(qū)標(biāo)志位數(shù)值。若激活區(qū)是A區(qū),則執(zhí)行A區(qū)啟動(dòng)流程;若激活區(qū)是B區(qū),則執(zhí)行B區(qū)啟動(dòng)流程。
2)若激活區(qū)為A區(qū),底層需進(jìn)一步判斷A區(qū)軟件是否有效。若A區(qū)軟件有效,則運(yùn)行A區(qū)軟件并進(jìn)入默認(rèn)會(huì)話模式;若A區(qū)軟件無(wú)效,則繼續(xù)判斷B區(qū)軟件是否有效。若B區(qū)有效,則運(yùn)行B區(qū)軟件并將軟件激活區(qū)置為B區(qū)激活;若A區(qū)無(wú)效且B區(qū)也無(wú)效,底層將保持在Boot層,并將軟件激活區(qū)置為無(wú)激活區(qū)以及將編程請(qǐng)求置位。若在此狀態(tài)下無(wú)動(dòng)作,1.5h后Boot將進(jìn)入深度睡眠。
3)若激活區(qū)為B區(qū),底層需進(jìn)一步判斷B區(qū)軟件是否有效。若B區(qū)軟件有效,則運(yùn)行B區(qū)軟件并進(jìn)入默認(rèn)會(huì)話模式;若B區(qū)軟件無(wú)效,則繼續(xù)判斷A區(qū)軟件是否有效。若A區(qū)有效,則運(yùn)行A區(qū)軟件并將軟件激活區(qū)置為A區(qū)激活;若B區(qū)無(wú)效且A區(qū)也無(wú)效,底層將保持在Boot層,并將軟件激活區(qū)置為無(wú)激活區(qū)以及將編程請(qǐng)求置位。若在此狀態(tài)下無(wú)動(dòng)作,1.5h后Boot將進(jìn)入深度睡眠。
5" 軟件升級(jí)流程設(shè)計(jì)
A/B分區(qū)控制器軟件升級(jí)執(zhí)行以下設(shè)計(jì)流程,如圖3所示。
1)控制器上電,ECU完成初始化,此時(shí)可能進(jìn)入默認(rèn)會(huì)話模式;若APP無(wú)效,則處在Boot層[4]。
2)借助診斷上位機(jī)進(jìn)入控制器擴(kuò)展會(huì)話模式,禁止故障和通信,進(jìn)而進(jìn)入編程會(huì)話模式[5]。
3)控制器底層對(duì)軟件激活區(qū)進(jìn)行判斷。若激活區(qū)為A,則刷新B區(qū);若激活區(qū)為B區(qū),則刷新A區(qū);若激活區(qū)無(wú),則優(yōu)先刷新A區(qū)。以下流程將以A區(qū)作為激活區(qū)展開說(shuō)明。
4)控制器進(jìn)行安全訪問(wèn),通過(guò)后進(jìn)入安全解鎖狀態(tài)。此時(shí),可將Flash Driver下載至控制器RAM中,并完成循環(huán)冗余校驗(yàn)(CRC)檢驗(yàn)。
5)通過(guò)診斷上位機(jī),將控制器本次更新軟件的事件作為指紋寫入控制器芯片。
6)將控制器應(yīng)用軟件下載到控制器ROM中,并進(jìn)行CRC校驗(yàn)和依賴性檢測(cè)[6]。
7)軟件更新完成后,控制器底層將APP_B軟件有效位置設(shè)為1,并將軟件激活區(qū)設(shè)置為B區(qū)激活,以便下一次軟件上電初始化后能進(jìn)入B區(qū)軟件運(yùn)行。
8)MCU復(fù)位,清除Flash Driver。
9)通過(guò)診斷上位機(jī)命令,控制器進(jìn)入擴(kuò)展會(huì)話模式,開啟通信和診斷功能,控制器進(jìn)入默認(rèn)會(huì)話模式后,清除控制器所有故障碼。
6" 測(cè)試驗(yàn)證
通過(guò)自動(dòng)化腳本對(duì)A/B分區(qū)功能進(jìn)行測(cè)試,如圖4所示。測(cè)試結(jié)果顯示,在控制器軟件失效后,能及時(shí)啟動(dòng)另一區(qū)有效軟件,從而保障控制器正常運(yùn)行[7]。
7" 結(jié)論
本文以實(shí)現(xiàn)控制器軟件在偶發(fā)失效或者軟件更新失敗后仍能繼續(xù)正常工作為目標(biāo),通過(guò)對(duì)某車載核心控制器軟件A/B分區(qū)進(jìn)行設(shè)計(jì)與開發(fā),提高了該控制器軟件在運(yùn)行和更新時(shí)的魯棒性,更好地保障了該車載控制器和整車的產(chǎn)品品質(zhì),同時(shí)也為其他控制器的穩(wěn)健性設(shè)計(jì)提供了良好的參考。
參考文獻(xiàn)
[1] 卓宇豪.基于UDS協(xié)議的電動(dòng)裝載機(jī)整車控制器軟件刷寫機(jī)制及上位機(jī)系統(tǒng)研究[D].泉州:華僑大學(xué),2023.
[2] 趙能卿,張小波,劉欽,等.車輛網(wǎng)絡(luò)安全技術(shù)設(shè)計(jì)開發(fā)[J].汽車實(shí)用技術(shù),2024,49(1):46-50.
[3] 秦穎頎,陳雪峰.基于第二代車載診斷系統(tǒng)接口的汽車嵌入式診斷儀設(shè)計(jì)[J].汽車工程師,2023(8):42-48.
[4] 馬宏偉,吳長(zhǎng)水.基于統(tǒng)一診斷協(xié)議的控制器在線升級(jí)系統(tǒng)設(shè)計(jì)[J].軟件工程,2020,23(8):5-8.
[5] 陸婉利,鐘日敏,黃祖朋.純電動(dòng)汽車整車控制器遠(yuǎn)程升級(jí)方法研究[J].內(nèi)燃機(jī)與配件,2021(18):13-14.
[6] 詹克旭.基于UDS協(xié)議的汽車ECU升級(jí)方案[J].計(jì)算機(jī)應(yīng)用與軟件,2019,36(1):191-196,203.
[7] 巫輝燕,林漢雄.基于HIL的車載網(wǎng)關(guān)控制器的自動(dòng)化測(cè)試研究[J].汽車實(shí)用技術(shù),2021,46(5):140-142.
(編輯" 凌" 波)
收稿日期:2024-05-10
作者簡(jiǎn)介:趙能卿(1991-),男,工程師,研究方向?yàn)檎囯娮与姎庀到y(tǒng)架構(gòu)設(shè)計(jì)與開發(fā);
李加強(qiáng)(1977-),男,博士,副教授,研究方向?yàn)槠嚹茉磁c排放控制(通信作者)。