楊勝兵 ,薛 冰 ,萬宏偉 ,范文濤
(1.武漢理工大學 現代汽車零部件技術湖北省重點實驗室,武漢 430070;2.汽車零部件技術湖北省協同創新中心,武漢 430070)
隨著汽車智能化的程度不斷提高,車上各類控制器數量更多,程序更加復雜。因此,各類控制器在正式投入使用前都要經過大量而嚴格的測試,不斷調試、修改、更新程序,使控制器能夠工作在最佳狀態。控制器需要安裝在實車上進行匹配調試并檢驗實際運行效果,若發現控制器程序存在問題需要修改,傳統的解決方法是通過控制器的UART外設實現數據傳輸,但這種方法傳輸速度低,而且升級時需要連接每個ECU節點的SCI接口,效率也低[1],因此可以考慮通過CAN總線更新控制器內部程序或重標定不合適的參數。控制器運行出現問題可能是程序問題,可能是標定參數值不合適,也可能是外部問題,因此有必要對控制器傳輸數據進行監控。為滿足上述需求,本文設計了一套基于Lab-VIEW的車輛ECU在線編程系統,能夠通過CAN總線方便快捷地實現對車輛ECU的程序更新、參數標定及數據監控。本系統已進入試驗階段。
S19文件是飛思卡爾推薦使用的標準文件傳送格式,是CodeWarrior將編寫的代碼編譯后自動生成的binary文件,該文件是一段直接燒寫進ECU的ASCII碼[2]。S19文件中的每一行稱為1條記錄,每行以字母S開頭,第二位表示該記錄的類型。S0是一段描述性語句,包含了文件的來源位置信息,表示程序的開始,因此不需要燒寫到ECU中。S1~S3的地址場分別由2~4個字節地址組成,數據場由可載入的數據組成,是程序下載的主體部分。S7~S9表示程序的結束,地址場分別由2~4個字節地址組成,該記錄不需要燒寫到ROM中,但需要下載,用于提示S19文件下載完畢。
BootLoader是ECU上電后最先運行的一段引導加載程序。BootLoader通常包含啟動加載和下載2種模式。啟動加載模式是直接將存儲在固態存儲設備中的應用程序加載到RAM中執行,下載模式則是BootLoader通過串口或網絡連接等手段從主機中下載應用程序,先將程序存在RAM中,再將其刷寫在Flash等固態存儲設備中[3]。BootLoader是本系統實現控制器內部程序更新的關鍵。
本文設計的車輛ECU在線編程系統由上位機和下位機兩部分組成,系統框架如圖1所示。

圖1 車輛ECU在線編程系統框架Fig.1 Frame of vehicle ECU online programming system
為實現上、下位機的正常通訊,必須預先制定合適的通訊協議。由于下位機為BootLoader分配的程序存儲空間有限,本文參考UDS[4]等協議標準中的軟件刷寫部分,自定義了一份簡單實用的程序更新通訊協議。程序更新通訊協議中將報文類型分為信息報文和數據報文兩類,信息報文包含了S記錄類型、數據裝載地址、數據長度及校驗和信息,數據報文則包含了數據幀序號和數據信息。程序更新報文通過數據域的首字節區分報文類型,為避免信息報文與數據報文沖突,數據幀序號從11開始編號。由于一條S記錄的數據場最長為32字節,而一條數據報文最多可傳輸7個字節的數據,因此每條S記錄的數據幀序號最大為15。程序更新時,上、下位機按照制定的通訊協議進行通訊,采用一問一答的方式逐條下載S記錄,當下位機收到S9信息報文時,表示程序下載完畢。制定的程序更新通訊協議如表1、表2所示。

表1 程序更新信息報文格式Tab.1 Format of application update information message

表2 程序更新數據報文格式Tab.2 Format of application update data message
為使設計的車輛ECU在線編程系統通用性更強,本文制定的參數標定協議基于CCP協議[5],并根據標定參數是否已經過調試,分為下載標定參數到RAM和下載標定參數到Flash 2種標定過程。
上位機的主要功能是更新程序、標定參數和監控下位機傳輸數據,因此按照其功能可將上位機程序劃分為程序更新、參數標定和數據監控三大模塊。在啟動各模塊前,首先要進行CAN通訊配置,包括CAN報文收發所用的通訊端口,CAN通訊波特率,上、下位機ID以及接收數據顯示形式等。
程序更新模塊主要由讀取S19文件和下載S19代碼兩部分組成。
讀取S19文件將S19文件通過“讀取表格文件”VI讀入上位機程序,根據S19文件格式將每條S記錄按類型、計數值、地址、數據場和校驗和拆分重組,并以表格的形式顯示在前面板上,如圖2所示。

圖2 S記錄拆分重組成表Fig.2 Spilt S record and reorganize table
下載S19代碼 點擊“下載”按鈕后,待發送數組索引進入for循環,逐條封裝成標準格式的CAN報文,通過“XNET Write(Frame CAN)”VI將其發送到CAN總線上。待一條S記錄的CAN報文發送完畢后,經過 100 ms的延時,通過“XNET Read(Frame CAN)”VI讀取下位機返回的報文,判斷S記錄是否發送成功。若發送成功,則繼續發送下一條S記錄,直到全部S記錄發送完畢,否則顯示“發送失敗”。
上位機更新程序下載流程如圖3所示。

