馮海明, 王 波, 張 健, 陳 強, 李海海, 黃玉鵬
(中通客車控股股份有限公司,山東 聊城 252000)
整車控制器VCU是電動客車的核心零部件之一,其可以根據(jù)駕駛員的加速踏板、制動踏板和方向盤等信號實現(xiàn)整車的驅(qū)動控制,還可以進行制動能量回收及對各子系統(tǒng)進行故障診斷管理等[1-2]。在以TriCore1872微控制器作為載體設計VCU過程中,由于邏輯策略需要不斷修改,因此需要進行反復的程序燒寫及更新。一般升級過程中,開發(fā)人員需要通過攜帶串口線及頻繁的上下電才能完成對整車控制器程序的下載及升級。刷寫燒寫過程比較繁瑣,降低了程序升級的效率。因此,本文開發(fā)一種基于CAN在線程序刷寫的方法,利用VCU現(xiàn)有的CAN通訊方式對其進行在線編程升級,通過開發(fā)BootLoader的程序引導與終端PC相結合,即可實現(xiàn)控制器程序在線更新。
BootLoader是VCU系統(tǒng)上電后應用程序執(zhí)行前最早運行的一段引導代碼程序[3-4]。其主要作用是硬件設備初始化及內(nèi)存映射等。以某款自主開發(fā)的VCU為例,在進行CAN在線程序升級時,首先需要在線更新BootLoader,然后等待BootLoader進入下載模式,最后再通過CAN網(wǎng)絡從上位機中下載應用程序。
基于英飛凌32位TC1872內(nèi)核微控制器的VCU作為下位機,基于VS開發(fā)工具的PC為上位機。目標VCU是英飛凌汽車級單片機,時鐘頻率為180 MHz,具有3路完全獨立的高速CAN驅(qū)動,支持CAN下載及在線調(diào)試模式。上位機PC與下位機的數(shù)據(jù)通訊選用USB CAN卡實現(xiàn)。
整個CAN在線刷寫系統(tǒng)主要由VCU端、USB CAN卡、PC上位機3部分組成。其中,CAN卡實現(xiàn)PC上位機與VCU端之間的通信連接,用來傳輸指令與數(shù)據(jù);PC上位機是基于VS工具的MFC框架進行開發(fā)。
VCU端系統(tǒng)上電或復位后,應用層程序在main函數(shù)中會周期性地調(diào)用底層can_prog_ack()函數(shù)。該函數(shù)主要用于內(nèi)存地址的跳轉、握手密鑰的解析及密鑰接收超時處理。當VCU解析到密鑰報文數(shù)據(jù)域中第五個字節(jié)為0x38時,即進入在線程序升級模式;若不進行應用程序的升級,則跳轉到0x0E00000處。在上位機發(fā)送BootLoader的長度后,VCU返回握手成功,在BootLoader升級完成后,VCU會立即返回該BootLoader的版本號,通過該版本號進行BootLoader升級是否成功的校驗判據(jù)。BootLoader升級成功后,VCU發(fā)送請求用戶代碼信號,上位機接收到該信號后,開始下發(fā)應用程序代碼長度。VCU接收到上位機下發(fā)應用程序代碼長度數(shù)據(jù)幀后,調(diào)用Flash擦除函數(shù)進行扇區(qū)的擦除并返回相應的數(shù)據(jù)幀報文。擦除完畢后,PC上位機正式進入應用程序數(shù)據(jù)域的下發(fā),VCU接收到數(shù)據(jù)幀后由CAN命令函數(shù)處理解析各個數(shù)據(jù)包,并將數(shù)據(jù)寫入到相應的Flash扇區(qū)中,同時VCU會返回剩余扇區(qū)數(shù),VCU每接收到32幀數(shù)據(jù),就進行一次數(shù)據(jù)校驗。直至最后接收全部數(shù)據(jù)后再進行應用程序數(shù)據(jù)總和的校驗,校驗結束無誤后上位機會發(fā)送VCU重啟指令,VCU接收到該PC下發(fā)的重啟指令后,自動跳轉執(zhí)行新的應用程序。
2.2.1 HEX文件轉Bin文件
在Tasking中經(jīng)過編譯生成的是HEX文件,PC端上位機主要為VCU提供加載該升級程序代碼。HEX文件是ASCII的記錄文本文件,在HEX文件中,每一行是一個HEX記錄,包括數(shù)據(jù)長度域、地址域、記錄類型域、數(shù)據(jù)域及校驗和域[5-7]。上位機在發(fā)送應用程序時為了保證數(shù)據(jù)傳輸?shù)臏蚀_性,需要按照地址高低順序進行傳輸,但是HEX文件中數(shù)據(jù)記錄并不是按照起始地址到終止地址的順序進行排列的,由于每行數(shù)據(jù)都包含起始地址和數(shù)據(jù)長度,所以HEX文件中數(shù)據(jù)不需要按照地址順序從低到高進行排列;而Bin文件中的數(shù)據(jù)則是嚴格按照地址順序進行排列。因此,需要將HEX文件的內(nèi)容轉換成按地址順序從低到高排列的二進制數(shù)據(jù)Bin文件[8-10]。
轉換過程主要分為4步:第一,打開HEX文件后通過遍歷整個HEX文件,找出起始地址和終止地址,然后根據(jù)終止地址和起始地址相減算出數(shù)據(jù)長度,用得到的數(shù)據(jù)長度開辟相應的數(shù)組進行內(nèi)存的分配[11-12];第二,再次遍歷整個HEX文件,計算每條數(shù)據(jù)記錄中的起始地址與HEX文件起始地址的偏移量,按照偏移量將該條數(shù)據(jù)記錄中的數(shù)據(jù)部分寫入剛開辟的數(shù)組中;第三,遍歷保存完的數(shù)組,判定是否與目標VCU程序相匹配;第四,將該數(shù)組寫到文件中。
2.2.2 主從機通信協(xié)議
主從機數(shù)據(jù)傳輸與命令交互采用自定義的CAN通信協(xié)議,協(xié)議具體內(nèi)容見表1。
表1 主從機通信協(xié)議
2.2.3 功能設計需求
PC端上位機界面的具體功能需求如下:
1) 設置CAN波特率、CAN通道、報文間隔發(fā)送周期。
2) 打開CAN設備并能正常接收CAN報文數(shù)據(jù),能根據(jù)路徑打開需要發(fā)送的HEX文件,并將文件自動轉換成Bin文件,發(fā)送完成后發(fā)送重啟VCU指令。
3) 數(shù)據(jù)通信相關信息顯示在編輯框中,并實時顯示程序更新狀態(tài)。
4) 具備重刷及設備重啟功能。
2.2.4 關鍵功能模塊設計
1) 數(shù)據(jù)發(fā)送、校驗。CAN報文的發(fā)送通過CAN卡提供的庫函數(shù)實現(xiàn)。由于HEX文件的下發(fā)需要通過路徑打開并進行讀取和轉換才能進行發(fā)送,所以報文數(shù)據(jù)的發(fā)送分為報文的填充和報文的發(fā)送。32位程序燒寫,每發(fā)送32幀數(shù)據(jù)校驗一次,全部發(fā)送完畢后再進行總和校驗,由于VCU會返回剩余的扇區(qū)數(shù),所以數(shù)據(jù)發(fā)送完后,程序會自動停止。
2) 數(shù)據(jù)的接收。CAN報文的接收通過接收數(shù)據(jù)線程,在線程中調(diào)用自定義的接收函數(shù),該接收函數(shù)會校驗接收ID并返回相應狀態(tài)值。
3) 數(shù)據(jù)收發(fā)信息顯示。數(shù)據(jù)發(fā)送、接收時會觸發(fā)設定的data_show_add函數(shù),在該函數(shù)中,數(shù)據(jù)會被加載及顯示在編輯框中。
2.2.5 PC端上位機界面及發(fā)送流程
打開通過VS開發(fā)設計的PC端上位機軟件后,在界面上選擇相應的CAN通道及波特率,點擊“連接”按鈕,此時編輯框會顯示設備開啟成功信息,通過“文件路徑”按鈕加載生成HEX文件,然后會彈出是否刷寫該HEX文件的提示框,點擊“確定”按鈕,開始進行BootLoader的燒寫,燒寫完后自動進行應用程序的燒寫,燒寫過程中,VCU會返回校驗數(shù)據(jù),確保傳輸數(shù)據(jù)的真實性與完整性。當全部應用程序下載完后,進度條會顯示100%,VCU自動進入重啟,編輯框顯示程序刷寫成功及當前程序版本,整個應用程序更新過程完成。
本文設計的基于CAN在線VCU程序升級系統(tǒng)在某8 m純電動客車上進行實車驗證。首先系統(tǒng)上電后用CAN卡設備連接VCU與PC上位機,然后上位機進行相關操作,經(jīng)過約20 s完成對VCU程序的升級,升級后VCU自動重啟,程序運行正常。
運行結果表明,該系統(tǒng)進行VCU程序升級時,整個過程快速穩(wěn)定,更新升級后VCU程序運行正常。
本文設計的基于CAN總線的VCU程序升級系統(tǒng)實現(xiàn)了VCU程序升級的快速性、準確性及便捷性,提高了VCU程序更新效率。經(jīng)實車驗證,該系統(tǒng)擦除Flash過程穩(wěn)定,CAN通信實時性高。該方法極大地方便了VCU程序的后期更新和維護。