1.引言
隨著flash存儲器件的普遍使用,在線編程IAP(In Application Programming)的下載方式得到廣泛的推廣與應(yīng)用。flash在線編程技術(shù)是指ECU的flash存儲器具有電可擦除、可寫入的特點(diǎn),可以實(shí)現(xiàn)MCU代碼的在線更新。傳統(tǒng)的在線編程應(yīng)用系統(tǒng)采用PC機(jī)并行口或串行口實(shí)現(xiàn)數(shù)據(jù)通信,需要專用的硬件設(shè)備支持,開發(fā)成本較高,且編程操作不方便。
汽車車身控制系統(tǒng)的控制對象比較多而且分布于整個車體,系統(tǒng)應(yīng)用的電子控制單元ECU(Electronic Control Unit)節(jié)點(diǎn)安裝位置分散,如前節(jié)點(diǎn)和儀表節(jié)點(diǎn)在駕駛臺部位,后節(jié)點(diǎn)在車尾部位,左、右門節(jié)點(diǎn)則在左、右門部位等。車身控制系統(tǒng)采用的是分布式控制方式,但基于分布式系統(tǒng)的編程應(yīng)用工具比較少,難以實(shí)現(xiàn)系統(tǒng)在線編程應(yīng)用和代碼升級。
控制器局域網(wǎng)CAN(Controller Area Network)總線屬于現(xiàn)場總線范疇,是一種有效支持分布式控制和實(shí)時控制的串行通訊網(wǎng)絡(luò),目前已經(jīng)在汽車電子應(yīng)用系統(tǒng)中得到了廣泛的應(yīng)用。將CAN總線在線編程技術(shù)應(yīng)用到汽車車身控制系統(tǒng)中,完成ECU節(jié)點(diǎn)的代碼下載功能,既可以實(shí)現(xiàn)控制系統(tǒng)的在線編程應(yīng)用與升級,又能充分利用現(xiàn)場總線的應(yīng)用特點(diǎn)。
2.系統(tǒng)分析與設(shè)計(jì)
2.1系統(tǒng)整體設(shè)計(jì)分析
車身控制系統(tǒng)由若干ECU節(jié)點(diǎn)組成,每個節(jié)點(diǎn)采用Freescale處理器MC68HC908GZ系列單片機(jī)作為MCU,能夠支持flash在線應(yīng)用編程。PC機(jī)通過USBCAN接口卡接入CAN總線網(wǎng)絡(luò),當(dāng)系統(tǒng)處于在線編程狀態(tài)時,PC機(jī)通過CAN總線網(wǎng)絡(luò)可以方便的與ECU節(jié)點(diǎn)通信,車身控制系統(tǒng)軟、硬件設(shè)計(jì)無需做任何改動,就能夠利用已有的硬件應(yīng)用系統(tǒng)平臺實(shí)現(xiàn)代碼下載、系統(tǒng)在應(yīng)用升級。如圖1所示在線編程系統(tǒng)包括三部分:PC機(jī)節(jié)點(diǎn)、CAN總線通信網(wǎng)絡(luò)和ECU節(jié)點(diǎn)。
圖1 在線編程系統(tǒng)結(jié)構(gòu)框圖
在線編程軟件體系分為三層結(jié)構(gòu):控制層、通信層和實(shí)現(xiàn)層,在線編程功能通過軟件設(shè)計(jì)實(shí)現(xiàn)。最高層為控制層,運(yùn)行在上位機(jī)PC計(jì)算機(jī)中,主要負(fù)責(zé)代碼生成和ECU節(jié)點(diǎn)在線編程的啟停;中間層為通信層,運(yùn)行在CAN總線設(shè)備上,實(shí)現(xiàn)CAN總線鏈路層和部分應(yīng)用層功能,如報(bào)文發(fā)送、接收及濾波;底層為實(shí)現(xiàn)層,運(yùn)行在ECU節(jié)點(diǎn),實(shí)現(xiàn)對嵌入式節(jié)點(diǎn)的編程操作,具體結(jié)構(gòu)見圖2。通信層處理的數(shù)據(jù)有三種:控制命令、代碼數(shù)據(jù)和反饋信息,其中控制命令和代碼數(shù)據(jù)由控制層向?qū)崿F(xiàn)層傳遞,反饋信息則是由實(shí)現(xiàn)層向控制層傳遞,所有數(shù)據(jù)傳輸遵循系統(tǒng)定制的CAN總線應(yīng)用層協(xié)議,該協(xié)議在分布式控制系統(tǒng)中CAN總線協(xié)議應(yīng)用層的基礎(chǔ)上,重新劃分報(bào)文標(biāo)志符空間,并定義相應(yīng)的含義和可執(zhí)行操作。本文主要探討系統(tǒng)的具體實(shí)現(xiàn),總線協(xié)議的擴(kuò)展定義不作詳細(xì)介紹。
圖2 系統(tǒng)軟件體系結(jié)構(gòu)示意圖
2.2PC機(jī)控制層軟件的設(shè)計(jì)
整個控制系統(tǒng)中,控制層軟件位于PC機(jī)節(jié)點(diǎn),通過與實(shí)現(xiàn)層軟件通信來控制編程操作的啟停和代碼的總線數(shù)據(jù)傳輸,不直接參與對ECU節(jié)點(diǎn)的控制功能操作。
控制層軟件的功能主要包括兩部分:首先是生成下載到flash中的最終代碼數(shù)據(jù),PC機(jī)軟件不參與flash編程,但必須為ECU節(jié)點(diǎn)提供編程所需要的信息,因此,PC機(jī)軟件對生成的二進(jìn)制代碼進(jìn)行分析,獲取flash編程的必要信息,如代碼長度、寫入flash的地址、校驗(yàn)字等;其次是控制在線編程的啟動和停止,控制層維護(hù)一個稱為反饋信息表格的數(shù)據(jù)結(jié)構(gòu),表格中的信息表明哪些節(jié)點(diǎn)編程結(jié)束、哪些節(jié)點(diǎn)需要重新啟動在線編程,根據(jù)表格內(nèi)容的含義,對不同ECU節(jié)點(diǎn)發(fā)送不同的命令報(bào)文,啟動相應(yīng)操作。
控制層軟件完全由PC機(jī)實(shí)現(xiàn),但系統(tǒng)中PC機(jī)不僅僅完成控制層功能,還包括通信層的部分功能。PC機(jī)通過轉(zhuǎn)換模塊接入CAN總線網(wǎng)絡(luò),除了完成接收發(fā)送CAN總線報(bào)文的基本功能外,更重要的是實(shí)現(xiàn)系統(tǒng)定制的CAN通信協(xié)議。
2.3ECU節(jié)點(diǎn)軟件的分析
實(shí)現(xiàn)層位于ECU節(jié)點(diǎn),直接完成flash編程操作,是整個在線編程系統(tǒng)的核心部分。按系統(tǒng)運(yùn)行流程,實(shí)現(xiàn)層軟件可以分為三部分:首先,完成狀態(tài)切換,進(jìn)入在線編程狀態(tài);其次,接收代碼報(bào)文,并進(jìn)行校驗(yàn);最后,將接收到的代碼寫入flash空間,驗(yàn)證無誤后,結(jié)束在線編程。同通信層類似,實(shí)現(xiàn)層需要定義ECU節(jié)點(diǎn)在線編程協(xié)議。在線編程技術(shù)的基本原理:從結(jié)構(gòu)上將Flash存儲器映射為兩個存儲空間,運(yùn)行一個存儲體上的程序,打開flash高壓編程開關(guān)對另一個存儲體進(jìn)行編程操作。MC08HC908GZ60的內(nèi)部flash存儲器具有保護(hù)功能,可以設(shè)置flash寫保護(hù)空間,將flash空間分為兩段,一段為系統(tǒng)區(qū),存儲系統(tǒng)代碼,另一段為保護(hù)區(qū),存儲實(shí)現(xiàn)層代碼,對系統(tǒng)區(qū)編程時,保護(hù)BootLoader代碼,兩個代碼段共存于一個系統(tǒng),又不會相互干擾。系統(tǒng)打開高壓開關(guān)后,任何讀flash操作都是非法的,系統(tǒng)進(jìn)入在線編程狀態(tài)后,需要將flash編程代碼拷貝到RAM中,再運(yùn)行相關(guān)代碼。在線編程時,RAM空間需要劃分出兩段專用空間,一段為CAN接收緩沖區(qū),一段為代碼空間,是在線編程時代碼存放和運(yùn)行空間。
同樣的,ECU節(jié)點(diǎn)不僅運(yùn)行實(shí)現(xiàn)層軟件,同時完成了通信層的部分功能,本質(zhì)上通信層是對系統(tǒng)定制的CAN通信協(xié)議的具體實(shí)現(xiàn),由PC機(jī)節(jié)點(diǎn)和ECU節(jié)點(diǎn)代碼共同完成,兩者通過CAN總線實(shí)現(xiàn)通信的過程就是通信層的工作過程。
3.ECU節(jié)點(diǎn)的軟件設(shè)計(jì)
在線編程系統(tǒng)中,ECU節(jié)點(diǎn)的代碼即為保護(hù)區(qū)的代碼,可以分為兩部分:通信層部分代碼和實(shí)現(xiàn)層代碼。通信層代碼主要由CAN報(bào)文接收中斷函數(shù)和報(bào)文發(fā)送函數(shù)組成,兩函數(shù)都是不允許在線更新,因此代碼必須位于flash保護(hù)區(qū)中。
圖3 實(shí)現(xiàn)層軟件流程
保護(hù)區(qū)除了存儲通信層部分代碼外,還包括實(shí)現(xiàn)層的全部代碼。實(shí)現(xiàn)層的主要功能是flash編程操作,將接收緩沖區(qū)的代碼數(shù)據(jù)寫入flash的確定地址空間內(nèi),在flash編程操作前需要完成節(jié)點(diǎn)的狀態(tài)遷移,即ECU節(jié)點(diǎn)必須進(jìn)入在線編程狀態(tài)。本系統(tǒng)采用的方式是在啟動過程中檢測啟動報(bào)文,若檢測到有啟動報(bào)文到達(dá),則跳入特定的地址,進(jìn)入在線編程狀態(tài)。具體流程圖3所示:
系統(tǒng)啟動后,先檢測是否收到啟動報(bào)文,然后轉(zhuǎn)入相應(yīng)的狀態(tài),省略了啟動后的初始化操作。由圖可知,有兩處跳轉(zhuǎn)可以進(jìn)入正常運(yùn)行狀態(tài),這可以通過“JMP Main”匯編指令完成,保護(hù)區(qū)地址不變,那么啟動向量就不需要改變。MC08HC908GZ60共有26個中斷源,中斷向量位于(0xFFCC-0xFFFF)空間內(nèi),內(nèi)容是支持在線更新的,如何實(shí)現(xiàn)更新呢?有兩種解決方法:第一種, MC08HC908GZ60的中斷向量表固定在(0xFFCC-0xFFFF)之間的52個字節(jié)內(nèi),對中斷向量表空間的內(nèi)容進(jìn)行單獨(dú)編程寫入。注意,不是整頁寫入,中斷向量表所在頁空間中部分地址是保留空間,部分地址是寄存器地址,不可能用圖3編程流程對向量表空間編程,只能對頁內(nèi)部分空間執(zhí)行在線編程操作。第二種解決方法:通過輔助表格實(shí)現(xiàn)中斷向量表的在線更新,如圖4所示。
圖4 輔助表格示意圖
所謂輔助表格是一個存放指令的數(shù)據(jù)結(jié)構(gòu),表格內(nèi)存放跳轉(zhuǎn)到中斷入口的指令,中斷向量則對應(yīng)輔助表格中的單元格地址,輔助表格的地址是用戶定義的,位于支持在線編程的系統(tǒng)區(qū)空間。輔助表格中所有指令均采用擴(kuò)展尋址,指令長3個字節(jié),設(shè)輔助表格地址Tbl_Start,則表格中第N單元格的地址為Tbl_Start+(26-N)*3,輔助表格代碼如下:
ORG Tbl_Start ;輔助表格的起始地址
JMP Address_ISR24 ;跳轉(zhuǎn)到24號中斷處理程序入口
JMP Address_ISR23 ;跳轉(zhuǎn)到23號中斷處理程序入口
――――――――――
JMP Main ;跳轉(zhuǎn)到Main主函數(shù)入口
上面的代碼屬于系統(tǒng)區(qū)代碼,除首地址外,其他地址均根據(jù)需要隨時改變的。中斷向量表中內(nèi)容則可以保持不變,代碼如下:
ORG $FFCC ;中斷向量表的地址空間0xFFCC-0xFFFF
Vectors FDB Tbl_Start, Tbl_Start+3, Tbl_Start+6―――― ;向量表的內(nèi)容
這樣,中斷向量表代碼可以在保護(hù)區(qū)內(nèi)保持不變,不需要對表內(nèi)容直接進(jìn)行更新。
4.結(jié)束語
利用CAN總線完成對汽車電子控制系統(tǒng)節(jié)點(diǎn)的在線編程,利用了已有的硬件條件解決了車身分布式控制系統(tǒng)的現(xiàn)場升級問題。系統(tǒng)主要通過軟件方式實(shí)現(xiàn),不需要進(jìn)行單獨(dú)硬件開發(fā),開發(fā)過程易于掌握。在線編程時,只需要將PC機(jī)節(jié)點(diǎn)接入車身控制系統(tǒng)預(yù)留的CAN總線接口即可,操作方便,本技術(shù)模型不僅可以應(yīng)用于汽車電子領(lǐng)域,還可以推廣到其他分布式控制系統(tǒng),應(yīng)用前景看好。