【摘" 要】當(dāng)今汽車(chē)行業(yè)發(fā)展勢(shì)頭迅猛,汽車(chē)控制器算法更新迭代迅速,軟件刷寫(xiě)測(cè)試也變得愈發(fā)頻繁。然而,目前市面上的刷寫(xiě)上位機(jī)大多基于UDS協(xié)議,針對(duì)單個(gè)控制器進(jìn)行專用設(shè)計(jì),無(wú)法實(shí)現(xiàn)汽車(chē)各控制器的通用化,因此,主機(jī)廠亟待一種可移植且通用的刷寫(xiě)工具。文章基于CANoe軟件,結(jié)合主機(jī)廠的UDS刷寫(xiě)流程,完成一款通用上位機(jī)的設(shè)計(jì)。該工具集成檢查編程條件、檢驗(yàn)刷寫(xiě)可靠性、CRC校驗(yàn)等一系列校驗(yàn)機(jī)制,有效確保軟件刷寫(xiě)的準(zhǔn)確性。最后,通過(guò)實(shí)際案例對(duì)該設(shè)計(jì)的可靠性進(jìn)行驗(yàn)證。
【關(guān)鍵詞】汽車(chē)控制器算法;CANoe軟件;UDS協(xié)議;刷寫(xiě);軟件刷寫(xiě)準(zhǔn)確性
中圖分類(lèi)號(hào):U463.6" " 文獻(xiàn)標(biāo)識(shí)碼:A" " 文章編號(hào):1003-8639(2025)03-0055-04
CANoe-based UDS Brush and Write Design
【Abstract】With the rapid development of automobile industry,the update iteration of automobile controller algorithm is rapid,and the software rewrite test is becoming more and more frequent. However,most of the brush writing host computers on the market are based on the UDS protocol and designed specifically for a single controller,which cannot realize the universality of each controller of the automobile. Therefore,the Oems need a portable and universal brush writing tool. Based on CANoe software and UDS scrub process of OEMS,a universal upper computer is designed in this paper. The tool integrates a series of checking mechanisms such as checking programming conditions,checking the reliability of writing,CRC checking,etc.,which effectively ensures the accuracy of software writing. Finally,the reliability of the design is verified by a practical case.
【Key words】automobile controller algorithm;CANoe software;UDS protocol;brush writing;software writing accuracy
0" 前言
隨著中國(guó)經(jīng)濟(jì)的蓬勃發(fā)展,汽車(chē)作為新型代步工具已走進(jìn)千家萬(wàn)戶。與此同時(shí),隨著汽車(chē)功能的不斷增加,控制器的算法邏輯也日益復(fù)雜。傳統(tǒng)的控制器刷寫(xiě)方式通常依賴供應(yīng)商開(kāi)發(fā)的上位機(jī)進(jìn)行操作,但這種方式難以對(duì)刷寫(xiě)流程進(jìn)行有效把控[1]。
本文所設(shè)計(jì)的刷寫(xiě)方案基于CANoe軟件,依據(jù)ISO 14229協(xié)議,通過(guò)UDS診斷服務(wù),并嚴(yán)格遵循主機(jī)廠的控制器刷寫(xiě)流程來(lái)完成刷寫(xiě)[2-3]。該刷寫(xiě)設(shè)計(jì)方案涵蓋三大流程:預(yù)編程、編程和后編程[4-5]。其中,預(yù)編程主要涉及刷寫(xiě)條件檢測(cè)、DTC禁止更新以及報(bào)文停發(fā)等操作[6]。編程環(huán)節(jié)主要包括程序下載[7];后編程則主要包括DTC的恢復(fù)更新和總線報(bào)文恢復(fù)發(fā)送[8]。本方案的實(shí)現(xiàn)依托CANoe的CAPL及PANEL模塊,極大地提升了刷寫(xiě)的靈活性與可移植性。
1" UDS刷寫(xiě)服務(wù)
ISO 14229協(xié)議定義了UDS診斷服務(wù),其中刷寫(xiě)用到的服務(wù)有10、11、14、27、31、3E、28、85,見(jiàn)表1。
在汽車(chē)診斷服務(wù)中,10服務(wù)有3個(gè)子功能較為常用,分別是01子功能默認(rèn)會(huì)話、02子功能編程會(huì)話以及03子功能擴(kuò)展會(huì)話。11服務(wù)則有2個(gè)常用子功能:01子功能硬復(fù)位,其作用是模擬電源斷開(kāi)后重新連接;03子功能軟復(fù)位,在軟件內(nèi)部出現(xiàn)非預(yù)期情況時(shí)被觸發(fā)。
圖1展示的是診斷會(huì)話跳轉(zhuǎn)流程。ECU上電后處于默認(rèn)會(huì)話狀態(tài),且只有先跳轉(zhuǎn)至擴(kuò)展會(huì)話,才能進(jìn)一步跳轉(zhuǎn)至編程會(huì)話。需要注意的是,刷寫(xiě)文件必須在編程會(huì)話下進(jìn)行操作。
刷寫(xiě)過(guò)程中,可能會(huì)產(chǎn)生因刷寫(xiě)導(dǎo)致的DTC(故障診斷碼)。因此,在刷寫(xiě)后處理階段,需使用14服務(wù)來(lái)清除這些DTC。27服務(wù)主要用于安全解鎖,像2E、31服務(wù)這類(lèi)功能,都需要先通過(guò)安全解鎖才能正常使用。31服務(wù)用于執(zhí)行例行程序,例如31 FF 00指令就是用于擦除內(nèi)存。34、36、37服務(wù)則是專門(mén)用于刷寫(xiě)程序的下載。3E服務(wù)是待機(jī)握手服務(wù),可用于保持非默認(rèn)會(huì)話狀態(tài)。2E服務(wù)能夠通過(guò)標(biāo)識(shí)符寫(xiě)入數(shù)據(jù),在刷寫(xiě)過(guò)程中,可以利用它寫(xiě)入刷寫(xiě)設(shè)備序列號(hào)與指紋等信息。28服務(wù)主要應(yīng)用于刷寫(xiě)前后階段。在刷寫(xiě)前,它可以禁止非診斷報(bào)文繼續(xù)發(fā)送,從而降低總線負(fù)載率,提高刷寫(xiě)效率。85服務(wù)用于控制DTC,由于刷寫(xiě)操作的進(jìn)行,會(huì)不可避免地產(chǎn)生一些DTC,比如網(wǎng)絡(luò)DTC,但這屬于正?,F(xiàn)象。當(dāng)刷寫(xiě)成功后,這些DTC會(huì)被保存為歷史故障,不會(huì)對(duì)車(chē)輛功能產(chǎn)生影響。
2" 刷寫(xiě)流程設(shè)計(jì)
在對(duì)ECU進(jìn)行程序刷寫(xiě)時(shí),整個(gè)過(guò)程可分為3大流程。首先是預(yù)編程階段,該階段主要負(fù)責(zé)刷寫(xiě)前的各項(xiàng)檢測(cè)以及相關(guān)設(shè)置工作。其次是編程階段,其核心任務(wù)是實(shí)現(xiàn)刷寫(xiě)文件的下載。最后是后編程階段,主要用于刷寫(xiě)完成后的處理工作。圖2展示了具體的刷寫(xiě)流程,接下來(lái)將依據(jù)該刷寫(xiě)流程進(jìn)行詳細(xì)說(shuō)明。
預(yù)編程階段的核心目標(biāo)是確保ECU能夠順利進(jìn)入編程會(huì)話狀態(tài)。在此階段,首先要進(jìn)入擴(kuò)展會(huì)話,通過(guò)在CAPL中進(jìn)行函數(shù)封裝來(lái)實(shí)現(xiàn),具體可參照?qǐng)D3所示的跳轉(zhuǎn)擴(kuò)展會(huì)話封裝圖。完成擴(kuò)展會(huì)話的進(jìn)入后,緊接著執(zhí)行檢查編程預(yù)條件例程(31 01 02 03)。檢查編程預(yù)條件是刷寫(xiě)升級(jí)安全保障的關(guān)鍵環(huán)節(jié),其檢測(cè)項(xiàng)目涵蓋車(chē)輛的靜止?fàn)顟B(tài)、電壓是否滿足要求等多個(gè)方面,相關(guān)內(nèi)容在圖4編程預(yù)條件例程封裝中有詳細(xì)展示。
圖5、圖6分別為DTC和通信控制封裝。在刷寫(xiě)過(guò)程中,為避免對(duì)其他ECU產(chǎn)生干擾,需引入28、85服務(wù)。當(dāng)總線負(fù)載較高時(shí),由于診斷ID優(yōu)先級(jí)較低,診斷報(bào)文可能無(wú)法正常發(fā)送,最終導(dǎo)致刷寫(xiě)失敗。因此,運(yùn)用28服務(wù)禁止總線上其余報(bào)文發(fā)送,以此確保診斷報(bào)文的正常傳輸。然而,應(yīng)用報(bào)文無(wú)法發(fā)送時(shí),可能會(huì)觸發(fā)通信DTC。為防止這種情況影響刷寫(xiě)進(jìn)程,此時(shí)需借助85服務(wù)禁止DTC狀態(tài)位更新,從而保證刷寫(xiě)工作的順利進(jìn)行。
編程步驟為程序刷寫(xiě)的主要流程,圖7為刷寫(xiě)主流程部分展示。為了確保刷寫(xiě)的安全性并有效管控版本更新,首先要通過(guò)2E服務(wù)來(lái)完成一系列操作,包括寫(xiě)入指紋信息、記錄版本日志以及寫(xiě)入上位機(jī)序列號(hào)等。其次,將進(jìn)行內(nèi)存擦除、程序下載、退出下載以及檢查刷寫(xiě)可靠性等操作。內(nèi)存擦除是通過(guò)31服務(wù)來(lái)執(zhí)行的,其會(huì)以扇區(qū)為單位擦除Flash中的歷史數(shù)據(jù)。需要注意的是,為防止程序出現(xiàn)異常跑飛時(shí)調(diào)用內(nèi)存擦除驅(qū)動(dòng),該驅(qū)動(dòng)文件通常不會(huì)保存在Flash中,而是由上位機(jī)將其下載到RAM中運(yùn)行,運(yùn)行完畢后,會(huì)隨著斷電而消失。在進(jìn)行文件下載時(shí),需要先對(duì)應(yīng)用文件進(jìn)行解析,應(yīng)用文件的格式一般為S19文件和HEX文件。其中,S19文件以十六進(jìn)制文本形式傳送二進(jìn)制信息,所以對(duì)S19文件的解析尤為重要,具體可參考圖8所示的S19文件解析的封裝函數(shù)。在應(yīng)用文件解析完成之后,需要利用34、36、37服務(wù)進(jìn)行傳輸。首先使用34服務(wù)請(qǐng)求下載的大小和內(nèi)存地址,控制器會(huì)回應(yīng)上位機(jī)最大信息組長(zhǎng)度,然后使用36服務(wù)進(jìn)行每個(gè)信息組的文件傳輸,最后通過(guò)37服務(wù)請(qǐng)求下載結(jié)束。當(dāng)下載流程結(jié)束后,需要對(duì)文件的可靠性進(jìn)行檢測(cè),這里采用的校驗(yàn)算法是CRC32,圖9的CRC32算法函數(shù)可用于此過(guò)程。
后編程步驟的主要目的是確保在刷寫(xiě)完成后,能夠?qū)ο到y(tǒng)進(jìn)行復(fù)位操作,同時(shí)將DTC與通信功能開(kāi)啟,并清除已有的DTC,使控制器恢復(fù)到初始化狀態(tài)。圖10、圖11分別為后編程中的清除故障碼函數(shù)與復(fù)位函數(shù)封裝。
3" 實(shí)例驗(yàn)證
刷寫(xiě)流程設(shè)計(jì)完成后,為了確保刷寫(xiě)人員操作可以高效方便的使用,利用CANoe的PANEL開(kāi)發(fā)出了診斷刷寫(xiě)面板(圖12)。此面板具備多項(xiàng)實(shí)用功能,例如可以選擇文件夾刷寫(xiě),同時(shí)還允許用戶通過(guò)Send Data Input(HEX)窗口手動(dòng)輸入診斷指令來(lái)發(fā)送診斷數(shù)據(jù)。
圖13呈現(xiàn)了刷寫(xiě)過(guò)程中報(bào)文的錄制情況。在該過(guò)程中,控制器的請(qǐng)求診斷ID為7E2,而響應(yīng)診斷ID為7EA。在具體的刷寫(xiě)操作中,首先使用27服務(wù)通過(guò)了控制器的安全驗(yàn)證,接著利用31 01 FF 00擦除歷史數(shù)據(jù),隨后利用34、36、37服務(wù)進(jìn)行數(shù)據(jù)傳輸,最終刷寫(xiě)成功。
4" 結(jié)論
本文旨在解決當(dāng)前存在的一個(gè)問(wèn)題,即大多數(shù)軟件刷寫(xiě)工具都是由控制器供應(yīng)商開(kāi)發(fā)的黑盒上位機(jī),這類(lèi)工具存在明顯的局限性。由于它們是黑盒性質(zhì),用戶無(wú)法對(duì)刷寫(xiě)流程進(jìn)行改變,并且其復(fù)用性較差,在刷寫(xiě)操作上缺乏足夠的靈活性。為了克服這些問(wèn)題,開(kāi)發(fā)了一種新型的軟件刷寫(xiě)工具。該工具基于CANoe平臺(tái),利用CAPL將各個(gè)函數(shù)功能模塊進(jìn)行封裝。通過(guò)對(duì)這些封裝好的功能模塊進(jìn)行組合,可以靈活地適用于多種刷寫(xiě)流程,并且刷寫(xiě)過(guò)程是可控的。此外,通過(guò)實(shí)例測(cè)試,對(duì)該工具的穩(wěn)定性和準(zhǔn)確性進(jìn)行了驗(yàn)證,結(jié)果表明該工具性能良好。鑒于其優(yōu)勢(shì),此軟件刷寫(xiě)工具具有廣泛的應(yīng)用前景,有望在不同的刷寫(xiě)場(chǎng)景中發(fā)揮重要作用。
參考文獻(xiàn)
[1] 邵廣亞,王婷,王奇.基于UDS協(xié)議的VCU升級(jí)方案設(shè)計(jì)[J].汽車(chē)電器,2023(10):35-38.
[2] 吳成加,鄭磊,夏宇生,等.基于UDS協(xié)議的車(chē)輛OTA開(kāi)發(fā)[J].客車(chē)技術(shù)與研究,2024,46(3):39-44.
[3] 趙天義,陳星,高熊.基于UDS的控制器在線升級(jí)系統(tǒng)設(shè)計(jì)[J].機(jī)電工程技術(shù),2022,51(2):74-77.
[4] 潘文卿,王飛飛,宋炳雨.單變量刷寫(xiě)的研究與應(yīng)用[J].汽車(chē)電器,2022(4):49-50,53.
[5] 李娟,劉鑫,張玉敏,等.基于CAN的UDS服務(wù)BootLoader設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2021,17(27):129-131.
[6] 唐恒飛,王效金.基于UDS協(xié)議的汽車(chē)控制器刷寫(xiě)軟件設(shè)計(jì)[J].智能計(jì)算機(jī)與應(yīng)用,2021,11(1):102-105.
[7] 詹克旭.基于UDS協(xié)議的汽車(chē)ECU升級(jí)方案[J].計(jì)算機(jī)應(yīng)用與軟件,2019,36(1):191-196,203.
[8] 韓文斌,韓云霄,李廣宇,等.基于無(wú)線通信技術(shù)和UDS協(xié)議實(shí)現(xiàn)Bootload功能的TPMS胎壓傳感模塊設(shè)計(jì)[J].汽車(chē)電器,2014(10):60-64.