楊勝兵 ,薛 冰 ,萬宏偉 ,范文濤
(1.武漢理工大學(xué) 現(xiàn)代汽車零部件技術(shù)湖北省重點(diǎn)實(shí)驗(yàn)室,武漢 430070;2.汽車零部件技術(shù)湖北省協(xié)同創(chuàng)新中心,武漢 430070)
隨著汽車智能化的程度不斷提高,車上各類控制器數(shù)量更多,程序更加復(fù)雜。因此,各類控制器在正式投入使用前都要經(jīng)過大量而嚴(yán)格的測試,不斷調(diào)試、修改、更新程序,使控制器能夠工作在最佳狀態(tài)。控制器需要安裝在實(shí)車上進(jìn)行匹配調(diào)試并檢驗(yàn)實(shí)際運(yùn)行效果,若發(fā)現(xiàn)控制器程序存在問題需要修改,傳統(tǒng)的解決方法是通過控制器的UART外設(shè)實(shí)現(xiàn)數(shù)據(jù)傳輸,但這種方法傳輸速度低,而且升級時(shí)需要連接每個(gè)ECU節(jié)點(diǎn)的SCI接口,效率也低[1],因此可以考慮通過CAN總線更新控制器內(nèi)部程序或重標(biāo)定不合適的參數(shù)??刂破鬟\(yùn)行出現(xiàn)問題可能是程序問題,可能是標(biāo)定參數(shù)值不合適,也可能是外部問題,因此有必要對控制器傳輸數(shù)據(jù)進(jìn)行監(jiān)控。為滿足上述需求,本文設(shè)計(jì)了一套基于Lab-VIEW的車輛ECU在線編程系統(tǒng),能夠通過CAN總線方便快捷地實(shí)現(xiàn)對車輛ECU的程序更新、參數(shù)標(biāo)定及數(shù)據(jù)監(jiān)控。本系統(tǒng)已進(jìn)入試驗(yàn)階段。
S19文件是飛思卡爾推薦使用的標(biāo)準(zhǔn)文件傳送格式,是CodeWarrior將編寫的代碼編譯后自動生成的binary文件,該文件是一段直接燒寫進(jìn)ECU的ASCII碼[2]。S19文件中的每一行稱為1條記錄,每行以字母S開頭,第二位表示該記錄的類型。S0是一段描述性語句,包含了文件的來源位置信息,表示程序的開始,因此不需要燒寫到ECU中。S1~S3的地址場分別由2~4個(gè)字節(jié)地址組成,數(shù)據(jù)場由可載入的數(shù)據(jù)組成,是程序下載的主體部分。S7~S9表示程序的結(jié)束,地址場分別由2~4個(gè)字節(jié)地址組成,該記錄不需要燒寫到ROM中,但需要下載,用于提示S19文件下載完畢。
BootLoader是ECU上電后最先運(yùn)行的一段引導(dǎo)加載程序。BootLoader通常包含啟動加載和下載2種模式。啟動加載模式是直接將存儲在固態(tài)存儲設(shè)備中的應(yīng)用程序加載到RAM中執(zhí)行,下載模式則是BootLoader通過串口或網(wǎng)絡(luò)連接等手段從主機(jī)中下載應(yīng)用程序,先將程序存在RAM中,再將其刷寫在Flash等固態(tài)存儲設(shè)備中[3]。BootLoader是本系統(tǒng)實(shí)現(xiàn)控制器內(nèi)部程序更新的關(guān)鍵。
本文設(shè)計(jì)的車輛ECU在線編程系統(tǒng)由上位機(jī)和下位機(jī)兩部分組成,系統(tǒng)框架如圖1所示。
圖1 車輛ECU在線編程系統(tǒng)框架Fig.1 Frame of vehicle ECU online programming system
為實(shí)現(xiàn)上、下位機(jī)的正常通訊,必須預(yù)先制定合適的通訊協(xié)議。由于下位機(jī)為BootLoader分配的程序存儲空間有限,本文參考UDS[4]等協(xié)議標(biāo)準(zhǔn)中的軟件刷寫部分,自定義了一份簡單實(shí)用的程序更新通訊協(xié)議。程序更新通訊協(xié)議中將報(bào)文類型分為信息報(bào)文和數(shù)據(jù)報(bào)文兩類,信息報(bào)文包含了S記錄類型、數(shù)據(jù)裝載地址、數(shù)據(jù)長度及校驗(yàn)和信息,數(shù)據(jù)報(bào)文則包含了數(shù)據(jù)幀序號和數(shù)據(jù)信息。程序更新報(bào)文通過數(shù)據(jù)域的首字節(jié)區(qū)分報(bào)文類型,為避免信息報(bào)文與數(shù)據(jù)報(bào)文沖突,數(shù)據(jù)幀序號從11開始編號。由于一條S記錄的數(shù)據(jù)場最長為32字節(jié),而一條數(shù)據(jù)報(bào)文最多可傳輸7個(gè)字節(jié)的數(shù)據(jù),因此每條S記錄的數(shù)據(jù)幀序號最大為15。程序更新時(shí),上、下位機(jī)按照制定的通訊協(xié)議進(jìn)行通訊,采用一問一答的方式逐條下載S記錄,當(dāng)下位機(jī)收到S9信息報(bào)文時(shí),表示程序下載完畢。制定的程序更新通訊協(xié)議如表1、表2所示。
表1 程序更新信息報(bào)文格式Tab.1 Format of application update information message
表2 程序更新數(shù)據(jù)報(bào)文格式Tab.2 Format of application update data message
為使設(shè)計(jì)的車輛ECU在線編程系統(tǒng)通用性更強(qiáng),本文制定的參數(shù)標(biāo)定協(xié)議基于CCP協(xié)議[5],并根據(jù)標(biāo)定參數(shù)是否已經(jīng)過調(diào)試,分為下載標(biāo)定參數(shù)到RAM和下載標(biāo)定參數(shù)到Flash 2種標(biāo)定過程。
上位機(jī)的主要功能是更新程序、標(biāo)定參數(shù)和監(jiān)控下位機(jī)傳輸數(shù)據(jù),因此按照其功能可將上位機(jī)程序劃分為程序更新、參數(shù)標(biāo)定和數(shù)據(jù)監(jiān)控三大模塊。在啟動各模塊前,首先要進(jìn)行CAN通訊配置,包括CAN報(bào)文收發(fā)所用的通訊端口,CAN通訊波特率,上、下位機(jī)ID以及接收數(shù)據(jù)顯示形式等。
程序更新模塊主要由讀取S19文件和下載S19代碼兩部分組成。
讀取S19文件將S19文件通過“讀取表格文件”VI讀入上位機(jī)程序,根據(jù)S19文件格式將每條S記錄按類型、計(jì)數(shù)值、地址、數(shù)據(jù)場和校驗(yàn)和拆分重組,并以表格的形式顯示在前面板上,如圖2所示。
圖2 S記錄拆分重組成表Fig.2 Spilt S record and reorganize table
下載S19代碼 點(diǎn)擊“下載”按鈕后,待發(fā)送數(shù)組索引進(jìn)入for循環(huán),逐條封裝成標(biāo)準(zhǔn)格式的CAN報(bào)文,通過“XNET Write(Frame CAN)”VI將其發(fā)送到CAN總線上。待一條S記錄的CAN報(bào)文發(fā)送完畢后,經(jīng)過 100 ms的延時(shí),通過“XNET Read(Frame CAN)”VI讀取下位機(jī)返回的報(bào)文,判斷S記錄是否發(fā)送成功。若發(fā)送成功,則繼續(xù)發(fā)送下一條S記錄,直到全部S記錄發(fā)送完畢,否則顯示“發(fā)送失敗”。
上位機(jī)更新程序下載流程如圖3所示。
圖3 上位機(jī)更新程序下載流程Fig.3 Download flow chart of upper computer update program
標(biāo)定參數(shù)讀取從設(shè)置的讀取路徑讀取待標(biāo)定的參數(shù),并將其顯示在參數(shù)標(biāo)定面板上,用戶可根據(jù)需要修改待標(biāo)定的參數(shù)。
標(biāo)定參數(shù)下載如果標(biāo)定參數(shù)需要在線調(diào)試,選擇將標(biāo)定參數(shù)下載到RAM。上位機(jī)發(fā)送CONNECT報(bào)文,等待下位機(jī)的命令返回消息DTO報(bào)文,連接成功后上位機(jī)通過SET_MTA報(bào)文設(shè)置數(shù)據(jù)下載的初始地址,待下位機(jī)返回DTO報(bào)文后,通過DNLOAD報(bào)文將標(biāo)定數(shù)據(jù)下載到ECU的RAM中。如果標(biāo)定參數(shù)不需要在線調(diào)試或已經(jīng)調(diào)試完成,則選擇將標(biāo)定參數(shù)下載到Flash。根據(jù)CCP協(xié)議,與下載到RAM的標(biāo)定過程相比,下載到Flash需要預(yù)先通過CLERA_MEMORY報(bào)文清除從起始地址MTA0開始指定大小的內(nèi)存,保證數(shù)據(jù)能夠順利存儲到指定Flash區(qū)域,且最后通過一條標(biāo)定數(shù)據(jù)長度為0的PROGRAM報(bào)文結(jié)束參數(shù)標(biāo)定。
標(biāo)定完成的下位機(jī)會按照標(biāo)定的格式內(nèi)容向CAN總線定期發(fā)送數(shù)據(jù)幀,上位機(jī)根據(jù)CAN通訊波特率和ID過濾讀取指定下位機(jī)發(fā)送的數(shù)據(jù)幀,根據(jù)通訊協(xié)議解析數(shù)據(jù)內(nèi)容,并將其顯示在數(shù)據(jù)監(jiān)控面板上。
下位機(jī)硬件結(jié)構(gòu)由單片機(jī)最小系統(tǒng)和CAN收發(fā)器組成。目標(biāo)ECU選用了飛思卡爾的MC9S12XS128系列單片機(jī),CAN收發(fā)器選用了NXP的TJA1050高速CAN收發(fā)器,滿足通過CAN總線在線更新程序、標(biāo)定參數(shù)的需求。
根據(jù)車輛ECU在線編程系統(tǒng)的設(shè)計(jì)需求以及編寫的上位機(jī)程序,下位機(jī)程序主要劃分為基于BootLoader的程序更新模塊以及基于CCP協(xié)議的參數(shù)標(biāo)定模塊。
基于BootLoader的程序更新流程如圖4所示。首先通過芯片指定引腳的電平高低判斷BootLoader所處模式,若引腳為高電平則進(jìn)入啟動加載模式(即執(zhí)行模式),直接跳轉(zhuǎn)到Flash地址0xEFFE處執(zhí)行用戶程序,若引腳為低電平則進(jìn)入程序更新模式(即下載模式)。程序進(jìn)入更新模式后,首先初始化鎖相環(huán)、定時(shí)器、MSCAN及Flash。然后程序進(jìn)入循環(huán),監(jiān)聽CAN總線上是否有在線編程系統(tǒng)上位機(jī)發(fā)送的報(bào)文。當(dāng)收到的ID與上位機(jī)ID一致時(shí),將該組報(bào)文讀進(jìn)數(shù)據(jù)緩沖區(qū)。根據(jù)首條報(bào)文(程序更新信息報(bào)文)解析出該組報(bào)文S記錄的類型、數(shù)據(jù)裝載地址、數(shù)據(jù)長度及校驗(yàn)和信息。根據(jù)S記錄校驗(yàn)和計(jì)算公式計(jì)算該組報(bào)文的校驗(yàn)和,并將計(jì)算結(jié)果與解析出的校驗(yàn)和信息對比,若校驗(yàn)正確則返回接收成功消息,并將程序更新數(shù)據(jù)報(bào)文中的S記錄數(shù)據(jù)內(nèi)容寫入指定Flash區(qū)域,否則返回接收失敗消息。當(dāng)收到S9記錄報(bào)文時(shí),說明S19文件已發(fā)送完成,復(fù)位即可執(zhí)行用戶程序。
圖4 基于BootLoader的程序更新流程Fig.4 Flow chart of program update based on BootLoader
系統(tǒng)上電后,首先進(jìn)行初始化配置,包括鎖相環(huán)、定時(shí)器、MSCAN、Flash以及各端口的初始化。初始化完成后,程序以一定周期讀取各端口的數(shù)據(jù)。當(dāng)CAN通道收到上位機(jī)發(fā)送的連接命令時(shí),程序進(jìn)入標(biāo)定子函數(shù),按照上文制定的參數(shù)標(biāo)定協(xié)議與上位機(jī)進(jìn)行通訊,并將標(biāo)定參數(shù)存儲到指定地址的RAM或Flash中。
為檢驗(yàn)設(shè)計(jì)的車輛ECU在線編程系統(tǒng),本文以電動汽車電流傳感器的在線編程為例對其進(jìn)行了測試,如圖5所示。首先通過BDM將BootLoader初始化程序下載到電流傳感器ECU中,然后在Code-Warrior中編寫電流傳感器應(yīng)用程序,編譯后生成S19文件。電流傳感器上電,啟動在線編程系統(tǒng)并進(jìn)入程序更新界面,讀取S19文件并將其通過CAN總線下載到電流傳感器ECU中。進(jìn)入?yún)?shù)標(biāo)定界面,讀取待標(biāo)定的電流傳感器參數(shù),通過CAN總線將參數(shù)標(biāo)定到電流傳感器ECU中。最后進(jìn)入數(shù)據(jù)監(jiān)控界面,對電流傳感器數(shù)據(jù)發(fā)送情況進(jìn)行監(jiān)控,發(fā)現(xiàn)電流傳感器能夠按照標(biāo)定的格式內(nèi)容定期向CAN總線上發(fā)送數(shù)據(jù)幀,說明電流傳感器運(yùn)行正常,同時(shí)也證明本文設(shè)計(jì)的車輛ECU在線編程系統(tǒng)可行。
圖5 電流傳感器在線編程測試Fig.5 Test of current sensor online programming
針對車輛控制器現(xiàn)場調(diào)試復(fù)雜的問題,本文設(shè)計(jì)了一套基于LabVIEW的車輛ECU在線編程系統(tǒng),該系統(tǒng)由程序更新、參數(shù)標(biāo)定、數(shù)據(jù)監(jiān)控三大模塊組成,能通過CAN總線在線更新ECU程序、標(biāo)定相關(guān)參數(shù)并監(jiān)控ECU實(shí)時(shí)運(yùn)行狀況。最后以電流傳感器為例,對設(shè)計(jì)的車輛ECU在線編程系統(tǒng)進(jìn)行了測試。測試結(jié)果表明,該系統(tǒng)操作簡便,能夠顯著降低車輛控制器程序現(xiàn)場調(diào)試復(fù)雜程度,有效提高程序更新、參數(shù)標(biāo)定效率。
[1]羅峰,孫澤昌.汽車CAN總線系統(tǒng)原理、設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2010.
[2]樂志國,金啟前.電動汽車整車控制器BootLoader功能開發(fā)[J].佳木斯大學(xué)學(xué)報(bào):自然科學(xué)版,2014,32(2):237-241.
[3]楊競喆,王志福,劉杰.基于MC9S12XEP100的整車控制器CAN BootLoader設(shè)計(jì)與實(shí)現(xiàn)[J].車輛與動力技術(shù),2014,36(1):25-29.
[4]ISO 14229-1:2013,Road vehicles-unified diagnostic services(UDS)-Part 1:Specification and requirements[S],2013.
[5]ASAP Standard,CAN Calibration Protocol.Version 2.1[S],1999.