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