中圖分類號(hào):U463.6 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1003-8639(2025)06-0084-03 Design ofDomain ControllerBootloaderSystem Basedon CANFD YuWenhan,Chen Mingyin,Lin Zhi,F(xiàn)ang Zebin,Lin Yuyu,HuangYongbo (Guangzhou Automobile Group Co.,Ltd.,Automotive Engineering Institute,Guangzhou 510,China)
【Abstract】This paper based on the UDS diagnostic protocol and the auto factory's write specification,aset of write upper computer and domain controller Bootloader upgrade scheme based on CANFD communication is designed. Theupper computer is independentlydeveloped byTsmaster.OnlyFlash DriverandApp filescanbeimported toachieve a complete brush and write process,which is efficient andpractical.In the domaincontrolerscheme,thedesign principleofBTprogramiscompletelyproposed,inwhichAppbackupcan ensure theintegrityofECU function,and the scheme of Flash Driver downloaded toRAMenhances therobustness androbustness of theprogram.Theexperiment shows that the upper computer schemecan realize the complete process of brushing andwriting,and the domain controller Bootloader program has high stability.
【Keywords】 CANFD;ZCU;Bootloader;reprogramming
0 引言
2020年以前,汽車電子電氣架構(gòu)主要采用分布式架構(gòu),該架構(gòu)無(wú)法應(yīng)對(duì)功能快速迭代升級(jí)和定制化生產(chǎn)的需求,也無(wú)法滿足未來(lái)汽車龐大的算力和數(shù)據(jù)要求。2023年開(kāi)始,主機(jī)廠開(kāi)始選擇集中式域控架構(gòu)作為解決方案。集中式域控架構(gòu)包括中央域、智駕域、信息娛樂(lè)域和區(qū)域控制等關(guān)鍵控制器。這些域控制器集成了分布式架構(gòu)下控制器的眾多功能,由于軟件迭代頻繁,所以這些控制器的軟件升級(jí)就顯得格外重要。
控制器供應(yīng)商排查整車問(wèn)題時(shí)常用的是Bootloader刷新。CANFD通信可以增加通信速率1。本文依據(jù)ISO14229標(biāo)準(zhǔn)的UDS診斷協(xié)議,并結(jié)合整車廠的刷寫(xiě)規(guī)范,設(shè)計(jì)一套基于CANFDUDS的BootLoader上下位機(jī)升級(jí)方案。
1車載軟件總體論述
一個(gè)可重編程的ECU包含Bootloader(BT)和App程序。Bootloader是MCU上電后運(yùn)行的第一段程序2,它可初始化硬件設(shè)備、建立內(nèi)存空間的映射,也可對(duì)Flash進(jìn)行擦除和編程,起到引導(dǎo)應(yīng)用程序和升級(jí)應(yīng)用程序的作用。簡(jiǎn)而言之,F(xiàn)lashBootloader通過(guò)CAN總線升級(jí)App程序。一個(gè)ECU如果沒(méi)有BT,那么更新程序只能通過(guò)燒錄器,反之,則可以通過(guò)診斷接口進(jìn)行升級(jí),這在整車上是非常方便的,不用拆件[3]。僅當(dāng)應(yīng)用程序無(wú)效、上電之初和軟件升級(jí)時(shí)才會(huì)運(yùn)行Bootloader。ECU在多數(shù)時(shí)間執(zhí)行的是應(yīng)用程序。
Bootloader在產(chǎn)品出廠時(shí)就會(huì)固定下來(lái),當(dāng)需要更新程序時(shí),通過(guò)BT程序?qū)pp程序進(jìn)行擦除和重新寫(xiě)人,即產(chǎn)品出廠后只更新App軟件。ECU正常上電走完初始化后,會(huì)判斷是否有升級(jí)請(qǐng)求,如果沒(méi)有則跳到App程序運(yùn)行;如果有升級(jí)請(qǐng)求,則運(yùn)行BT程序進(jìn)行升級(jí)4。BT程序一般放在Flash的最開(kāi)始處,App程序在其后,這樣可以獨(dú)立配置兩個(gè)區(qū)域的內(nèi)存保護(hù)。如圖1所示,App程序和BT程序占用不同的Flash,App程序和BT程序的區(qū)別在于它通過(guò)控制驅(qū)動(dòng)芯片、功率芯片和通信芯片,從而具有了輸入輸出功能。

