李嬌嬌 張宏偉 陳金干
摘 ?要:ECU(Electronic Control Unit)汽車電子控制單元的集成功能日益復雜,為了應對軟件更新及對Bootloader的需求問題,本文研究利用LabVIEW編程語言,采用CAN總線通信技術,遵循UDS協(xié)議規(guī)范,根據(jù)Bootloader刷寫流程,設計了基于LabVIEW的汽車ECU刷寫上位機軟件。該上位機集成了數(shù)據(jù)刷寫過程中的所有診斷服務,提供了簡單明了、易操作的人機交互界面,實現(xiàn)了程序在線更新功能,能夠很好地完成汽車ECU程序刷寫任務。試驗測試結果表明使用CAN網(wǎng)絡測試工具和該上位機界面能夠成功地實現(xiàn)頻繁地刷寫更新程序,已經(jīng)用在了現(xiàn)實程序刷寫操作中,具有較高的可靠性和有效性。
關鍵詞:CAN總線;UDS協(xié)議;Bootloader刷寫流程;LabVIEW
中圖分類號:TP26 ? ? 文獻標識碼:A
1 ? 引言(Introduction)
近年來,新能源電動汽車、車聯(lián)網(wǎng)技術和無人駕駛技術的浪潮風起云涌,在一定程度上促進了汽車電子技術的發(fā)展[1]。同時,人們對于汽車的各種高端功能、駕駛安全性以及舒適度的要求也越來越高了[2],為了應對這些需求,實現(xiàn)這些功能,ECU的數(shù)量就需要增多,ECU的控制策略和功能的復雜程度也需要提高,致使ECU軟件在線更新也越來越頻繁。在汽車的開發(fā)、生產(chǎn)和售后等階段中,每個階段都有軟件更新的需求[3]。傳統(tǒng)的軟件的更新方法需要BDM調試器通過BDM調試接口進行程序的下載,該方法數(shù)據(jù)下載速度慢,插拔很不方便,并且在ECU開發(fā)后期一般不再有調試端口,這樣對控制器程序的下載更新調試就非常的麻煩[4]。為了在開發(fā)過程中更快捷方便地完成程序地燒錄更新以及在不用拆下汽車控制器的情況下,通過CAN總線作為通信介質完成程序地升級更新及調試,設計完成了該上位機軟件[5]。
2 ? 系統(tǒng)設計方案(The scheme design of system)
作為在線刷寫升級系統(tǒng)的上位機軟件,主要是通過CAN測試工具和下位機建立對話服務[6]。首先需要對需要更新升級的S19文件進行解析,轉化為CAN報文格式,依據(jù)Bootloader數(shù)據(jù)下載流程,然后根據(jù)UDS協(xié)議中的各項服務規(guī)則向下位機發(fā)送指令,完成程序的刷寫更新。系統(tǒng)總體架構如圖1所示。
本設計是基于USB CAN測試工具作為硬件接口進行開發(fā),其體積小巧,成本低廉,使用非常方便,并且支持LabVIEW軟件進行二次開發(fā),能夠滿足各種應用開發(fā)需求[7]。UDS(Unified Diagnostics Services)協(xié)議,是一種面向汽車電子控制單元(ECU)的統(tǒng)一診斷服務,不僅用于汽車故障診斷,還應用于軟件刷寫等應用場景,可以說是目前汽車電子領域應用最廣泛的技術協(xié)議之一[8]。
3 ?Bootloader數(shù)據(jù)下載流程(The data download process of Bootloader)
Bootloader數(shù)據(jù)下載流程主要是依據(jù)UDS協(xié)議標準。UDS提供了一套標準的診斷服務,給出了車輛診斷通訊服務規(guī)范和一些參數(shù)說明,以及一些功能單元服務的基本要求[9]。UDS是一種客戶端與服務端的通信服務,即客戶端(Tester)向ECU發(fā)送診斷服務請求(Request),ECU則向客戶端發(fā)送對應服務的請求響應(Response)[10]。通過上位機軟件向下位機ECU刷寫程序的流程主要是依據(jù)Bootloader數(shù)據(jù)下載流程。Bootloader的數(shù)據(jù)下載流程總體分為三個步驟,分別為:預編程階段、主編程進行階段、后編程階段[11]。
3.1 ? 預編程階段
預編程階段是用來為要下載更新程序前的CAN網(wǎng)絡做準備,流程如圖2所示。
(1)在設置刷新網(wǎng)絡前,ECU需要進入擴展會話模式。一般來說,程序初始化后直接進入默認模式運行,當需要更高級的訪問權限時,則使用該模式。
(2)例程控制(0×31):通過例程控制服務來檢查編程預條件,為接下來的更新提供一個安全的更新環(huán)境。如果條件不滿足則退出刷寫,從而確保系統(tǒng)的安全。
(3)刷新期間,要求各個ECU停止除診斷以外信息的發(fā)送和接收,禁止重新設置故障碼[12]。
(4)刷寫工具通過通信控制服務請求禁止不屬于診斷服務的報文數(shù)據(jù)的發(fā)送和接收,盡可能地降低總線的負載率,為接下來的數(shù)據(jù)傳輸提供足夠的寬帶。
3.2 ? 主編程進行階段
在預編程階段之后,是主編程進行階段,是數(shù)據(jù)刷寫的具體階段。主編程進行階段時序是單個ECU編程事件的應用,該階段主要是下載應用軟件或應用數(shù)據(jù),因此所有的服務請求都使用物理尋址,即一對一的通信[13]。如圖3所示,描述了在主編程進行階段中執(zhí)行的各項具體服務。
(1)進入診斷會話控制,ECU啟動Bootloader,并分配編程所需的所有資源。
(2)安全訪問:主編程階段必須通過安全訪問。進行安全訪問模式通過發(fā)送0×27服務來獲取刷寫數(shù)據(jù)的權限。上位機獲取該請求種子,并發(fā)送密鑰給下位機,下位機將接收到的窯鑰值與自身通過運算的值進行比較,當上位機發(fā)送的密碼與ECU相匹配時,則獲得進入所要求的診斷模式的權限,然后運行相應的診斷命令,進入相應的模式。
(3)程序升級:當ECU的非易失性存儲單元中沒有存儲內存驅動時,將執(zhí)行內存驅動的下載。下載應該按照如圖3所示順序進行。
(4)例程控制服務(0×31)—“擦除ECU內存”:接下來是需要將應用軟件和數(shù)據(jù)下載至ECU中,在此之前,ECU的內存需要被擦除掉,該步驟通過例程控制服務來執(zhí)行擦除ECU內存操作。
(5)例程控制—“檢查編程完整性”:此服務用來檢驗邏輯塊的完整性,即驗證之前傳輸數(shù)據(jù)的完整性[14]。
(6)重置ECU:所有數(shù)據(jù)下載完成后,測試工具將應用一個例程來觸發(fā)ECU從而檢查編程的依賴性。這些檢查內容一般是由ECU供應商定義的,但是其中的內容必須確保所有邏輯塊的兼容性、一致性和完整性[15]。
3.3 ? 后編程階段
后編程階段按照如圖4所示,該階段用來確認更新已經(jīng)完成,同時該階段是在復位后在應用程序中執(zhí)行一些恢復整車網(wǎng)絡通信,以及配置信息的相關操作。
(1)重置ECU:測試工具軟件使用物理尋址,發(fā)送一個復位類型為硬件復位(子功能01)的ECU復位請求報文到CAN網(wǎng)絡上,ECU收到請求后,回復一個肯定響應,結束后編程過程,返回到正常的操作模式。
(2)進入默認會話模式。
(3)完成刷寫功能。
4 ? S19文件解析(S19 file parsing)
上位機軟件刷寫的程序主要用于ECU讀取并下載數(shù)據(jù)更新程序,該程序就是S19文件[16]。因此,需要對S19文件進行解析并提取出有效數(shù)據(jù),轉化為CAN報文格式,對ECU進行程序更新。
S19文件是Freescale CodeWarrior編譯器生成的后綴名為.S19的程序文件,使用文本打開是一行行的十六進制數(shù)據(jù),文件中的每一行稱為一條記錄,每行的數(shù)據(jù)長度不等,其中最長78個字節(jié),156個字符,包括記錄類型、記錄長度、記錄地址、記錄數(shù)據(jù)和校驗和[17]。
S19數(shù)據(jù)格式轉化為CAN報文格式時,需要遵循UDS診斷協(xié)議規(guī)范對S19文件進行解析,提取地址信息、數(shù)據(jù)長度信息和有效數(shù)據(jù)信息[18]。為了方便解析處理S19文件,通過HexView軟件觀察數(shù)據(jù)內容,該S19文件共分為13個Block,還顯示每個Block的首地址,以及每個Block的字節(jié)長度,根據(jù)這些信息解析提取S19文件的有效數(shù)據(jù)。
5 ?上位機軟件系統(tǒng)設計(The design of host software system)
為了實現(xiàn)上述程序刷寫功能,本上位機軟件設計主要分為系統(tǒng)初始化設置模塊、S19文件解析模塊、主程序設計模塊、實時進度的推送模塊和刷寫結果的反饋模塊及安全登錄模塊。
5.1 ? 系統(tǒng)初始化設置
初始化階段包括啟動接口卡、配置CAN總線和啟動CAN總線[19]。通過調用LabVIEW庫函數(shù),把各個CAN工具的動態(tài)函數(shù)庫DLL按照順序創(chuàng)建子VI封裝起來,完成初始化配置,保證LabVIEW軟件中底層驅動的可靠性、穩(wěn)定性[20]。
5.2 ? 數(shù)據(jù)發(fā)送接收設置
數(shù)據(jù)發(fā)送子程序是用來向下位機發(fā)送CAN報文數(shù)據(jù),通過調用庫函數(shù)的VCI_Transmit函數(shù)來實現(xiàn)該功能。
5.3 ? S19文件解析
S19文件是一種程序文件,可以使用LabVIEW中讀取文本文件函數(shù)來讀取該文件并轉化為字符串數(shù)組。通過S19文件中的記錄類型(前兩個字節(jié))來判斷S19文件地址長度。通過截取字符串函數(shù)和匹配字符串函數(shù)提取出S19文件中的首地址,再通過上述程序中獲得的地址長度判斷提取S19文件中的有效數(shù)據(jù),這些有效數(shù)據(jù)就是我們需要通過上位機刷寫到下位機ECU的程序數(shù)據(jù)。將上述程序獲得的有效數(shù)據(jù)轉化為二維數(shù)組,并對獲得的有效數(shù)據(jù)的正確性進行判斷。
要寫入的S19文件的有效數(shù)據(jù)是按照Block劃分的,每個Block的劃分是依據(jù)首地址和數(shù)據(jù)長度,劃分之后并需要獲得該Block字節(jié)數(shù)的大小,與通過HexView軟件觀察數(shù)據(jù)內容而得到的每個Block的首地址和字節(jié)數(shù)大小來核對程序是否正確,至此,S19文件解析完畢。
5.4 ? 主程序設計
在LabVIEW中,數(shù)據(jù)的傳輸是以數(shù)據(jù)流的方式傳輸?shù)?,?shù)據(jù)流是一連串CAN報文數(shù)據(jù)的發(fā)送。根據(jù)Bootloader數(shù)據(jù)刷寫流程規(guī)范設計該LabVIEW程序的數(shù)據(jù)流。主程序設計流程圖如圖5所示。
5.5 ? 實時進度的推送和刷寫結果的反饋
刷寫功能的執(zhí)行時間主要取決于用于刷寫的S19文件的大小,通常情況下1M大小的S19文件包含超過13000行記錄,接近40萬字節(jié)有效數(shù)據(jù),刷寫的時間將超過兩分鐘,對于用戶而言,在兩分鐘內沒有得到任何刷寫相關的指示將會使用戶感到焦慮,所以實時進度的推送是十分有必要的。本設計通過刷寫進度條來直觀地顯示刷寫工程的速度和進度,直到百分之百,表明刷寫完成。同時,刷寫進度還通過字符串文字顯示當前刷寫狀態(tài),可以清楚明了地知道具體刷寫到哪一步驟。
5.6 ? 安全驗證
首先,對操作者的身份進行驗證。刷寫操作人員必須是相關的工程師或者經(jīng)授權的測試人員,因此需要密碼登錄來確保非相關人員誤操作[21]。
6 ? 結論(Conclusion)
首先給ECU上電,使其進入正常的運行模式,然后對LabVIEW上位機的前面板進行設置,配置好參數(shù)后,運行上位機,點擊CAN通訊設備狀態(tài)按鈕,打開CAN通訊;點擊添加,添加S19文件;由客戶端切換到服務端,輸入登錄密碼;點擊stay in boot,完成stay in boot配置(在啟動流程中加入stay in boot這一階段,是為了增加時間冗余來保證軟件的可靠性);點擊開始,開始刷寫,同時通過上位機界面進度條和當前狀態(tài)文字信息提示,觀察刷寫進程。上位機刷寫界面如圖6所示。
參考文獻(References)
[1] 汪春華,白穩(wěn)峰,劉胤博,等.基于CAN總線UDS服務BootLoader應用開發(fā)[J].電子測量技術,2017,40(02):166-170.
[2] 吳進軍,方繼根,王西峰,等.基于CAN總線的新能源汽車ECU控制器程序刷寫系統(tǒng)設計[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2018,31(02):1-3;7.
[3] 申欣欣.電動汽車控制器上位機監(jiān)控軟件設計[D].吉林大
學,2018.
[4] Chen Sha,Z.Y.Lin,Design Optimization and Implementation of Bootloader in Embedded System Development[J].International Conference on Computer Science and Applications IEEE,2018,34(5):151-156.
[5] A.Muneeswaran.Automotive diagnostics communication protocols analysis kwp2000 can and uds[C].IOSR Journal of Electronics and Communication Engineering (IOSR-JECE).IOSR,2019,16(5):20-31.
[6] ISO 14229.Road vehicles-Unified Diagnostic Services[C].
Geneva,Switzerland:ISO,2013,43(15):457-462.
[7] Ji Zhang,X.Zhu,Y.Peng.Research and implementation of automobile ECU bootloader self-update[J].Electrical Control Engineering and Computer Science,2018,45(3):27-34.
[8] 陳程杰.基于CAN總線的ECU在線刷新和遠程服務系統(tǒng)的開發(fā)[D].天津大學,2017.
[9] 馮海明,王波,張健,等.基于CAN總線的車載VCU在線程序升級設計[J].客車技術與研究,2019,41(01):26-28.
[10] 張宏,李陽春,李洪雷.基于控制器刷寫效率的軟件開發(fā)方法[J].汽車實用技術,2016,26(05):125-126;163.
[11] 喻尚,楊艷.基于車聯(lián)網(wǎng)的控制器遠程診斷與刷寫[J].汽車實用技術,2016,43(09):183-185.
[12] 吳進軍,方繼根,王西峰,等.基于CAN總線的新能源汽車ECU控制器程序刷寫系統(tǒng)設計[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2018,31(02):1-3;7.
[13] 張海濤.CAN總線在新能源汽車電機控制器程序升級中的應用[J].上海汽車,2018,13(06):38-42.
[14] 張寧.基于LabVIEW的LED光電熱測試系統(tǒng)的設計與實現(xiàn)[D].山東大學,2018.
[15] 丁群燕,曾鑫,鄭振.基于RCP平臺的新能源汽車整車控制器軟件開發(fā)及應用[J].機電工程技術,2019,48(05):117-119.
[16] 逯玉蘭.基于LabVIEW的電能質量分析與監(jiān)測系統(tǒng)[J].計算機應用與軟件,2019,36(07):55-58.
[17] 王詠寧,李自清.基于LabVIEW的超聲波測速系統(tǒng)[J].軟件工程,2017,20(06):35-37.
[18] 王琦.基于CAN總線的Bootloader研究與實現(xiàn)[D].南京郵電大學,2016.
[19] 楊勝兵,薛冰,萬宏偉,等.基于LabVIEW的車輛ECU在線編程系統(tǒng)設計[J].自動化與儀表,2017,32(05):62-65.
[20] 陳春明.純電動汽車整車控制器軟件系統(tǒng)設計[D].天津大學,2017.
[21] 聶幸福,孟晨興.基于UDS的BootLoader上位機實現(xiàn)[J].汽車工業(yè)研究,2018,31(07):26-29.
作者簡介:
李嬌嬌(1992-),女,碩士生.研究領域:電機電器及其控制.
張宏偉(1980-),男,博士,教授.研究領域:工業(yè)過程控制,現(xiàn)代檢測技術與裝置.
陳金干(1983-),男,碩士生.研究領域:電池管理系統(tǒng).