串口Bootloader相對比較複雜,因此分成兩篇文章來講,第一篇簡單描述Bootloader原理及系統組成,第二篇詳細講解Bootloader涉及到的Flash空間分配、飛思卡爾MC9S12XS128中的S19文件以及單片機程序流程等(重點),上位機程序及調試。

飛思卡爾MCU在系統開發前期,通常採用BDM或P&E等專用的燒寫工具進行代碼升級。然而,在產品調試階段以及設備使用和維護過程中,系統裝機後並不適合使用燒寫工具進行代碼更新。本文在Flash編程基礎上,提出一種基於串口,採用XOnXOff流控制協議來實現Bootloader在線升級的方案,並且在MC9S12XS128單片機上得以實現。設計使用Visual C#開發上位機軟件,通過串口將Code Warrior編譯生成的S19文件傳輸給下位機,下位機Bootloader在接收文件流的同時,解析S19文件內容,並將機器碼寫入Flash,從而完成單片機的串口引導加載程序。

對於嵌入式系統設備的開發和維護,由於控制策略、程序部分參數的不斷調整,不可避免要對用戶程序進行調試、修改和升級。在國內,傳統的開發方式是由開發人員攜帶BDM燒寫工具到現場進行代碼更新。對於已經安裝到設備或者實驗臺架上的MCU,BDM接口並不方便引出,爲了減輕頻繁拆卸MUC所帶來的不便,不使用BDM燒寫工具而直接利用MCU引出的串口與計算機交互來完成代碼升級,毫無疑問更加的簡單直接。對於智能車後期調試而言,還可以使用串口藍牙模塊進行代碼升級。爲了實現這一目的,本文針對MC9S12XS128單片機,基於串口開發了專用的Bootloader上位機軟件和下位機程序,實現了用戶程序的在線升級。實驗結果表明,該Bootloader實現了簡便、穩定的單片機在線升級,提高了開發效率。

Bootloader原理及系統組成

Bootloader又稱引導加載程序,是系統上電或復位後首先運行的一段小程序,用於判斷是執行用戶程序,還是進入引導加載模式。引導加載實現的功能包括初始化硬件設備、建立正確的內存空間映射、初始化棧、全局變量和內存,讀取上位機命令來擦除用戶程序Flash空間或者接收、處理上位機傳輸來的文件流並將Bootloader存儲在Flash中的用來擦除、寫入用戶程序的代碼組件拷貝到RAM中執行從而將用戶程序寫入Flash中。值得注意的一點是,在Flash擦除和寫入期間,無法從Flash中讀取機器碼,因此擦除、寫入組件必須拷貝到RAM中執行[35]。在嵌入式系統中,Bootloader是依賴於硬件開發的,因此不同單片機難以建立一個通用的Bootloader。

本文下位機採用飛思卡爾半導體公司生產的16位單片機MC9S12XS128,它具備兩通道串口及128KB可在線編程Flash。由於現今筆記本電腦已經逐漸棄用串口,而更多的採用便於拔插的USB接口,因此MCU通過RS232-USB轉換芯片CH340T實現RS232串口電平信號到USB電平信號的轉換,筆記本windows7系統自動識別該芯片並建立一個虛擬串口,使用上與傳統串口無異。另外下位機還可以使用串口藍牙模塊,筆記本電腦的藍牙同樣通過配置虛擬串口來實現通訊。上位機軟件使用微軟公司Visual Studio2012,基於C#窗體應用程序開發。上位機運行專用軟件通過USB數據線與下位機進行交互,從而組成了整個Bootloader系統。

飛思卡爾MC9S12X串口Bootloader設計(一)

智能車Bootloader調試系統組成

未完待續

相關文章