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