郭帥++李軍偉++高松
摘 要: 以8位微控制器MC9S08DZ60為例,搭建了電動(dòng)汽車多節(jié)點(diǎn)燈光控制系統(tǒng)硬件平臺(tái),開發(fā)了基于CAN總線技術(shù)的多節(jié)點(diǎn)軟件觸發(fā)式引導(dǎo)加載程序,設(shè)計(jì)了Bootloader上位機(jī),開發(fā)了一套應(yīng)用于汽車燈光控制系統(tǒng)的Bootloader。通過(guò)對(duì)電動(dòng)汽車燈光控制系統(tǒng)硬件平臺(tái)進(jìn)行程序升級(jí),對(duì)Bootloader系統(tǒng)進(jìn)行了性能測(cè)試。試驗(yàn)結(jié)果表明,所設(shè)計(jì)的Bootloader系統(tǒng)能夠快捷、準(zhǔn)確、方便地實(shí)現(xiàn)應(yīng)用程序的在線升級(jí),為汽車燈光控制系統(tǒng)應(yīng)用程序的在線編程和數(shù)據(jù)更新提供了參考。
關(guān)鍵詞: 汽車燈光控制系統(tǒng); 軟件觸發(fā); CAN總線; 引導(dǎo)加載程序; 在線編程
中圖分類號(hào): TN911?34; TP391 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2017)18?0035?05
Design and realization of multi?node software trigger Bootloader
GUO Shuai, LI Junwei, GAO Song
(School of Traffic & Vehicle Engineering, Shandong University of Technology, Zibo 255049, China)
Abstract: Taking the 8?bit microcontroller MC9S08DZ60 as an example, the hardware platform of a electromobile lighting control system was built, a special multi?node software trigger Bootloader based on CAN bus technology was developed, and upper machine system of the Bootloader was designed. Then a Bootloader system for the automotive lighting control system was designed. The Bootloader system was tested through the program upgrading of the hardware platform for the automotive lighting control system. The test result of the Bootloader system shows that the Bootloader system can realize the online upgrading of applied program expediently and accurately, and provide a reference for the online programming and data?upgrading of the application program for the automotive lighting control system.
Keywords: automotive lighting control system; software trigger; CAN bus; Bootloader; online programming
0 引 言
汽車作為一個(gè)多控制器集成系統(tǒng),往往需要對(duì)控制器進(jìn)行程序設(shè)計(jì)和升級(jí),因而應(yīng)該設(shè)計(jì)多節(jié)點(diǎn)引導(dǎo)加載程序(Bootloader)實(shí)現(xiàn)多控制器程序升級(jí),為體現(xiàn)Bootloader在升級(jí)程序中的便捷性,應(yīng)采用軟件觸發(fā)的方式進(jìn)行程序升級(jí)。長(zhǎng)期以來(lái),開發(fā)人員對(duì)Bootloader進(jìn)行了大量研究,文獻(xiàn)[1]針對(duì)電動(dòng)汽車整車控制器設(shè)計(jì)了基于MC9S12XEP100的Bootloader,通過(guò)VC++開發(fā)了上位機(jī)系統(tǒng),實(shí)現(xiàn)程序在線升級(jí)。文獻(xiàn)[2]設(shè)計(jì)了基于MC9S12G128的U盤啟動(dòng)Bootloader,使用U盤攜帶目標(biāo)下載代碼,節(jié)省了單片機(jī)的內(nèi)存空間。文獻(xiàn)[3]根據(jù)CCP協(xié)議設(shè)計(jì)了基于飛思卡爾MC9S12DP512的 Bootloader,針對(duì)混合動(dòng)力電動(dòng)車控制器,實(shí)現(xiàn)了正確引導(dǎo)程序運(yùn)行。雖然這些研究開發(fā)了各類芯片的Bootloader,給出了Bootloader設(shè)計(jì)的通用研究方法,但他們僅是針對(duì)單節(jié)點(diǎn)Bootloader,采用硬件觸發(fā)方式進(jìn)行程序升級(jí),在實(shí)際車用控制器中無(wú)法便捷地實(shí)現(xiàn)程序升級(jí),不能體現(xiàn)Bootloader技術(shù)在整車控制系統(tǒng)開發(fā)中的優(yōu)勢(shì)。
本文在CAN協(xié)議的基礎(chǔ)上,采用自定義的數(shù)據(jù)傳輸協(xié)議,設(shè)計(jì)一套基于MC9S08DZ60的多節(jié)點(diǎn)軟件觸發(fā)式Bootloader,同時(shí)搭建一個(gè)汽車燈光控制系統(tǒng)的硬件平臺(tái),并通過(guò)該燈光控制系統(tǒng)硬件平臺(tái)對(duì)所設(shè)計(jì)Bootloader系統(tǒng)進(jìn)行性能測(cè)試。
1 Bootloader設(shè)計(jì)
Bootloader是系統(tǒng)加電后運(yùn)行的固化在其中的一段程序,主要功能是為了完成軟硬件所需要的初始化工作。其能實(shí)現(xiàn)用戶程序的引導(dǎo)啟動(dòng)和固件自更新兩個(gè)功能[3?5]。Bootloader的編程機(jī)制一般分為兩種:FLASH kernel法和FLASH擦寫函數(shù)法[6]。FLASH kernel法需要在進(jìn)行程序升級(jí)時(shí),要將Bootloader中與FLASH擦除和寫入相關(guān)的程序都下載到單片機(jī)的RAM中,這樣程序運(yùn)行效率高,但是這對(duì)單片機(jī)的RAM資源要求也是非常高。FLASH擦寫函數(shù)法是Bootloader比較常見的方式,它是將可執(zhí)行代碼下載到其內(nèi)置的FLASH中,因?yàn)閷懭隖LASH中的內(nèi)容能永久保存,它適合固件程序的在線升級(jí)或數(shù)據(jù)更新[7?10]。由于MC9S08DZ60內(nèi)部RAM資源有限,并且燈光控制系統(tǒng)對(duì)運(yùn)行速度要求不高,所以本文所設(shè)計(jì)的Bootloader采用第二種FLASH擦寫函數(shù)法。endprint
2 控制器端Bootloader實(shí)現(xiàn)
對(duì)于嵌入式系統(tǒng)而言,不同硬件平臺(tái)Bootloader的實(shí)現(xiàn)方法也各不相同。本文設(shè)計(jì)的整車控制器端Bootloader主要包含5部分:配置MSCAN通信模塊、FLASH擦寫模塊設(shè)計(jì)、中斷向量表映射、S19文件解析和Bootloader初始化。
2.1 配置MSCAN通信模塊
CAN總線是一種應(yīng)用十分廣泛的通信協(xié)議之一,主要應(yīng)用于對(duì)數(shù)據(jù)完整性要求非常高的汽車電子和工業(yè)控制領(lǐng)域[11?13]。Bootloader通過(guò)CAN通信進(jìn)行程序升級(jí),通過(guò)配置MSCAN通信模塊,使單片機(jī)準(zhǔn)確接收并處理數(shù)據(jù)。
飛思卡爾8位微控制器MC9S08DZ60的MSCAN模塊有64 B的配置寄存器[14?15],為了能正常進(jìn)行數(shù)據(jù)通信,需要對(duì)這些寄存器進(jìn)行配置。MSCAN模塊初始化流程如圖1所示。本文設(shè)計(jì)的Bootloader選取2 MHz的固定系統(tǒng)時(shí)鐘作為時(shí)鐘源,使用250 Kb/s的波特率,設(shè)置CAN濾波參數(shù),使燈光控制系統(tǒng)Bootloader程序只接收上位機(jī)的報(bào)文。
2.2 FLASH擦寫模塊設(shè)計(jì)
更新主程序的過(guò)程實(shí)際上就是對(duì)存儲(chǔ)程序的 FLASH進(jìn)行擦除和重新編程的過(guò)程。大部分的 FLASH當(dāng)程序在其中運(yùn)行時(shí),不允許對(duì)其自身進(jìn)行擦寫操作,如果強(qiáng)行FLASH對(duì)FLASH進(jìn)行操作,會(huì)因?yàn)榫幊屉妷狠^高使讀取的數(shù)據(jù)不穩(wěn)定,造成讀取數(shù)據(jù)錯(cuò)誤。所以本文設(shè)計(jì)的Bootloader把代碼拷貝到RAM中執(zhí)行,避免了FLASH直接對(duì)FLASH的操作。
FLASH擦寫過(guò)程中,對(duì)時(shí)鐘和晶振有嚴(yán)格要求。節(jié)點(diǎn)使用的晶振必須大于2 MHz,若外部參考時(shí)鐘小于2 MHz,則無(wú)法完成編程和擦除功能。FLASH擦寫時(shí)鐘由配置FLASH時(shí)鐘分配寄存器FCDIV的值實(shí)現(xiàn),設(shè)置后的FLASH工作時(shí)鐘必須為150~200 kHz。否則,若FLASH時(shí)鐘頻率小于150 kHz,F(xiàn)LASH會(huì)由于編程時(shí)間過(guò)長(zhǎng)而損壞;若FLASH時(shí)鐘頻率大于200 kHz,又會(huì)導(dǎo)致不完全的編程和擦除。本文設(shè)計(jì)的Bootloader配置200 kHz的FLASH時(shí)鐘頻率,選取8 MHz外部晶振。
2.3 中斷向量表映射
由于Bootloader和用戶程序是相互獨(dú)立,因此就需要解決兩個(gè)程序中斷向量不一致的問(wèn)題,并且如何讓兩個(gè)程序能正確使用自己的中斷向量,需要正確分配單片機(jī)的內(nèi)存空間,MC9S08DZ60微控制器內(nèi)存分配如圖2所示。
通常MC9S08DZ60微控制器的中斷向量表默認(rèn)安排在0xFFC0~0xFFFF。其中復(fù)位向量在地址0xFFFE處,其余的向量包括用戶向量依次往低字節(jié)的內(nèi)存方向安排[16?17]。由于Bootloader和用戶程序的中斷向量表各自獨(dú)立使用,所以Bootloader和用戶程序的中斷向量表分別在不同的內(nèi)存區(qū)間。Bootloader接管了復(fù)位向量,使它指向了確定的地址處,而用戶程序的復(fù)位向量指向的地址是未知的,為了能順利引導(dǎo)用戶程序啟動(dòng),在下載過(guò)程中需要檢測(cè)用戶的復(fù)位向量,并把它安排在FLASH中的另一個(gè)確定的位置,留給Bootloader引導(dǎo)時(shí)自動(dòng)調(diào)用。Bootloader運(yùn)行時(shí)會(huì)使用到一些中斷向量,所以Bootloader的中斷向量表仍然處于0xFFC0~0xFFFF區(qū)間。因而,用戶程序就不能使用與Bootloader相同內(nèi)存區(qū)間來(lái)定義中斷向量表,并且Bootloader是一段引導(dǎo)加載程序,不能隨便被修改,所以就將用戶程序的中斷向量表搬移到另外一段內(nèi)存區(qū)間內(nèi),以免影響B(tài)ootloader的中斷向量。
2.4 S19文件解析
在程序更新的過(guò)程中,需要把S19程序文件下載到燈光控制器內(nèi)。S19 文件為飛思卡爾推薦使用的標(biāo)準(zhǔn)文件傳送格式——S?record目標(biāo)文件格式。S?record目標(biāo)文件格式是將目標(biāo)代碼及目標(biāo)數(shù)據(jù)以十六進(jìn)制ASCII的方式表示,使得目標(biāo)文件在計(jì)算機(jī)系統(tǒng)和開發(fā)工具之間易于轉(zhuǎn)換[18?19]。
S?record格式如表1所示。S19文件中的每一行被稱為一條記錄,記錄總是以字母“S”開頭,后面跟一位數(shù)字表示此記錄的類型,數(shù)字是“0”表示S19文件的起始說(shuō)明字符串;數(shù)字若是“1”,“2”或“3”代表此記錄包含了程序數(shù)據(jù),其中“1”為16位地址,“2”為24位地址,“3”為32位地址,MC9S08DZ60用的是16位地址,若是“9”則表明此記錄為整個(gè)文件的最末一條記錄。接下來(lái)一個(gè)字節(jié)表示了此記錄所包含的字節(jié)數(shù),它由起始地址、數(shù)據(jù)字節(jié)和位于末端的校驗(yàn)字節(jié)組成,其中的校驗(yàn)字節(jié)算法為:將長(zhǎng)度、起始地址、數(shù)據(jù)相加,取三者之和的低8位,然后按位取。
2.5 Bootloader初始化
一般情況下,程序上電或復(fù)位后直接跳轉(zhuǎn)到復(fù)位向量所指向的地址,直接運(yùn)行main函數(shù),但是Bootloader程序上電后,首先要判斷是進(jìn)入用戶程序或是進(jìn)入Bootloader下載程序。Bootloader初始化流程如圖3所示。
通過(guò)判斷0x1400內(nèi)存是否寫入1,選擇進(jìn)入Bootloader下載程序。當(dāng)系統(tǒng)復(fù)位后檢測(cè)0x1400內(nèi)存沒(méi)寫入1,并且判斷用戶的復(fù)位向量所在地址0xF9FE已被寫入,則使用JMP跳轉(zhuǎn)語(yǔ)句直接跳向地址0xF9FE所保存的首地址運(yùn)行用戶程序;當(dāng)節(jié)點(diǎn)復(fù)位后檢測(cè)0x1400內(nèi)存沒(méi)寫入1,但是判斷用戶的復(fù)位向量所在地址0xF9FE沒(méi)有被寫入,則使用JMP跳轉(zhuǎn)語(yǔ)句直接跳向main函數(shù),進(jìn)入Bootloader的下載程序。
3 Bootloader上位機(jī)實(shí)現(xiàn)
Bootloader上位機(jī)程序主要是為了將S19文件以CAN通信的方式發(fā)送給燈光控制系統(tǒng),實(shí)現(xiàn)控制器讀取并升級(jí)程序代碼。
3.1 Bootloader上位機(jī)通信協(xié)議
為了防止他人隨意修改下載控制器應(yīng)用程序,本文開發(fā)了一套自定義的數(shù)據(jù)通信協(xié)議。協(xié)議具體規(guī)定了電動(dòng)汽車燈光控制器與上位機(jī)之間數(shù)據(jù)發(fā)送與接收、應(yīng)答、報(bào)文校驗(yàn)、以及查詢機(jī)制。Bootloader上位機(jī)協(xié)議如表2所示,電動(dòng)汽車燈光控制器的ID設(shè)置為0xCF00402,上位機(jī)的報(bào)文ID分別為0xCF00400,0xCF00401,0xCF00403,0xCF00404,0xCF00405,0xCF00406,0xCF00408,電動(dòng)汽車燈光控制器和上位機(jī)通信的幀類型為數(shù)據(jù)幀,數(shù)據(jù)段長(zhǎng)度為8 B。endprint
表2 Bootloader上位機(jī)協(xié)議
ID為0xCF00404,0xCF00405和0xCF00406是選擇升級(jí)節(jié)點(diǎn)的命令報(bào)文,可以選擇對(duì)主控節(jié)點(diǎn)、前燈節(jié)點(diǎn)或是后燈節(jié)點(diǎn)進(jìn)行程序升級(jí)。ID為0xCF00400的報(bào)文是上位機(jī)發(fā)送給燈光控制器的操作指令,電動(dòng)汽車燈光控制器接收到指令后,會(huì)對(duì)FLASH里的內(nèi)容進(jìn)行擦除或是編程。ID為0xCF00401的報(bào)文是上位機(jī)發(fā)送給電動(dòng)汽車燈光控制器的S19文件的數(shù)據(jù),上位機(jī)逐條發(fā)送S19文件,電動(dòng)汽車燈光控制器查詢接收S0,S1,S9的數(shù)據(jù)記錄,對(duì)相應(yīng)內(nèi)存空間進(jìn)行數(shù)據(jù)編程,并且會(huì)對(duì)接收的每一條S記錄進(jìn)行校驗(yàn)和計(jì)算,然后與接收到的校驗(yàn)和進(jìn)行比較,確保數(shù)據(jù)接收的準(zhǔn)確性。ID為0xCF00403的報(bào)文是上位機(jī)發(fā)送給燈光控制器的操作指令,可以通過(guò)返回值查詢控制器軟件和硬件版本信息。ID為0xCF00402的報(bào)文是控制器發(fā)送給上位機(jī)應(yīng)答數(shù)據(jù),分別返回擦除結(jié)束標(biāo)志位和編程結(jié)束標(biāo)志位。ID為0xCF00408的報(bào)文是上位機(jī)發(fā)送給控制器升級(jí)程序的標(biāo)志位,通過(guò)修改用戶程序內(nèi)0x1400內(nèi)存處的數(shù)據(jù),實(shí)現(xiàn)升級(jí)程序的軟件觸發(fā)方式。
3.2 Bootloader上位機(jī)
基于VB 6.0開發(fā)了Bootloader上位機(jī),采用USBCAN自帶的二次開發(fā)函數(shù),用于實(shí)現(xiàn)燈光控制系統(tǒng)的故障檢測(cè)、故障清除、遠(yuǎn)程控制、CAN報(bào)文查看和軟件在線升級(jí)等功能。汽車燈光系統(tǒng)上位機(jī)遠(yuǎn)程控制硬件平臺(tái)如圖4所示。通過(guò)上位機(jī)端界面,可以檢測(cè)硬件平臺(tái)的故障并進(jìn)行故障清除,并且可以進(jìn)行軟件的在線升級(jí)等操作。
圖4 汽車燈光系統(tǒng)上位機(jī)
上位機(jī)成功升級(jí)主節(jié)點(diǎn)程序界面如圖5所示,通過(guò)人機(jī)界面的進(jìn)度條,可以方便地了解程序的升級(jí)情況,實(shí)現(xiàn)操作人員對(duì)程序升級(jí)過(guò)程進(jìn)行控制;通過(guò)USBCAN接口卡,按照制定的通信協(xié)議,完成整車控制器與上位機(jī)之間數(shù)據(jù)傳輸,實(shí)現(xiàn)二者之間的CAN通信;通過(guò)人機(jī)界面的數(shù)據(jù)顯示窗口,讀取S19文件,解釋程序,發(fā)送程序,實(shí)現(xiàn)S19文件的數(shù)據(jù)解析;通過(guò)人機(jī)界面的發(fā)送狀態(tài)窗口,接收到控制器發(fā)送的應(yīng)答信號(hào),將處理結(jié)果實(shí)時(shí)顯示在人機(jī)交互界面上,方便采取有效的操作。
4 Bootloader性能測(cè)試
為了驗(yàn)證設(shè)計(jì)的Bootloader的在線升級(jí)程序的功能,將用戶程序通過(guò)Bootloader下載到單片機(jī)內(nèi),用戶程序的S19文件如圖6所示。用戶程序集成了CAN通信功能、定時(shí)器功能、汽車燈光系統(tǒng)控制功能,可以用來(lái)直觀地顯示用戶程序的升級(jí)結(jié)果。Bootloader程序下載到芯片內(nèi)存中的數(shù)據(jù)如圖7所示。通過(guò)將內(nèi)存區(qū)間數(shù)據(jù)與S19文件內(nèi)數(shù)據(jù)進(jìn)行對(duì)比,發(fā)現(xiàn)用戶程序可以準(zhǔn)確地下載到控制器指定的內(nèi)存中,實(shí)現(xiàn)了燈光控制器升級(jí)和更新用戶程序的功能。
為了驗(yàn)證設(shè)計(jì)的Bootloader的可靠性,搭建電動(dòng)汽車燈光控制系統(tǒng)硬件平臺(tái)如圖8所示。升級(jí)程序之后的電動(dòng)汽車燈光控制系統(tǒng)可以正常運(yùn)行,將組合開關(guān)撥至示近光燈,根據(jù)控制策略,近光燈、示寬燈和牌照燈同時(shí)亮起,符合用戶程序的運(yùn)行邏輯,證明用戶程序運(yùn)行正常。
5 結(jié) 語(yǔ)
本文基于MC9S08DZ60微控制器設(shè)計(jì)了多節(jié)點(diǎn)軟件觸發(fā)式Bootloader,并搭建了電動(dòng)汽車燈光控制系統(tǒng)硬件平臺(tái)。通過(guò)實(shí)測(cè)試驗(yàn)進(jìn)行了燈光控制系統(tǒng)性能測(cè)試,結(jié)果表明所設(shè)計(jì)的Bootloader能夠快速、準(zhǔn)確、方便地實(shí)現(xiàn)電動(dòng)汽車燈光控制系統(tǒng)多節(jié)點(diǎn)應(yīng)用程序的在線升級(jí),為汽車燈光控制系統(tǒng)應(yīng)用程序的設(shè)計(jì)和數(shù)據(jù)更新提供有效參考。
參考文獻(xiàn)
[1] 楊競(jìng)喆,王志福,劉杰.基于MC9S12XEP100的整車控制器CAN Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].車輛與動(dòng)力技術(shù),2014(1):25?29.
[2] 戚長(zhǎng)城,楊延相.總線式ECU兩級(jí)Bootloader的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2015,41(7):95?99.
[3] 張艷,鮑可進(jìn).整車控制器Bootloader的設(shè)計(jì)與[實(shí)現(xiàn)J].計(jì)算機(jī)工程,2011,37(12):233?236.
[4] 劉林,張曉丹,張作峰.Bootloader程序在MCF51AC系列單片機(jī)上的實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(11):118?122.
[5] DU Haixing. Analysis and porting of embedded Bootloader based on ARM [J]. Microcomputer information, 2010, 29(2): 57?59.
[6] 朱少輝,夏超英.基于CAN總線的ECU在線編程技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014,14(1):24?27.
[7] 王亞剛.嵌入式Bootloader機(jī)制的分析與移植[J].計(jì)算機(jī)工程,2010,36(6):267?269.
[8] 馬學(xué)文,朱名日,程小輝.嵌入式系統(tǒng)中Bootloader的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005,31(7):96?97.
[9] 黎君.基于ARM9嵌入式系統(tǒng)的Bootloader移植[J].科學(xué)技術(shù)與工程,2011,11(32):8061?8064.
[10] 王景存,高峰.基于ARM9的Bootloader的分析及設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2010,33(2):44?46.
[11] 田會(huì)峰.基于S3C2440的Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化技術(shù)與應(yīng)用,2010,29(7):29?32.
[12] 王宜懷,曹金華.嵌入式系統(tǒng)設(shè)計(jì)實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2012.
[13] 王宜懷,吳瑾,張書奎,等.嵌入式技術(shù)基礎(chǔ)與實(shí)踐[M].北京:清華大學(xué)出版社,2012.
[14] SAE. CAN vehicle application layer: SAE J1939/71?2016 [S]. USA: SAE, 2016.
[15] Anon. Road vehicles?diagnostics on controller area networks (CAN), part 2: Network layer services: ISO 15765?2 [S]. [S.l.]: ISO, 2004.
[16] Anon. Freescale′s HC08 and HCS08 apps gets full certification via LDRA software [J]. Health and beauty close?up, 2011, 234: 111?120.
[17] 林志貴,鐘晴晴.HCS08系列FLASH在線編程方法的比較與分析[J].天津工業(yè)大學(xué)學(xué)報(bào),2011(5):71?75.
[18] Anon. Motorola S?records文件格式 [EB/OL]. (2011?09?07) [2015?11?26]. http://blog.csdn.net/zyboy2000/article/details/6757604.
[19] Anon. MC9S08DZ60 Datasheet [EB/OL]. [2015?11?26]. http://www.alldatasheet.com/datasheet?pdf/pdf/153370/FREESCALE/MC9S08DZ60.html.