1.1 Bootloader
Bootloader是Boot加Loader,Boot是引導(dǎo),用于初始化硬件設(shè)備,是為L(zhǎng)oader做準(zhǔn)備的。Loader是加載器,Boot準(zhǔn)備好環(huán)境后,Loader將要執(zhí)行的程序從非易失性存儲(chǔ)設(shè)備中加載到內(nèi)存中運(yùn)行。Bootloader通過(guò)調(diào)用特定IAP程序?qū)α硗庖欢蜦lash空間進(jìn)行讀與寫(xiě)操作,從而實(shí)現(xiàn)對(duì)MCU程序的更新。ECU如果有BT程序,則可通過(guò)CAN刷寫(xiě)進(jìn)行版本修改、升級(jí),不用拆件,極大地方便了開(kāi)發(fā)者。
圖1中,BT程序使用UDS的診斷服務(wù)作為通信協(xié)議,它具有CAN驅(qū)動(dòng)、傳輸層和UDS協(xié)議層的通信堆棧。由于BT程序的重要性,它應(yīng)該被存放在已進(jìn)行保護(hù)(軟件上鎖或硬件保護(hù))的存儲(chǔ)區(qū)域??紤]可能刷寫(xiě)失敗導(dǎo)致丟失 App 程序,可以在Flash中增加App備份、BT備份程序。
1.2 Flash Driver
本文FlashDriver指MCU廠商提供的擦寫(xiě)Flash的驅(qū)動(dòng)函數(shù),當(dāng)升級(jí)時(shí),F(xiàn)lashDriver會(huì)被臨時(shí)下載到RAM中,軟件升級(jí)完成后復(fù)位就會(huì)刪除。這樣可以避免程序正常運(yùn)行中誤調(diào)用FlashDriver導(dǎo)致Flash程序被改寫(xiě)。
?
FlashDriver至少包含四個(gè)Flash接口函數(shù):初始化、反初始化、擦除和寫(xiě)入。初始化函數(shù),BT程序調(diào)用此函數(shù)為Flash編程執(zhí)行硬件特定的初始化;反初始化函數(shù),下載完成后,BT調(diào)用此函數(shù)執(zhí)行特定的硬件操作來(lái)完成Flash編程,擦除函數(shù),BT程序調(diào)用此函數(shù)擦除指定的內(nèi)存區(qū)域;寫(xiě)入函數(shù),BT程序調(diào)用此函數(shù)把數(shù)據(jù)寫(xiě)進(jìn)Flash。
1.3 Flash Tool
FlashTool可以使用 C++[6] 、C#等進(jìn)行開(kāi)發(fā)。如圖2所示,刷寫(xiě)上位機(jī)導(dǎo)入安全算法文件、FlashDriver、App文件后自動(dòng)解析出 bin 文件里的起始地址、長(zhǎng)度等信息,通過(guò)CAN卡(CANoe、Vspy、Kvaser、同星等)發(fā)送診斷報(bào)文與下位機(jī)進(jìn)行交互9。下位機(jī)接收到診斷報(bào)文后調(diào)用FlashDriver里的擦寫(xiě)函數(shù)進(jìn)行App程序升級(jí)。如果上位機(jī)發(fā)報(bào)文格式錯(cuò)誤或者下位機(jī)響應(yīng)錯(cuò)誤都將導(dǎo)致刷寫(xiě)失敗。
FlashTool下載流程如下。
1)讀取編譯后的目標(biāo)文件(s19、hex)。
2)控制下載流程。
3)基于協(xié)議執(zhí)行數(shù)據(jù)傳輸。
4)執(zhí)行驗(yàn)證。
2 BT程序軟件設(shè)計(jì)
復(fù)位后,ECU從BT程序開(kāi)始運(yùn)行,確保BT程序不受特定應(yīng)用程序硬件設(shè)置的影響。為確保BT程序不被修改,有些MCU廠商還會(huì)給BT程序加鎖實(shí)現(xiàn)保護(hù)。
2.1 Flash重編程規(guī)范
如圖3所示,ECU啟動(dòng)完成初始化后判斷是否有外部升級(jí)請(qǐng)求,有則跳到BT程序;沒(méi)有則判斷App程序是否有效,有效則跳到 App 程序,無(wú)效則跳到BT程序。
?
ISO14229系列標(biāo)準(zhǔn)定義的統(tǒng)一診斷服務(wù)(Uni-fiedDiagnosticServices,UDS)診斷協(xié)議是用于汽車行業(yè)診斷通信的需求規(guī)范。表1是刷寫(xiě)常用的診斷服務(wù)[0]。基于UDS診斷協(xié)議和整車廠的刷寫(xiě)規(guī)范,將刷寫(xiě)分為三個(gè)步驟:預(yù)編程、服務(wù)器編程和后編程。
2.2 預(yù)編程
預(yù)編程通過(guò)物理尋址和功能尋址發(fā)送診斷報(bào)文為編程網(wǎng)絡(luò)準(zhǔn)備網(wǎng)絡(luò)。檢查編程條件是為了判斷當(dāng)前條件是否可以升級(jí)。當(dāng)條件不滿足時(shí)(高壓上電、低壓異常或車速不為0),刷新服務(wù)請(qǐng)求將被拒絕。關(guān)閉DTC記錄和所有非診斷報(bào)文傳輸是為了降低總線負(fù)載率,為接下來(lái)的服務(wù)器編程準(zhǔn)備網(wǎng)絡(luò)。預(yù)編程步驟如圖4所示。
?
22服務(wù)讀取 擴(kuò)展模式 檢查編程條件 預(yù)編程 \22xx\yy10\0331\0102\01003 停發(fā)非診斷報(bào)文 關(guān)閉DTC檢測(cè) \0028\0301 \8502
2.3 服務(wù)器編程
服務(wù)器編程是整個(gè)編程步驟的重點(diǎn),它包含了安全算法、寫(xiě)指紋信息、下載FlashDriver、升級(jí)App程序、校驗(yàn)程序完整性一致性等關(guān)鍵步驟。
ECU收到1002指令后將外部刷新請(qǐng)求標(biāo)志位設(shè)置為有效并執(zhí)行ECU重啟。解鎖ECU,F(xiàn)lashTool向ECU請(qǐng)求種子,F(xiàn)lashTool和ECU都計(jì)算出密鑰,F(xiàn)lashTool將密鑰發(fā)送給ECU。ECU將匹配自己算出的值和FlashTool收到的密鑰值,如果一致,則通過(guò)安全算法。寫(xiě)指紋信息是將診斷儀完成的刷寫(xiě)信息寫(xiě)進(jìn)ECU,這樣可以追溯到對(duì)應(yīng)的診斷儀。
因?yàn)镕lash中存儲(chǔ)FlashDriver有風(fēng)險(xiǎn),所以FlashDriver是通過(guò)34、36、37服務(wù)下載到RAM。如圖5所示,寫(xiě)App程序需要參數(shù)為 31~\ S 01 FF" "00 的RoutineControl服務(wù)請(qǐng)求擦除請(qǐng)求的邏輯塊。邏輯塊的所有段都通過(guò)服務(wù)RequestDownload(參數(shù)為起始地址和段的長(zhǎng)度)、TransferData和RequestTransfer-Exit的序列下載到ECU。在34服務(wù)之后,段的所有數(shù)據(jù)字節(jié)由36服務(wù)傳輸。傳輸完所有的段字節(jié)后,使用37服務(wù)結(jié)束下載。
2.4 后編程
如圖6所示,后編程步驟由2E服務(wù)和硬復(fù)位等步驟完成。寫(xiě)編程日期將編程日期寫(xiě)入Flash中,可以追溯到最近一次刷寫(xiě)的時(shí)間。硬復(fù)位將重啟ECU并最終跳轉(zhuǎn)到App程序運(yùn)行。
?
?
3試驗(yàn)
本文基于域控制器進(jìn)行CANFD的刷寫(xiě)試驗(yàn),采用同星TC1013為刷寫(xiě)CAN卡,同星配套軟件Tsmas-ter為上位機(jī)。假如刷寫(xiě)條件(供電電壓、車速等)不滿足,刷寫(xiě)會(huì)失敗;假如刷寫(xiě)過(guò)程中斷電,由于有App備份,ECU依然具有備份的App程序。整個(gè)試驗(yàn)過(guò)程檢驗(yàn)了FlashTool上位機(jī)的功能,也檢驗(yàn)了域控制器的BT程序。整個(gè)刷寫(xiě)流程滿足國(guó)標(biāo)和企標(biāo)要求,試驗(yàn)成功。如圖7所示。
4結(jié)束語(yǔ)
本文依據(jù)ISO14229標(biāo)準(zhǔn)的UDS診斷協(xié)議,并結(jié)合整車廠的刷寫(xiě)規(guī)范,設(shè)計(jì)了一套基于CANFDUDS的Bootloader上位機(jī)和域控制器升級(jí)方案。上位機(jī)采用同星配套軟件Tsmaster,上位機(jī)方案自主開(kāi)發(fā)出刷寫(xiě)界面,只用導(dǎo)人FlashDriver和App文件即可,高效實(shí)用。上位機(jī)方案完整地提出了刷寫(xiě)的流程。域控制器升級(jí)方案中完整地提出了BT程序的設(shè)計(jì)原理,其中App備份可以保證ECU功能的完整性。FlashDriver臨時(shí)下載到RAM中的方案增強(qiáng)了程序的魯棒性和健壯性。
參考文獻(xiàn):
[1]潘文卿,劉興義,王飛飛.CANFD協(xié)議在程序刷寫(xiě)中的研究與應(yīng)用[J].汽車電器,2021(12):36-38,41.
[2]凌露露,趙芬.車載毫米波雷達(dá)Bootloader的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2021(9):218-220.
[3]陳睿智,石春,吳剛,等.面向OTA需求的汽車電控單元Bootloader設(shè)計(jì)[J].儀表技術(shù),2021(2):8-12,22.
[4]李鑫,李艷明,王志遠(yuǎn),等.基于CAN總線電氣綜合控制盒Bootloader軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].車輛與動(dòng)力技術(shù),2021(1):39-42,54.
[5]李興國(guó),周榮,李旭.基于PowerPC系列處理器的Boot-loader設(shè)計(jì)與應(yīng)用[J].鐵路通信信號(hào)工程技術(shù),2020,17(1):34-37.
[6]袁鋒,丁元章,張偉,等.基于S32K148的車輛網(wǎng)關(guān)CANBootloader開(kāi)發(fā)與實(shí)現(xiàn)[J].汽車電器,2021(12):30-32,35.
[7]唐恒飛,王效金.基于UDS協(xié)議的汽車控制器刷寫(xiě)軟件設(shè)計(jì)[J].智能計(jì)算機(jī)與應(yīng)用,2021,11(1):102-105
[8]么居標(biāo),宋建桐,呂江毅,等.基于CAN總線的電機(jī)控制器Bootloader開(kāi)發(fā)[J].測(cè)控技術(shù),2018,37(10):124-126,131.
[9]楊朝陽(yáng),黃凱旋,仝秀峰,等.基于UDS的Bootloader上下位機(jī)設(shè)計(jì)[J].軟件,2023,44(7):42-47.
[10]趙鑫.基于CAN總線的多控制器軟件刷寫(xiě)技術(shù)的研究與實(shí)現(xiàn)[D].武漢:武漢科技大學(xué),2022.
(編輯楊凱麟)
?