圖3 上位機更新程序下載流程Fig.3 Download flow chart of upper computer update program
標定參數讀取從設置的讀取路徑讀取待標定的參數,并將其顯示在參數標定面板上,用戶可根據需要修改待標定的參數。
標定參數下載如果標定參數需要在線調試,選擇將標定參數下載到RAM。上位機發送CONNECT報文,等待下位機的命令返回消息DTO報文,連接成功后上位機通過SET_MTA報文設置數據下載的初始地址,待下位機返回DTO報文后,通過DNLOAD報文將標定數據下載到ECU的RAM中。如果標定參數不需要在線調試或已經調試完成,則選擇將標定參數下載到Flash。根據CCP協議,與下載到RAM的標定過程相比,下載到Flash需要預先通過CLERA_MEMORY報文清除從起始地址MTA0開始指定大小的內存,保證數據能夠順利存儲到指定Flash區域,且最后通過一條標定數據長度為0的PROGRAM報文結束參數標定。
標定完成的下位機會按照標定的格式內容向CAN總線定期發送數據幀,上位機根據CAN通訊波特率和ID過濾讀取指定下位機發送的數據幀,根據通訊協議解析數據內容,并將其顯示在數據監控面板上。
下位機硬件結構由單片機最小系統和CAN收發器組成。目標ECU選用了飛思卡爾的MC9S12XS128系列單片機,CAN收發器選用了NXP的TJA1050高速CAN收發器,滿足通過CAN總線在線更新程序、標定參數的需求。
根據車輛ECU在線編程系統的設計需求以及編寫的上位機程序,下位機程序主要劃分為基于BootLoader的程序更新模塊以及基于CCP協議的參數標定模塊。
基于BootLoader的程序更新流程如圖4所示。首先通過芯片指定引腳的電平高低判斷BootLoader所處模式,若引腳為高電平則進入啟動加載模式(即執行模式),直接跳轉到Flash地址0xEFFE處執行用戶程序,若引腳為低電平則進入程序更新模式(即下載模式)。程序進入更新模式后,首先初始化鎖相環、定時器、MSCAN及Flash。然后程序進入循環,監聽CAN總線上是否有在線編程系統上位機發送的報文。當收到的ID與上位機ID一致時,將該組報文讀進數據緩沖區。根據首條報文(程序更新信息報文)解析出該組報文S記錄的類型、數據裝載地址、數據長度及校驗和信息。根據S記錄校驗和計算公式計算該組報文的校驗和,并將計算結果與解析出的校驗和信息對比,若校驗正確則返回接收成功消息,并將程序更新數據報文中的S記錄數據內容寫入指定Flash區域,否則返回接收失敗消息。當收到S9記錄報文時,說明S19文件已發送完成,復位即可執行用戶程序。

圖4 基于BootLoader的程序更新流程Fig.4 Flow chart of program update based on BootLoader
系統上電后,首先進行初始化配置,包括鎖相環、定時器、MSCAN、Flash以及各端口的初始化。初始化完成后,程序以一定周期讀取各端口的數據。當CAN通道收到上位機發送的連接命令時,程序進入標定子函數,按照上文制定的參數標定協議與上位機進行通訊,并將標定參數存儲到指定地址的RAM或Flash中。
為檢驗設計的車輛ECU在線編程系統,本文以電動汽車電流傳感器的在線編程為例對其進行了測試,如圖5所示。首先通過BDM將BootLoader初始化程序下載到電流傳感器ECU中,然后在Code-Warrior中編寫電流傳感器應用程序,編譯后生成S19文件。電流傳感器上電,啟動在線編程系統并進入程序更新界面,讀取S19文件并將其通過CAN總線下載到電流傳感器ECU中。進入參數標定界面,讀取待標定的電流傳感器參數,通過CAN總線將參數標定到電流傳感器ECU中。最后進入數據監控界面,對電流傳感器數據發送情況進行監控,發現電流傳感器能夠按照標定的格式內容定期向CAN總線上發送數據幀,說明電流傳感器運行正常,同時也證明本文設計的車輛ECU在線編程系統可行。

圖5 電流傳感器在線編程測試Fig.5 Test of current sensor online programming
針對車輛控制器現場調試復雜的問題,本文設計了一套基于LabVIEW的車輛ECU在線編程系統,該系統由程序更新、參數標定、數據監控三大模塊組成,能通過CAN總線在線更新ECU程序、標定相關參數并監控ECU實時運行狀況。最后以電流傳感器為例,對設計的車輛ECU在線編程系統進行了測試。測試結果表明,該系統操作簡便,能夠顯著降低車輛控制器程序現場調試復雜程度,有效提高程序更新、參數標定效率。
[1]羅峰,孫澤昌.汽車CAN總線系統原理、設計與應用[M].北京:電子工業出版社,2010.
[2]樂志國,金啟前.電動汽車整車控制器BootLoader功能開發[J].佳木斯大學學報:自然科學版,2014,32(2):237-241.
[3]楊競喆,王志福,劉杰.基于MC9S12XEP100的整車控制器CAN BootLoader設計與實現[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.