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

圖4 輔助表格示意圖
所謂輔助表格是一個(gè)存放指令的數(shù)據(jù)結(jié)構(gòu),表格內(nèi)存放跳轉(zhuǎn)到中斷入口的指令,中斷向量則對(duì)應(yīng)輔助表格中的單元格地址,輔助表格的地址是用戶(hù)定義的,位于支持在線編程的系統(tǒng)區(qū)空間。輔助表格中所有指令均采用擴(kuò)展尋址,指令長(zhǎng)3個(gè)字節(jié),設(shè)輔助表格地址Tbl_Start,則表格中第N單元格的地址為T(mén)bl_Start+(26-N)*3,輔助表格代碼如下:
ORG Tbl_Start ;輔助表格的起始地址
JMP Address_ISR24 ;跳轉(zhuǎn)到24號(hào)中斷處理程序入口
JMP Address_ISR23 ;跳轉(zhuǎn)到23號(hào)中斷處理程序入口
――――――――――
JMP Main ;跳轉(zhuǎn)到Main主函數(shù)入口
上面的代碼屬于系統(tǒng)區(qū)代碼,除首地址外,其他地址均根據(jù)需要隨時(shí)改變的。中斷向量表中內(nèi)容則可以保持不變,代碼如下:
ORG $FFCC ;中斷向量表的地址空間0xFFCC-0xFFFF
Vectors FDB Tbl_Start, Tbl_Start+3, Tbl_Start+6―――― ;向量表的內(nèi)容
這樣,中斷向量表代碼可以在保護(hù)區(qū)內(nèi)保持不變,不需要對(duì)表內(nèi)容直接進(jìn)行更新。
4.結(jié)束語(yǔ)
利用CAN總線完成對(duì)汽車(chē)電子控制系統(tǒng)節(jié)點(diǎn)的在線編程,利用了已有的硬件條件解決了車(chē)身分布式控制系統(tǒng)的現(xiàn)場(chǎng)升級(jí)問(wèn)題。系統(tǒng)主要通過(guò)軟件方式實(shí)現(xiàn),不需要進(jìn)行單獨(dú)硬件開(kāi)發(fā),開(kāi)發(fā)過(guò)程易于掌握。在線編程時(shí),只需要將PC機(jī)節(jié)點(diǎn)接入車(chē)身控制系統(tǒng)預(yù)留的CAN總線接口即可,操作方便,本技術(shù)模型不僅可以應(yīng)用于汽車(chē)電子領(lǐng)域,還可以推廣到其他分布式控制系統(tǒng),應(yīng)用前景看好。