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