朱少輝,夏超英
(天津大學(xué) 電氣與自動化工程學(xué)院,天津 300072)
?
基于CAN總線的ECU在線編程技術(shù)*
朱少輝,夏超英
(天津大學(xué) 電氣與自動化工程學(xué)院,天津 300072)
針對已安裝完成的車身ECU程序升級困難的問題,基于CAN總線的自定義協(xié)議,設(shè)計了一種ECU在線升級方案,并在Infineon XC2000系列單片機上具體實現(xiàn)。詳細(xì)介紹了在線升級系統(tǒng)的軟硬件組成、單片機Bootloader的設(shè)計方案,以及系統(tǒng)的工作過程。實驗結(jié)果表明,該系統(tǒng)能夠很好地完成ECU在線升級功能,并能有效解決ECU在線升級過程中的一些問題。
CAN總線;在線編程;引導(dǎo)加載程序; Infineon XC2000
隨著IAP技術(shù)的出現(xiàn)以及Flash價格的降低,一般的電控單元(ECU)都具有IAP(In Application Programming)功能和較大的Flash空間,為實現(xiàn)ECU在線編程功能提供了必要條件[1]。
目前基于IAP技術(shù)的在線編程的方案有很多,采用的通信方式和具體實現(xiàn)方法也各不相同。參考文獻(xiàn)[2]采用RS232總線 和YMODEM協(xié)議開發(fā)了用于智能終端的在線升級系統(tǒng),但是RS232總線的傳輸速率有限。參考文獻(xiàn)[3]采用LIN總線實現(xiàn)了適用于汽車ECU的在線升級系統(tǒng),LIN總線除了傳輸速率有限以外,同時它只是一種輔助總線,并不是所有車身ECU都采用LIN接口。參考文獻(xiàn)[1]、[4]采用基于CCP(CAN Calibration Protocol)協(xié)議的在線升級系統(tǒng),兼具CAN總線傳輸速率快和CCP協(xié)議可擴展性好的優(yōu)點。本文采用CAN總線,基于CCP原理自定義協(xié)議的在線升級系統(tǒng),具有傳輸速度快的特點。自定義協(xié)議各命令基本沿用CCP協(xié)議,但內(nèi)容做了改動,這樣通過改動協(xié)議內(nèi)容能夠很好地適合特定環(huán)境的應(yīng)用。同時在升級過程中加入升級請求標(biāo)志位,能夠很好地改進(jìn)程序下載過程中命令延時等待、應(yīng)用程序下載失敗以后下次無法連接的問題。
IAP和Bootloader原理略——編者注。
在線編程系統(tǒng)硬件主要包含三個部分:帶有下載上位機軟件的PC機、USB-CAN接口卡和安裝有Bootloader程序的ECU。上位機通過USB-CAN接口卡與ECU通信,并進(jìn)行代碼的升級。軟件主要包含兩個部分:上位機的Bootloader下載程序和下位機的Bootloader程序。
1.1 通信協(xié)議與上位機程序設(shè)計
1.1.1 通信協(xié)議的制定
系統(tǒng)通信協(xié)議的以CCP協(xié)議原理為基礎(chǔ),結(jié)合實際操作過程的需求來制定。CCP協(xié)議提供11個基本命令和17個可選命令,基本命令包括:CONNECT、GET_CCP_VERS ION、EXCHANGE_ID、SET_MTA、DNLOAD、UPLOAD、GET_DAQ_PTR、WRITE_DAQ、START_STOP、DISCONNECT。本協(xié)議采用其中CONNECT、DISCONNECT、CLEAR_MEMORY、PROGRAM、SET_MTA。命令內(nèi)容根據(jù)實際需要自定義;消息應(yīng)答信號有連接成功應(yīng)答、編程準(zhǔn)備就緒應(yīng)答、頁編程完成應(yīng)答、編程完成應(yīng)答、編程失敗應(yīng)答、SECTION擦除就緒應(yīng)答、SECTION擦除完成應(yīng)答等。本套自定義協(xié)議能夠很好地應(yīng)用在實際下載過程中。
1.1.2 PC端下載程序的組成
PC端的Bootloader下載程序主要功能是實現(xiàn)對目標(biāo)文件的解析和與下位機軟件通信。下載程序采用Visual C++ 6.0編寫,主要分成目標(biāo)文件加載與解析以及Flash編程兩個模塊。
(1) 目標(biāo)文件的生成和解析
系統(tǒng)應(yīng)用程序文件采用*.HEX格式文件,該文件是記錄文本行的ASCII文本文件,每一行是一條記錄,每條記錄是16進(jìn)制數(shù)組成的機械碼或數(shù)據(jù)常量。記錄格式:
: LL ADDR TT [DDD…] CC
其中,冒號是記錄開始;LL表示數(shù)據(jù)長度,即[DDD…]的字節(jié)數(shù);ADDR表示地址信息;TT表示記錄的類型;[DDD…]表示數(shù)據(jù)內(nèi)容;CC表示校驗和。
利用Tasking開發(fā)環(huán)境,能夠生成包含應(yīng)用程序的*.HEX文件,文件中的記錄類型只有數(shù)據(jù)記錄、線性擴展地址記錄和文件結(jié)束記錄。通過上位機載入目標(biāo)文件,逐條檢索文件內(nèi)容將帶有地址信息的數(shù)據(jù)解析出來,并以CAN數(shù)據(jù)幀(8字節(jié))的形式存放,每16幀數(shù)據(jù)組合成一個頁,同時記錄每個數(shù)據(jù)頁的首地址。
(2) Flash編程模塊
Flash編程模塊實現(xiàn)與下位機的通信,主要包含命令的解析、CAN總線驅(qū)動、數(shù)據(jù)發(fā)送和狀態(tài)顯示等部分。CAN總線驅(qū)動采用廣州周立功單片機發(fā)展有限公司的USB-CAN采集卡的驅(qū)動程序,加入提供的庫函數(shù),來實現(xiàn)對于CAN總線數(shù)據(jù)的發(fā)送和接收。上位機軟件提供相關(guān)命令的按鈕,下載過程中通過按動相應(yīng)按鈕來實現(xiàn)命令的發(fā)送。下載過程中如果接收到連接成功、編程完成或者編程失敗等信號以后,顯示相應(yīng)狀態(tài)。
1.1.3 PC端下載程序的運行流程
PC端程序運行以后,通過上位機界面上的“載入文件”按鈕,將要升級程序HEX文件載入,點“解析按鈕”,程序自動將HEX文件分成包含有效數(shù)據(jù)長度為128字節(jié)的頁,同時將頁首地址保存。根據(jù)已經(jīng)制定好的協(xié)議,上位機將這些命令封裝成CAN總線消息發(fā)送到下位機。編程過程中,上位機將所需要發(fā)送的程序頁總數(shù)發(fā)送給下位機,然后從第一頁開始發(fā)送,每一頁發(fā)送完成以后,等待下位機發(fā)送頁編程完成信號,完成以后繼續(xù)發(fā)送下一頁,直到所有程序頁都發(fā)送完成,這時如果無錯誤,接收下位機編程完成應(yīng)答消息,顯示編程完成;否則顯示編程失敗。程序流程圖如圖 1所示。
圖1 PC端下載程序流程圖
1.2 Bootloader設(shè)計
Flash編程的機制主要有兩種,分別是調(diào)用Flash擦寫函數(shù)法和Flash kernel法[4]。Flash kernel法需要在進(jìn)行軟件升級時將Bootloader程序中 Flash擦寫以及相關(guān)的初始化程序都下載到單片機RAM中,這對RAM資源的要求較高,對于單片機來說這是有困難的。采用Flash擦寫函數(shù)法,只需要在升級程序時調(diào)用Flash擦寫函數(shù)即可。對于某些單片機,在對Flash進(jìn)行擦寫時,加在Flash區(qū)的電壓高于普通電壓,會引起Flash區(qū)的操作不穩(wěn)定,因此也需要將Flash擦寫函數(shù)放在RAM中運行,這樣采用Flash擦寫函數(shù)能夠有效的減少RAM區(qū)的占用。Infineon XC2000單片機支持同時對不同頁的讀/寫操作,不會出現(xiàn)Flash擦寫操作不穩(wěn)定的問題,因此本設(shè)計采用Flash擦寫函數(shù)法。
1.2.1 Flash空間代碼分布
本設(shè)計中ECU采用XC2785A單片機,其片上集成32 KB的PSRAM和832 KB的Flash(0xC00000~0xCCFFFF)用于代碼存儲。Flash陣列由4個塊組成,分別是F0(256 KB,0xC00000~0xC3FFFF)、F1(256 KB,0xC40000~0xC7FFFF)、F2(256 KB,0xC80000~0xCBFFFF)、F3(64 KB,0xCC0000~0xCCFFFF)。每一個Flash塊由若干個大小為4 KB的扇區(qū)組成,而每一個扇區(qū)可分為32個頁(128字節(jié)),可對每個頁單獨進(jìn)行擦除和編程操作。Flash區(qū)段的最開始存放程序的中斷向量表,0xC01000~0xC0DFFF區(qū)段存放Bootloader代碼,0xC0E000~0xC0EFFF區(qū)段中的最開始那個頁存放升級標(biāo)志, 0xC0F000~0xC0FFFF區(qū)段為單片機保留區(qū)段,0xC10000~0xCCFFFF段存放應(yīng)用程序,代碼空間分布如圖2所示。
圖2 Flash空間代碼分布示意圖
1.2.2 Bootloader程序流程
復(fù)位中斷向量的出口地址是0xC01000,因此單片機上電啟動或者軟件重啟以后,首先跳轉(zhuǎn)到STARTUP.C,通過判斷升級標(biāo)志是否置位來進(jìn)行跳轉(zhuǎn)。若置位表示有升級請求,則進(jìn)行Bootloader的初始化,然后執(zhí)行主函數(shù),升級完成以后擦除標(biāo)志位;若無升級請求則跳轉(zhuǎn)到用戶程序區(qū)執(zhí)行用戶程序。用戶程序更新時,需要同時更新中斷向量,這樣保證用戶程序能夠正常使用中斷功能。
[1]中采用的方法是在用戶程序運行時,接受到連接命令,則單片機跳轉(zhuǎn)到Bootloader程序執(zhí)行升級流程,但是如果升級過程中出現(xiàn)錯誤,用戶程序升級未完成,則下一次上電系統(tǒng)將無法運行。參考文獻(xiàn)[4]中,采用上電進(jìn)入Bootloader之前發(fā)送握手信號,等待上位機回復(fù),這樣每次上電都要先進(jìn)行Bootloader的初始化,并且等待這種方式不能很好地保證和上位機連接。本文采用增加升級狀態(tài)標(biāo)志位的方法,用戶程序在運行時,如有升級請求則置狀態(tài)標(biāo)志位,并軟件重啟。重啟以后,單片機先檢測狀態(tài)標(biāo)志位,有升級請求則進(jìn)入Bootloader進(jìn)行軟件升級,若升級過程中出現(xiàn)錯誤導(dǎo)致升級未完成的話,升級狀態(tài)標(biāo)志位將不會清除,單片機重啟以后仍然進(jìn)去Bootloader,直接操作上位機上的編程按鈕即可進(jìn)行程序升級操作。這種方法能夠有效解決升級過程中出現(xiàn)失敗以及握手等待的問題,下位機軟件流程如圖 3所示。
圖3 下位機軟件流程圖
1.3 在線編程系統(tǒng)工作流程
圖4 系統(tǒng)工作過程
系統(tǒng)連接完成以后,通過上位機載入需要更新的應(yīng)用程序文件,點擊“CONNECT”按鈕,在線編程系統(tǒng)啟動,系統(tǒng)工作過程如圖 4所示。上位機界面中顯示連接成功,則可進(jìn)行下一步操作。點擊擦除按鈕,上位機發(fā)送擦除指令,下位機擦除相應(yīng)Flash區(qū)域以后發(fā)送給上位機應(yīng)答信號。上位機給下位機發(fā)送編程命令的同時,發(fā)送給下位機需要編程的頁總數(shù)。下位機在接收到頁編程地址以后,連續(xù)接收上位機發(fā)送過來的16幀數(shù)據(jù)(一頁128字節(jié)),然后擦除相應(yīng)區(qū)域,并將這一頁數(shù)據(jù)寫入相應(yīng)的頁,頁編程完成以后向上位機發(fā)送頁編程完成應(yīng)答,接著接收上位機發(fā)送過來的下一頁數(shù)據(jù),當(dāng)所有頁編程完成以后向上位機發(fā)送編程完成應(yīng)答信號。此時斷開連接,ECU將會軟件重啟。若編程過程中有任一頁編程失敗,上位機則顯示編程失敗,斷開連接以后ECU重啟,仍然進(jìn)入Bootloader程序,然后直接點擊編程即可。
圖5 目標(biāo)HEX文件
在線升級系統(tǒng)采用PC機(安裝有上位機軟件),連接廣州周立功單片機發(fā)展有限公司的USB-CAN采集卡,ECU的CPU采用Infineon XC2785A單片機,系統(tǒng)連接完成以后進(jìn)行升級測試。本文設(shè)計的在線編程方案測試結(jié)果如下:圖 5為待更新程序的HEX文件(通過Tasking環(huán)境生成),其中有下劃線的位HEX文件記錄中的數(shù)據(jù)記錄,起始地址為0xC11000;圖6為程序下載到Flash以后的數(shù)據(jù),通過Tasking軟件的Debug狀態(tài),來查看Flash地址為0xC11000的數(shù)據(jù)。通過對比兩幅圖片,發(fā)現(xiàn)程序數(shù)據(jù)正確下載到了相應(yīng)的Flash區(qū)域。在下載過程中,通過錯誤操作制造在線編程失敗現(xiàn)象,然后斷開連接,ECU重啟以后仍然進(jìn)入Bootloader程序,直接在上位機界面上點擊“Program”,能夠完成在線升級。實驗結(jié)果表明,所設(shè)計的基于CAN總線的在線升級系統(tǒng)能夠?qū)崿F(xiàn)代碼在線下載的功能,并且能夠有效改善升級過程中下載失敗的問題。
圖6 Flash中的數(shù)據(jù)
本文提出的基于CAN總線的ECU在線升級系統(tǒng)設(shè)計方案,切實可行,并已在Infineon XC2785A單片機上完成實際測試。Infineon XC2000單片機具有相同的內(nèi)核,因此此方案將對這一系列單片機的Bootloader設(shè)計具有指導(dǎo)意義。同時采用升級標(biāo)志位的方法,對于單片機IAP功能的實現(xiàn)提供一個有益的參考。
參考文獻(xiàn)
[1] 蔣建春,陳紅霞,鄭太雄.基于CCP的ECU在線編程技術(shù)的實現(xiàn)[J].計算機工程,2011, 37(5):241-243.
[2] 江曉梅,李祥和.基于ARM的IAP在線及遠(yuǎn)程升級技術(shù) [J].計算機應(yīng)用,2008,28(2):519-521.
[3] 韓江洪,常安云.車身控制系統(tǒng)在線編程技術(shù)的研究與實現(xiàn)[C]//全國計算機技術(shù)與應(yīng)用學(xué)術(shù)會議論文集.寧波:[出版者不詳],2008.
[4] 張艷,鮑可進(jìn).整車控制器Bootloader的設(shè)計與實現(xiàn) [J].計算機工程,2011,37(12):233-235.
[5] 劉矗,羅峰.基于飛思卡爾微控制器的CAN Bootloader的實現(xiàn)與應(yīng)用[J].蘇州大學(xué)學(xué)報:工學(xué)版,2010,30(2):57-61.
[6] Infineon Technologies.XC2000 Derivatives User’s Manual,2008.
朱少輝(碩士研究生),主要研究領(lǐng)域為純電動汽車整車控制器開發(fā)、電機控制器開發(fā);夏超英(教授),主要研究領(lǐng)域為電力電子技術(shù)與裝置、控制理論與應(yīng)用、純電動汽車和混合動力汽車、交流驅(qū)動控制系統(tǒng)與技術(shù)。
Zhu Shaohui, Xia Chaoying
( Electrical Engineering and Automation School, Tianjin University, Tianjin 300072, China)
Focusing on the problem of installed Body ECU program updating, a design of ECU program updating based on self-defined CAN protocol is realized on Infineon XC2000 series MCU. Then the hardware and software composition of program updating system, approach of MCU Bootloader, and working process of the system are introduce. The experimental results show that the system can achieve the function of program updating online and effectively solve some problems in the process of ECU online updating.
CAN bus; online programming; Bootloader; Infineon XC2000
TP23
A
珍
2013-08-04)