郭帥 孫曉鵬 李苑瑋
(濰柴動(dòng)力股份有限公司 山東省濰坊市 261000)
Bootloader 作為引導(dǎo)加載程序,是變速箱控制器(TCU)應(yīng)用程序在線升級不可或缺的一部分,然而大多數(shù)研究中是將Bootloader 程序與用戶程序分開寫入變速箱控制器芯片內(nèi),這使得變速箱控制系統(tǒng)的開發(fā)便捷性降低,而在工程實(shí)際應(yīng)用中,往往需要簡化控制系統(tǒng)的開發(fā)流程,減少軟件的開發(fā)時(shí)間。
開發(fā)人員對Bootloader 進(jìn)行了大量基礎(chǔ)研究,發(fā)現(xiàn)Bootloader與芯片內(nèi)存結(jié)構(gòu)是強(qiáng)相關(guān)的,不同控制器芯片對應(yīng)的Bootloader內(nèi)存及協(xié)議是完全不同的。樂志國等[1]設(shè)計(jì)了基于恩智浦MC9S12XDP512 控制器芯片的Bootloader 系統(tǒng),并設(shè)計(jì)了上位機(jī)操作系統(tǒng),實(shí)現(xiàn)了軟件在線編程;劉矗等[2]使用自定義的CAN總線傳輸協(xié)議,設(shè)計(jì)了基于恩智浦16 位微控制器的通用CAN Bootloader,實(shí)現(xiàn)該類控制器芯片的通用化設(shè)計(jì);戚長城等[3]設(shè)計(jì)了基于恩智浦MC9S12G128 的Bootloader 系統(tǒng),仿照電腦U 啟動(dòng)的模式,將Bootloader 目標(biāo)代碼存儲(chǔ)于U 盤中,節(jié)省了控制器的內(nèi)存空間。雖然這些研究從不同角度,闡述了基于各類控制器芯片的研究方法,但這僅將Bootloader 程序作為個(gè)體進(jìn)行研究,沒有將用戶程序和Bootloader 進(jìn)行融合考慮,不能體現(xiàn)Bootloader 技術(shù)在變速箱控制系統(tǒng)開發(fā)中的優(yōu)勢,不能滿足變速箱控制器應(yīng)用程序的開發(fā)效率。
本文采用自定義的CAN 數(shù)據(jù)傳輸協(xié)議,設(shè)計(jì)一套融合用戶程序和Bootloader 程序的Bootloader 系統(tǒng),使用Flash 加載執(zhí)行的方法對TCU 的Bootloader 進(jìn)行設(shè)計(jì),將周立功USBCAN-II 智能CAN 接口卡作為連接硬件,通過VB6.0 開發(fā)上位機(jī)系統(tǒng),同時(shí)搭建一個(gè)基于恩智浦MC9S12XEP100 單片機(jī)的硬件平臺(tái),并對所設(shè)計(jì)的Bootloader 系統(tǒng)進(jìn)行功能測試。
Bootloader 是嵌入式控制器上電后運(yùn)行的第一段程序,它根據(jù)指令對數(shù)據(jù)升級和應(yīng)用程序執(zhí)行兩個(gè)功能進(jìn)行選擇[4,17]。所設(shè)計(jì)的變速箱控制系統(tǒng)Bootloader 以CAN 總線技術(shù)為基礎(chǔ),分為變速箱控制器Bootloader 程序和上位機(jī)Bootloader 程序兩部分。
通常,Bootloader 嚴(yán)重依賴硬件,不同控制器之間Bootloader無法做到完全移植,所以對于嵌入式系統(tǒng)而言,不同主控芯片的硬件平臺(tái)Bootloader 的實(shí)現(xiàn)也各不相同,但是其思路和框架是基本一樣的[6]。本文設(shè)計(jì)的變速箱控制系統(tǒng)的Bootloader 主要有:Bootloader 初始化流程、CAN 通信模塊設(shè)置、FLASH 擦寫模塊設(shè)計(jì)、重建用戶程序中斷向量、融合Bootloader 程序和用戶程序。
圖1:Bootloader 初始化流程
圖2:MSCAN 初始化流程
圖3:程序融合流程
圖4:升級程序成功界面
圖5:Bootloader 硬件平臺(tái)
圖6:用戶程序的S19 文件
一般在沒有Bootloader 的系統(tǒng)中,程序上電后,經(jīng)過底層初始化,會(huì)直接跳轉(zhuǎn)到用戶程序的main 函數(shù)內(nèi)執(zhí)行,而有Bootloader的系統(tǒng)上電后,首先要根據(jù)指令狀態(tài),在用戶程序和Bootloader 之間進(jìn)行選擇。通常,進(jìn)入Bootloader 程序的情況一般有三種:在復(fù)位時(shí),對特定通信口的關(guān)鍵字檢測;在復(fù)位時(shí),對特定硬件IO 檢測;在運(yùn)行時(shí),對特定通信口的關(guān)鍵字檢測。由于第一種方法屬于超時(shí)機(jī)制,需要編寫代碼實(shí)現(xiàn),比較復(fù)雜,第三種方法需要特定的協(xié)議棧做支持,所以選擇第二種簡便有效的方式。
Bootloader 初始化流程如圖1所示。單片機(jī)的P 端口第0 引腳(PP0)接按鍵,系統(tǒng)復(fù)位后,獲取復(fù)位中斷地址處引導(dǎo)加載程序首地址,檢測到指令按鍵按下,則執(zhí)行Bootloader 程序;否則,檢測用戶程序復(fù)位中斷地址,防止控制器內(nèi)只有Bootloader 程序而沒有用戶程序的情況發(fā)生。
通信模塊負(fù)責(zé)變速箱控制器與上位機(jī)間的指令交互,以及數(shù)據(jù)升級過程中數(shù)據(jù)文件的傳輸。本文通訊程序采用CAN 通信的方式,通過對MC9S12XEP100 單片機(jī)CAN 通訊模塊的寄存器進(jìn)行配置[7,8],實(shí)現(xiàn)正常的指令交互和數(shù)據(jù)傳輸。
MSCAN 初始化流程如圖2所示。為了提高數(shù)據(jù)傳輸?shù)男剩鶕?jù)CAN 通信協(xié)議,選取合適的時(shí)鐘源,本文設(shè)計(jì)的TCU 選取振蕩器作為時(shí)鐘源,經(jīng)過預(yù)分頻器分頻處理得到的CAN 通信波特率為250Kbps;為了保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,設(shè)置CAN 通信濾波的代碼和掩碼,選取擴(kuò)展幀并設(shè)置相應(yīng)濾波器,使TCU 僅接收上位機(jī)發(fā)送的CAN 報(bào)文。
MC9S12XEP100 單片機(jī)在Flash 擦寫過程中,對時(shí)鐘和晶振有嚴(yán)格的要求。節(jié)點(diǎn)使用的晶振必須足夠高,才能保證對Flash 扇區(qū)的正常操作。FLASH 總線時(shí)鐘是外部振蕩器時(shí)鐘經(jīng)過時(shí)鐘分頻寄存器(FDIV)分頻得到的,晶振時(shí)鐘的分頻寄存器需要合理設(shè)置,太高太低,都會(huì)導(dǎo)致對內(nèi)存的操作產(chǎn)生問題。所以對于恩智浦EP100 微控制器來說,將外部晶振設(shè)為16MHz,F(xiàn)DIV 設(shè)為0x0F。
MC9S12XEP100 單片機(jī)的寫入操作以8 個(gè)字節(jié)為基礎(chǔ),并且只能以8 個(gè)字節(jié)對齊的方式進(jìn)行寫入;在擦除時(shí),最小單位為扇區(qū),每個(gè)扇區(qū)大小為256 字節(jié),不能擦除一個(gè)字節(jié)或者小于一個(gè)扇區(qū)的內(nèi)容[9]。
為了實(shí)現(xiàn)程序在Bootloader 模式和用戶程序模式之間轉(zhuǎn)換,Bootloader 程序內(nèi)需重建復(fù)位中斷向量。對于恩智浦MC9S12XEP100 單片機(jī)來說,在芯片末尾地址的這兩個(gè)字節(jié)的內(nèi)存空間處存放的是用戶程序的復(fù)位中斷向量的地址[10-13]。在沒有Bootloader 的程序內(nèi),上電復(fù)位后,芯片會(huì)從該地址處讀取用戶程序的首地址開始運(yùn)行;在有Bootloader 的程序內(nèi),該地址里存放的不再是用戶程序的首地址,而是引導(dǎo)加載程序的首地址,為了防止與Bootloader 中斷地址產(chǎn)生沖突,用戶程序的復(fù)位向量被放在了單獨(dú)開辟的一塊內(nèi)存中,使單片機(jī)上電復(fù)位后先判斷引導(dǎo)加載程序。
企業(yè)存在對HSE管理體系運(yùn)行監(jiān)督不嚴(yán)格、不系統(tǒng)、不全面的實(shí)際問題,難以實(shí)現(xiàn)對HSE管理體系運(yùn)行的有效調(diào)控,出現(xiàn)了監(jiān)督缺位、工作缺失等一系列問題。代表性的問題有:一是,企業(yè)沒有對HSE管理體系運(yùn)行的重點(diǎn)監(jiān)督體系,出現(xiàn)對HSE管理體系實(shí)際運(yùn)行的控制不良、監(jiān)督不系統(tǒng)等問題,特別是對于HSE管理體系運(yùn)行的細(xì)節(jié)難以達(dá)到全面控制,被表面性的日常工作所困擾而造成監(jiān)督效果和功能不良等問題。二是,監(jiān)督體系中沒有將預(yù)防思想作為監(jiān)督工作的第一原則,“以罰代管”、“以查代管”的問題頻繁出現(xiàn),難以確保HSE管理體系全面、系統(tǒng)地運(yùn)行,產(chǎn)生了HSE管理體系運(yùn)行的危害性和危險(xiǎn)性。
復(fù)雜的Bootloader 程序自身會(huì)用到定時(shí)器中斷、CAN 的接收和發(fā)送中斷等,因而Bootloader 程序內(nèi)需要重建中斷向量表,與用戶程序的中斷進(jìn)行區(qū)分,使兩個(gè)程序的中斷不至于產(chǎn)生沖突,即重新設(shè)置中斷向量表基址寄存器(IVBR)。本文設(shè)計(jì)的Bootloader程序采用在線編程的方法改變中斷函數(shù)的入口地址,將用戶程序中斷函數(shù)的入口地址改為所分扇區(qū)首地址,使用戶程序與Bootloader程序使用不同F(xiàn)LASH 區(qū)間來定義中斷向量表,使兩段程序的中斷互不影響[14,15]。這種方式雖然要在Bootloader 程序內(nèi)對用戶程序的中斷向量表進(jìn)行搬移,但是不需要更改用戶程序內(nèi)中斷向量表的存儲(chǔ)區(qū)間,使用戶程序和Bootloader 程序的中斷可以完美的融合。
表1:Bootloader 上位機(jī)協(xié)議
圖7:芯片內(nèi)存數(shù)據(jù)
Bootloader 和用戶程序融合的過程如圖3所示。
圖3 中,程序融合需要將用戶程序作為基程序,程序融合過程中,會(huì)屏蔽用戶程序中的復(fù)位中斷向量,同時(shí)定位復(fù)位向量到用戶程序中的內(nèi)存地址的末尾,使芯片上電復(fù)位后進(jìn)入模式選擇狀態(tài),同時(shí)用戶程序的鏈接庫文件需要鏈接Bootloader 程序的S19 文件,并且要解除FLASH 保護(hù),以便對芯片的FLASH 進(jìn)行編程,最后通過BDM 下載融合程序。
Bootloader 上位機(jī)主要作用是將編譯生成的S19 文件以數(shù)據(jù)形式發(fā)送給TCU,實(shí)現(xiàn)變速箱控制器對內(nèi)存的擦除和寫入的功能。
Bootloader 是基于通信方式開發(fā)實(shí)現(xiàn)的,因而需要有一套專屬的數(shù)據(jù)傳輸協(xié)議。上位機(jī)與變速箱控制器的通訊協(xié)議見表1,主要功能指令有:開始Flash 擦除,F(xiàn)lash 擦除結(jié)束、開始Flash 編程、Flash 編程結(jié)束等。
報(bào)文ID 參考1939 協(xié)議進(jìn)行自定義開發(fā),0x1000EFD0 和0x1000EFD1 是上位機(jī)發(fā)送的命令指令和S19 數(shù)據(jù),0x1000EFD2是TCU 反饋給上位機(jī)的刷寫狀態(tài),使用戶可以直觀了解程序升級過程。
上位機(jī)升級程序界面如圖4所示。上位機(jī)與控制器連接成功后,在升級程序過程中,通過左面的人機(jī)界面的Message 窗口,可以實(shí)時(shí)更新當(dāng)前上位機(jī)與控制器的運(yùn)行狀態(tài);通過右面人機(jī)界面的Data窗口,可以觀測當(dāng)前上位機(jī)給控制器發(fā)送的程序數(shù)據(jù);期間出現(xiàn)故障時(shí),也可以方便的定位問題原因。
為驗(yàn)證設(shè)計(jì)的Bootloader 的可靠性,搭建Bootloader 硬件平臺(tái),如圖5所示,該平臺(tái)以某變速箱控制系統(tǒng)硬件為基礎(chǔ),主芯片為MC9S12XEP100。將融合后程序通過BDM 寫入變速箱控制器硬件平臺(tái)內(nèi),上電復(fù)位之后可以正常選擇進(jìn)入用戶程序或是Bootloader程序,無需再進(jìn)行用戶程序升級,實(shí)現(xiàn)通過一次刷寫,該控制器同時(shí)含有Bootloader 程序和用戶程序,圖5 即為用戶程序正常運(yùn)行的界面。
為驗(yàn)證融合了用戶程序的Bootloader 在程序升級方面的功能可靠性,單獨(dú)選取一版用戶程序,通過該Bootloader 下載進(jìn)單片機(jī)內(nèi)。編譯后用戶程序的S19 文件如圖6所示,Bootloader 程序下載到控制器芯片內(nèi)存中的數(shù)據(jù)如圖7所示。通過將圖6 和圖7 內(nèi)存中的數(shù)據(jù)進(jìn)行對比,二者數(shù)據(jù)完全一致。
本文基于Bootloader 程序和用戶程序的融合設(shè)計(jì)了Bootloader 上位機(jī)和變速箱控制器端Bootloader,并搭建了基于MC9S12XEP100 的變速箱控制器硬件平臺(tái)。通過實(shí)測試驗(yàn)進(jìn)行了變速箱控制器融合程序功能驗(yàn)證,結(jié)果表明所設(shè)計(jì)的融合的Bootloader 能夠快速、準(zhǔn)確、方便地實(shí)現(xiàn)變速箱控制器應(yīng)用程序的在線升級,可以顯著提高軟件開發(fā)效率,為變速箱控制器應(yīng)用程序的數(shù)據(jù)更新提供有效參考。