上海儀電汽車電子系統(tǒng)有限公司 宋曉睿 環(huán) 翾
基于串口的B o o t l oader在汽車空調(diào)控制器中的應(yīng)用
上海儀電汽車電子系統(tǒng)有限公司 宋曉睿 環(huán) 翾
為解決汽車空調(diào)控制器在調(diào)試和維護(hù)時更新軟件的不便,本文提出一種基于串口的Bootloader設(shè)計方法用來對車載空調(diào)控制器進(jìn)行在線的軟件升級。本文介紹了Bootloader的原理,并具體闡述了在產(chǎn)品設(shè)計中如何從硬件軟件方面來實現(xiàn)此串口Bootloader的開發(fā)應(yīng)用。并通過VC開發(fā)了上位機(jī)的燒寫測試界面。
bootloader;汽車空調(diào)控制器
隨著電子技術(shù)發(fā)展的日新月異,汽車空調(diào)控制器能實現(xiàn)的功能也就越來越多,越來越復(fù)雜。在汽車空調(diào)系統(tǒng)開發(fā)的前期,通常運(yùn)用專用的開發(fā)工具來進(jìn)行軟件的更新升級,然而產(chǎn)品進(jìn)行到汽車整車裝車調(diào)試和使用維護(hù)階段由于其機(jī)械裝配的限制已經(jīng)不適合再用前期的燒寫工具進(jìn)行軟件的更新。尤其是在路試跑車階段,能夠及時地在線更新可以大大提高開發(fā)的效率。本文基于飛思卡爾HCS12X系列16位單片機(jī),設(shè)計開發(fā)了廉價串口的bootloader上位機(jī)和下位機(jī)程序,實現(xiàn)了用戶程序的在線升級。實驗結(jié)果表明,該串口Bootloader實現(xiàn)了簡便、穩(wěn)定的車載空調(diào)控制器軟件的在線升級,提高了開發(fā)效率。
Bootloader是引導(dǎo)加載程序,在單片機(jī)運(yùn)行之前運(yùn)行。它由兩部分組成,Boot通過單片機(jī)啟動時的指令實現(xiàn)硬件設(shè)備的初始化以及建立內(nèi)存空間的映射圖。而Loader則負(fù)責(zé)讀取上位機(jī)命令來擦除用戶程序Flash空間或者接收、處理上位機(jī)傳輸來的文件程序?qū)懭隖lash中。Bootloader是依賴于特定的硬件而實現(xiàn)的,因此,在眾多嵌入式產(chǎn)品中目前還不可能實現(xiàn)通用Bootloader。
本文所描述的開發(fā)體系分為主機(jī)和目標(biāo)機(jī)兩個部分它們是通過串口連接起來的。個人PC的通用串口如圖1所示:
圖1 P C串口示意圖
3.1 軟件框架
要實現(xiàn)軟件的自更新,我們將原來的ECU FLASH分為兩部分,Application Software與Bootloader部分。
其中Application Software部分可以實現(xiàn)單片機(jī)的正常操作用來滿足車載空調(diào)控制器的各項功能需求。同時在這一部分可以通過診斷的串口指令來實現(xiàn)程序的跳轉(zhuǎn)進(jìn)入到Boot block部分實現(xiàn)程序的加載。而Boot block部分則可劃分為兩塊Boot Manager和Flash Loader。Boot Manager是單片機(jī)在上電或者是復(fù)位之后首先執(zhí)行的部分,由它結(jié)合收到的上位機(jī)的指令來決定是正常運(yùn)行應(yīng)用程序還是跳轉(zhuǎn)到Boot部分進(jìn)行程序更新。而Flash Loader部分則通過一些FLASH操作的工具來實現(xiàn)指定FLASH區(qū)域的擦寫。并且在程序更新完成之后,執(zhí)行單片機(jī)Reset,并跳轉(zhuǎn)到應(yīng)用程序繼續(xù)進(jìn)行邏輯功能的實現(xiàn)。因為是基于飛思卡爾HCS12X系列的單片機(jī)所以Flash進(jìn)行程序更新時是受保護(hù)的,不能被一切中斷所打斷。在進(jìn)行Flash的劃分時,簡單的做法是更改prm程序文件,將APP區(qū)域和BOOT區(qū)域根據(jù)地址劃分好,在劃分區(qū)域的時候要注意考慮Boot程序和APP程序各自的程序量的大小以免出現(xiàn)程序超限溢出的情況發(fā)生。同時需要注意的是在Boot區(qū)域有可能要應(yīng)用到中斷服務(wù)函數(shù),因為Boot區(qū)域的中斷服務(wù)函數(shù)不能與應(yīng)用程序的中斷服務(wù)函數(shù)重合,在這里就需要將服務(wù)函數(shù)的中斷向量表地址進(jìn)行重置,使其能夠正常工作。因為APP和Boot程序需要多次相互跳轉(zhuǎn),我們設(shè)置一個跳轉(zhuǎn)的變量是很有必要的,它將提示主程序是否跳轉(zhuǎn),以及是由哪一方向哪一方跳轉(zhuǎn)。這個跳轉(zhuǎn)變量希望能在單片機(jī)Reset之后仍然記錄數(shù)值,那我們就單獨(dú)開辟一個RAM區(qū)域用來保存這個變量的值,這個RAM區(qū)域在單片機(jī)復(fù)位時將不會被清零。
3.2 上位機(jī)軟件系統(tǒng)
本文的上位及軟件系統(tǒng)采用的是VC編程的可視化界面。編譯環(huán)境是采用Microsoft Visual Studio 2010。根據(jù)XON/XOFF通訊協(xié)議,生成的可視化界面。
因為是基于車載空調(diào)的上位機(jī)軟件,串口也同時將當(dāng)前車載空調(diào)控制器的狀態(tài)傳給上位機(jī),上位機(jī)可根據(jù)數(shù)據(jù)實時顯示當(dāng)前車載空調(diào)控制器的狀態(tài)。當(dāng)點(diǎn)擊其中的setup按鈕的話,可對當(dāng)前串口進(jìn)行設(shè)置。
當(dāng)你點(diǎn)擊log按鈕,會彈出串口log文件選擇界面。當(dāng)選好要log的文件之后,界面會進(jìn)入串口log界面等文件傳輸結(jié)束,則log完成。
程序自動跳轉(zhuǎn)到應(yīng)用程序進(jìn)行正常運(yùn)行。
本文探討了汽車空調(diào)控制器的自編程功能以及Bootloader的設(shè)計方法。具體描述了利用Power PC通過單片機(jī)串口對相應(yīng)的車載空調(diào)控制器的應(yīng)用程序通過Bootloader進(jìn)行升級。Bootloader技術(shù)在車載產(chǎn)品中的開發(fā)和廣泛應(yīng)用,必將成為嵌入式產(chǎn)品開發(fā)的重要部分,為車載產(chǎn)品的應(yīng)用和開發(fā),特別是后期維護(hù)、升級帶來極大的便利。
[1]張杰.通用的開放BootLoader的設(shè)計與實現(xiàn)[D].青島大學(xué),2010.
[2]劉一平.基于HIS協(xié)議的車載Bootloader的研究與實現(xiàn)[D].電子科技大學(xué),2015.
[3]奚英澤,于健楠,徐鳳.基于飛思卡爾MPC5634M單片機(jī)的Bootloader設(shè)計[A].2013中國汽車工程學(xué)會年會論文集[C].2013.