李 鑫, 李艷明, 王志遠, 倪永亮
(1. 駐北京地區(qū)第六軍事代表室,北京 100072;2. 中國北方車輛研究所,北京 100072)
在特種無人車輛研發(fā)過程中,多樣的需求使得整車的控制策略需要不斷調整,因此需要對相關控制單元進行程序更新.特種無人車輛小型化、輕量化的趨勢使得車上部件安裝比較緊湊,通常沒有足夠空間通過控制器上的程序下載口更新控制器內部應用程序,需常常拆卸控制單元來更新,那是非常麻煩的事情.當前特種無人車輛底層控制單元大多采用CAN總線進行信息傳遞,通過CAN總線實現(xiàn)控制單元程序的更新,會大大提高研發(fā)效率[1-2].本研究僅針對特種無人車輛電氣綜合控制盒,在飛思卡爾型號為MC9S12XEP100的硬件平臺上實現(xiàn)Bootloader軟件的設計,實現(xiàn)無需拆卸控制單元部件,無需使用下載器,僅通過車上的CAN總線接口便可實現(xiàn)控制單元應用程序的更新.
嵌入式系統(tǒng)是以應用為中心、以計算機為基礎、軟硬件可裁剪,適用于系統(tǒng)對功能、可靠性、成本、功耗嚴格要求的專用計算機系統(tǒng).在嵌入式系統(tǒng)中,通常沒有像BIOS(Basic Input Output System,基本輸入輸出系統(tǒng))那樣的固件程序,整個系統(tǒng)加電后運行的第一段軟件代碼為引導加載程序,也就是Bootloader程序.通過這段程序,可以初始化硬件設備、建立內存空間的映射過程,從而將系統(tǒng)的軟硬件環(huán)境設定在一個合適的狀態(tài),以便為調用操作系統(tǒng)內核準備好正確的環(huán)境[3-4].
Bootloader程序在單片機上電/復位后在應用程序之前運行.通過設計Bootloader程序可以實現(xiàn)應用程序的更新,即Bootloader程序運行后判斷當前是否需要進入更新應用程序狀態(tài).如果不需要更新,就直接運行Flash中原有的程序;如果需要更新,首先擦除舊的程序,然后從CAN總線接收新的程序,同時寫入Flash中.接收數(shù)據(jù)時,需要進行校驗,保證接收到的數(shù)據(jù)是正確的,避免更新的程序出現(xiàn)錯誤.
本研究設計了一套基于CAN總線且基于UDS協(xié)議的Bootloader軟件,其可以基于飛思卡爾16位單片機MC9S12XEP100和CodeWarrior 5.1開發(fā)環(huán)境實現(xiàn)在線更新ECU應用程序.
該軟件方案是由一款運行于ECU內部的嵌入式下位機軟件和一款運行于PC端的上位機下載軟件組成,如圖1所示,上位機下載軟件可以按照應用需求,對下載過程中的各類通信參數(shù)、數(shù)據(jù)校驗算法和安全訪問算法等內容進行設置,與ECU進行重編程通信,實現(xiàn)對存儲在ECU中的應用程序的更新.下位機嵌入式軟件運行工作于ECU內部,通過CAN總線接口設備,在重編程過程中對上位機的重編程請求和一系列指令進行響應,完整接收需要下載至ECU中的應用程序,通過存儲器驅動完成對應用程序的刷寫更新.上、下位機建立通信的過程應提供安全訪問解鎖機制,程序和數(shù)據(jù)下載完成后應提供數(shù)據(jù)一致性校驗機制,以確保ECU中應用程序更新的合法性和完整性.
圖1 Bootloader軟件系統(tǒng)示意圖
使用時,首先通過BDM下載器將下位機軟件燒寫到ECU,使下位機軟件運行于ECU內部;然后配合上位機軟件,將ECU應用程序通過CAN總線通信接口設備Vector VN7600刷寫至ECU內部.此后更新ECU內部應用程序只需要通過控制器CAN總線接口即可實現(xiàn),無需使用下載器,在車上也就無需通過拆卸控制器.
該Bootloader軟件借鑒軟件層次化設計以增加軟件的復用性、可移植性.軟件架構如圖2所示.
圖2 Bootloader軟件架構
各模塊功能如表1所示.
表1 Bootloader軟件模塊功能簡述
Bootloader軟件模塊文件組成如圖3所示.
圖3 Bootloader軟件模塊文件組成
Bootloader軟件模塊文件功能如表2所示.
表2 Bootloader軟件模塊文件功能
2.3.1 存儲區(qū)分配規(guī)劃
應用程序和Bootloader存放在同一個ECU中.為了保證彼此正確使用,二者的設計按照表3所示的規(guī)則進行.
表3 系統(tǒng)存儲器分配情況說明表
2.3.2 修改burner.bbl文件
如圖4所示,在burner.bbl文件中添加“%ABS_FILE%.code.s19”文件信息,具體內容參見應用程序burner.bbl中語句OPENFILE“%ABS_FILE%.code.s19”下方所有內容.在編譯時,此文件信息用于生成全局地址的應用程序.s19文件.
圖4 %ABS_FILE%.code.s19內容
如圖5所示,在burner.bbl文件中添加“%ABS_FILE%.data.s19”文件信息,具體內容參見應用程序burner.bbl中語句OPENFILE“%ABS_FILE%.data.s19”下方所有內容.在編譯時,此文件信息用于生成全局地址的標定數(shù)據(jù).s19文件.
圖5 %ABS_FILE%.data.s19內容
2.3.3 修改Project.prm文件
修改啟動代碼地址.在Project.prm中刪掉ROM_C000(已被Bootloader占用),將ROM_C000修改為ROM_4000.
修改標定數(shù)據(jù)地址.在Project.prm中添加PageUser INTO PAGE_C0.
為了保證快速、高效地進行應用程序重編程功能集成,在開始集成之前,需要在應用程序設計如下接口:
1)CAN接收回調接口.當接收到一幀CAN報文時,驅動將接收的報文傳遞給此接口處理.2)CAN發(fā)送確認接口.當CAN驅動發(fā)送完CAN報文后,將發(fā)送結果傳遞給此接口確認.3)CAN發(fā)送接口.集成后的應用程序需要向上位機發(fā)送一些響應報文,因此需要CAN報文的發(fā)送接口.4)MCU影復位接口.使用硬件看門狗溢出或非法指令等形式實現(xiàn).5)RAM讀寫接口.Bootloader重編程請求標識及復位標識存放在內部RAM中,因此需要可支持單字節(jié)讀寫的RAM接口.6)檢查編程條件接口.此接口用來檢查本次重編程是否可以繼續(xù)進行的關鍵,在某些條件下不能進行重編程操作,比如車速不為零,等等.
為了保證應用程序能夠正確地進行重編程,它需包含重編程處理文件.文件名及內容描述如表4所示.
表4 文件名及內容描述
對本設計的CAN總線Bootloader軟件進行測試.將Bootloader軟件和集成后的應用程序下載到電氣綜合控制盒后,通過對電氣綜合控制盒的功能進行測試,驗證下載到控制器內部的Bootloader軟件和集成后的應用程序是否完整和正確.
測試的軟硬件環(huán)境及工具如表5所示,測試硬件連接關系原理如圖6所示,測試環(huán)境如圖7所示.
表5 軟硬件環(huán)境及工具
圖6 測試連接關系原框理圖
圖7 測試環(huán)境
首先利用軟件Codewarrior 5.1和硬件BDM下載器將Bootloader下位機嵌入式軟件燒寫到處理器內部;然后通過上位機和硬件VN7600將集成好的應用程序通過CAN總線下載到控制器內部;接著利用軟件CANoe 11.0和硬件VN7600模擬電氣綜合控制盒的控制指令,同時利用萬用表和示波器實現(xiàn)對相關電壓參數(shù)的測量并且對電氣綜合控制盒上傳狀態(tài)進行監(jiān)控.
測試過程中,應用程序通過CAN總線下載順利;電氣綜合控制盒電源燈常亮,呼吸燈閃爍,狀態(tài)正常;電氣綜合控制盒在控制下工作正常,CAN總線上傳狀態(tài)數(shù)據(jù)正常.
測試結果表明,電氣綜合控制盒工作正常,應用程序運行正常.
基于CAN總線的Bootloader軟件能夠實現(xiàn)電氣綜合控制盒應用程序的快速更新,大大提高了研發(fā)效率,也極大地方便了電氣綜合控制盒應用程序的后期更新和維護.