王崇弟 鄭瓊姑
摘 要:隨著汽車行業(yè)的高速發(fā)展,電子自動(dòng)化的不斷提高,汽車控制系統(tǒng)的電控單元也日益增多,當(dāng)控制器新功能導(dǎo)入、軟件優(yōu)化、軟件bug修復(fù)等都需要通過更新軟件來實(shí)現(xiàn),因此要保證控制器軟件更新的可靠性及穩(wěn)定性十分有必要。
關(guān)鍵詞:可靠性;穩(wěn)定性;UDS
1 前言
通常情況下,軟件進(jìn)入下載模式后,需要先刪除原有的app軟件,再重新下載更新的軟件包,但這樣的操作有個(gè)問題,萬一更新的軟件包本身有bug,原有的app又直接刪除了,就會(huì)造成軟件問題導(dǎo)致控制器死機(jī),這種情況下,難以完成軟件更新,故如何避免該情況發(fā)生,如何確保了安全可靠的軟件下載過程,本文主要介紹有無自回滾功能的軟件設(shè)計(jì),進(jìn)而闡述有自回滾功能的重要性。
2 UDS刷寫描述
UDS(Unified diagnostic service)協(xié)議是一種通用的汽車級(jí)通信協(xié)議,用于發(fā)送和接收CAN報(bào)文。
汽車ECU基于UDS診斷功能而實(shí)現(xiàn)的獨(dú)立且安全的應(yīng)用軟件/數(shù)據(jù)刷新功能。UDS協(xié)議保證app和bootloader跳轉(zhuǎn)的安全性和檢測(cè)app的完整性。UDS協(xié)議有19個(gè)基本服務(wù)以及不同的安全等級(jí),服務(wù)和安全等級(jí)配合使用,UDS協(xié)議要求bootloader和app放在不同的安全內(nèi)存,防止app擦除時(shí)誤擦bootloader程序,同時(shí),從app跳轉(zhuǎn)到bootloader時(shí)要符合UDS的安全等級(jí)要求,不能直接跳轉(zhuǎn),必須從UDS的應(yīng)用模式—擴(kuò)展模式—編程模式,UDS協(xié)議用于保證app和bootloader跳轉(zhuǎn)的安全性;UDS協(xié)議里設(shè)有多幀發(fā)送機(jī)制,大量數(shù)據(jù)發(fā)送時(shí),不能一次完成,需要按幀傳輸,把UDS協(xié)議運(yùn)用到bootloader的軟件下載過程中,可以保證軟件下載的完整性;上位機(jī)每次更新軟件前需要計(jì)算新軟件的大小,并加上CRC校驗(yàn),下載時(shí),這些信息在軟件下載完成后會(huì)同步發(fā)送給ECU的bootloader部分,ECU的bootloader在接收到完整的更新軟件后,不急著啟動(dòng)新程序,先檢查接收到軟件的大小,同時(shí)進(jìn)行CRC校驗(yàn),把計(jì)算結(jié)果和上位機(jī)上傳來的數(shù)據(jù)進(jìn)行比較,結(jié)果一致時(shí)才認(rèn)為更新的軟件完整,可以跳轉(zhuǎn)到application模式,啟動(dòng)新軟件。
3 無回滾功能ECU的軟件設(shè)計(jì)
傳統(tǒng)ECU的FLASH空間劃分為兩個(gè)區(qū)域,一個(gè)區(qū)域?yàn)橛糜诖鎯?chǔ)Bootloader自身的代碼和數(shù)據(jù)的刷新空間,另一個(gè)區(qū)域?yàn)橛糜诖鎯?chǔ)應(yīng)用程序application相關(guān)數(shù)據(jù)的應(yīng)用空間,兩個(gè)區(qū)域均作為獨(dú)立的存儲(chǔ)空間。ECU日常運(yùn)行下上電,如沒有刷新請(qǐng)求,且判斷應(yīng)用程序有效,則跳轉(zhuǎn)到應(yīng)用空間運(yùn)行應(yīng)用程序。
在應(yīng)用程序刷新升級(jí)過程中,Bootloader先將存儲(chǔ)有原有應(yīng)用程序的FLASH空間進(jìn)行擦除,然后再通過與上位機(jī)的UDS通信將新的應(yīng)用程序下載并刷寫到該FLASH空間中。
缺點(diǎn):由于現(xiàn)有ECU應(yīng)用軟件和Bootloader的空間布局,整個(gè)ECU中只有一套Bootloader和應(yīng)用軟件。如果在ECU刷新過程中出現(xiàn)斷電或通信中斷等情況,ECU中僅有Bootloader能夠正常工作,應(yīng)用軟件則處于無效狀態(tài),ECU無法正常執(zhí)行應(yīng)用功能,處于死機(jī)狀態(tài),只有再次進(jìn)行應(yīng)用刷新才能恢復(fù)應(yīng)用程序的功能。
優(yōu)點(diǎn):對(duì)控制器硬件內(nèi)存要求不高,軟件架構(gòu)簡(jiǎn)單。
4 有回滾功能ECU軟件設(shè)計(jì)
(1)控制器內(nèi)存分成兩個(gè)內(nèi)存大小一樣的運(yùn)行區(qū)和備份區(qū)。
(2)應(yīng)用程序只能在運(yùn)行區(qū)里運(yùn)行。
(3)上位機(jī)傳輸?shù)臄?shù)據(jù)只能下載在備份區(qū)。
(4)Bootloader中的標(biāo)志位指示軟件是否下載完成。
(5)軟件更新失敗后,不影響運(yùn)行區(qū)的程序運(yùn)行。
(6)軟件下載成功后,Bootloader將備份區(qū)軟件復(fù)制到運(yùn)行區(qū)。
ECU軟件架構(gòu)包含有Bootloader、運(yùn)行區(qū)軟件以及備份區(qū)軟件,軟件刷新操作時(shí)只是在ECU的備份區(qū)中進(jìn)行,ECU中的運(yùn)行區(qū)軟件仍然在正常運(yùn)行,ECU的bootloader內(nèi)含有一個(gè)標(biāo)志位,application正常應(yīng)用程序時(shí),該標(biāo)志位為0,當(dāng)進(jìn)入bootloader模式,準(zhǔn)備開始下載前,bootloader的標(biāo)志位自動(dòng)置為1,軟件更新下載過程中,該標(biāo)志位為一直保持為1,app下載完成后,標(biāo)志位為0。標(biāo)志位的存在,保證了軟件更新下載過程,標(biāo)志位為1,說明軟件一直處于下載過程,若在下載中途突發(fā)斷電情況,由于標(biāo)志位仍為1,ECU通過標(biāo)志位判定備份區(qū)軟件未完成狀態(tài),ECU仍會(huì)運(yùn)行在運(yùn)行區(qū)的軟件中,若數(shù)據(jù)下載成功,標(biāo)志位0,ECU的Bootloader會(huì)將備份區(qū)的軟件復(fù)制到運(yùn)行區(qū)中。
缺點(diǎn):硬件內(nèi)存要求高,軟件架構(gòu)復(fù)雜。
優(yōu)點(diǎn):刷新過程出現(xiàn)任何故障斷電或者通信中斷時(shí),ECU都可以繼續(xù)運(yùn)行原有的應(yīng)用軟件,且原有應(yīng)用軟件的軟件信息不會(huì)丟失。
5 結(jié)論
軟件自回滾功能有效的避免了刷新過程中的故障,導(dǎo)致原有應(yīng)用軟件數(shù)據(jù)丟失,無法正常啟動(dòng)的問題。該功能提高系統(tǒng)的穩(wěn)定性,更降低因刷新操作失誤導(dǎo)致的經(jīng)濟(jì)損失。
參考文獻(xiàn):
[1]ISO 14229-1:2013 Road vehicles - Unified diagnostic services (UDS) - Specification and requirements.