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