張正本,翟海慶
(河南機(jī)電高等??茖W(xué)校計(jì)算機(jī)科學(xué)與技術(shù)系,河南 新鄉(xiāng) 453000)
32位的ARM處理器具有性能高、功耗低等特征,基于32位ARM處理器的嵌入式系統(tǒng)已深入到社會(huì)生活的各個(gè)領(lǐng)域。MC9328MX1是Motorola公司的產(chǎn)品。其中嵌入了先進(jìn)的低功耗ARM920T核,運(yùn)行速度可達(dá) 200MHz[1]。UCOS -II是一款源代碼開放的嵌入式實(shí)時(shí)操作系統(tǒng),其最大的特點(diǎn)是源代碼開放,并具有很好的可移植性。BOOTLOADER程序與處理器的體系結(jié)構(gòu)和電路板的硬件設(shè)計(jì)密切,很難設(shè)計(jì)一個(gè)完全通用的BOOTLOADER程序直接應(yīng)用于所有的嵌入式系統(tǒng)中,因而BOOTLOADER設(shè)計(jì)是嵌入式系統(tǒng)設(shè)計(jì)中的一個(gè)關(guān)鍵問題。本文分析BOOTLOADER程序的功能和主要任務(wù),針對(duì)一個(gè)特定的處理器MC9328MX1,設(shè)計(jì)了一個(gè)BOOTLOADER程序,并應(yīng)用于家庭智能控制系統(tǒng)中,取得了良好的效果。
簡單地說,BOOTLOADER就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境[2]。一般情況下,BOOTLOADER程序有兩種不同的操作模式,自舉模式和內(nèi)核啟動(dòng)裝載模式。
自舉模式的主要功能是通過串行口或網(wǎng)絡(luò)接口把映像文件下載到嵌入式系統(tǒng)中,并存放在嵌入式系統(tǒng)的非易失性存儲(chǔ)器,如Flash中。映像文件包括BOOTLOADER本身的映像、操作系統(tǒng)映像、應(yīng)用程序映像等。
內(nèi)核啟動(dòng)裝載模式的主要功能是將嵌入式系統(tǒng)非易失性存儲(chǔ)器(如Flash)中的映像文件裝載到RAM運(yùn)行。若是多階段的 BOOTLOADER程序,需將BOOTLOADER本身的映像也裝載到RAM,否則只需要將操作系統(tǒng)和應(yīng)用程序映像裝載到RAM中運(yùn)行即可。
自舉模式主要用于產(chǎn)品開發(fā)和系統(tǒng)升級(jí)的過程中,啟動(dòng)時(shí)需要人為的干預(yù);內(nèi)核啟動(dòng)裝載模式主要用于產(chǎn)品交付使用時(shí),啟動(dòng)時(shí)不需要人的干預(yù)。在兩種操作模式之間切換可以采用多種方法,比如可使用跳線,接地是運(yùn)行自舉模式,接高電平時(shí)運(yùn)行內(nèi)核啟動(dòng)裝載模式。本文中使用系統(tǒng)中的一個(gè)按鍵,上電時(shí)延時(shí)兩秒,如果按下按鍵,則運(yùn)行自舉模式;如果該按鍵沒有按下,則運(yùn)行內(nèi)核啟動(dòng)裝載模式。
MC9328MX1芯片內(nèi)部集成了SDRAM控制器、UART、看門狗定時(shí)器、定時(shí)/計(jì)數(shù)器LCD控制器、USB控制器等多種片內(nèi)外設(shè),應(yīng)用非常方便。MC9328MX1是在個(gè)人便攜式產(chǎn)品市場(chǎng)上領(lǐng)先的龍珠微處理器家族的第六代產(chǎn)品;具有很高的集成度;為極低功耗系統(tǒng)設(shè)計(jì)提供了優(yōu)越的性能;專門對(duì)多媒體應(yīng)用進(jìn)行了優(yōu)化;專門對(duì)具有高速接口的藍(lán)牙應(yīng)用進(jìn)行了優(yōu)化;支持廣泛的應(yīng)用,如PDA設(shè)計(jì)、智能電話和下一代的無線通信[3]。
MC9328MX1第一個(gè)1MB系統(tǒng)地址空間設(shè)計(jì)為雙映射映像,由于MC9328MX1啟動(dòng)時(shí)從地址0x0開始執(zhí)行,因而第一個(gè)1MB的地址空間也被稱為引導(dǎo)ROM。上電時(shí),若 BOOT[3:0]引腳配置為 0000,則加電自舉ROM映射到第一個(gè)1MB的空間,成為引導(dǎo)ROM;若 BOOT[3:0]引腳配置為0110,則片選引腳/CS0引腳所選擇的地址空間成為引導(dǎo)ROM。
加電自舉ROM中存放的是加電自舉程序,該程序在芯片出廠時(shí)就已經(jīng)寫好,并且不能被修改。加電自舉程序配置UART1和UART2,將控制器初始化為一個(gè)目標(biāo)系統(tǒng),此時(shí)系統(tǒng)為加電自舉模式,可下載程序或數(shù)據(jù)到目標(biāo)系統(tǒng)的RAM中。在程序下載完畢后可以運(yùn)行,可對(duì)程序分析提供簡單的調(diào)試環(huán)境[1]。
加電自舉程序僅能通過UART接收加電自舉記錄,完成將程序和數(shù)據(jù)下載到目標(biāo)系統(tǒng)的功能。加電自舉記錄格式如表1所示。
?
加電自舉記錄中前四個(gè)字節(jié)為地址,指明所要操作(讀、寫或運(yùn)行)的目標(biāo)系統(tǒng)RAM地址;計(jì)數(shù)/模式字節(jié)規(guī)定了加電自舉記錄的功能;最后是N個(gè)字節(jié)的數(shù)據(jù)。計(jì)數(shù)/模式字節(jié)中數(shù)據(jù)計(jì)數(shù)為0有其特殊的用途:表示從指定的地址開始執(zhí)行程序。此時(shí),計(jì)數(shù)/模式字節(jié)后不能再有數(shù)據(jù)。
使用加電自舉程序下載數(shù)據(jù)或程序,代碼必須轉(zhuǎn)化為包括加電自舉記錄的文本文件。作者編寫了一個(gè)程序ConvertBinToBL,可將編譯好的ARM可執(zhí)行文件(BIN格式)轉(zhuǎn)化為包含加電自舉記錄的文本文件,需要的讀者可電子郵件(ltjszhq@163.com)向作者索取。
家庭智能控制終端硬件包括CPU、電源及復(fù)位電路、晶振、Flash存儲(chǔ)器、SDRAM存儲(chǔ)器、串行口、網(wǎng)絡(luò)接口、家電控制(I/O口)、鍵盤、LCD顯示器等電路模塊。其中 CPU采用 MC9328MX1,串行口采用MAX3221擴(kuò)展(實(shí)現(xiàn)電平轉(zhuǎn)換的功能),F(xiàn)lash存儲(chǔ)器使用兩片28F320J3A(每個(gè)芯片提供16位數(shù)據(jù)),SDRAM存儲(chǔ)器采用兩片K4S281632D芯片擴(kuò)展[2]。整個(gè)系統(tǒng)方框圖如圖1所示。
其中28F320J3A片選接CPU引腳/CS0,其地址空間范圍是 0x10000000~0x107FFFFF,共 8MB。K4S281632D片選接CPU引腳/CS2,其地址空間范圍是0x08000000~0x09FFFFFF,共 32MB。另外,CPU內(nèi)部還包含128KB的 SRAM,其地址空間范圍是0x00300000~0x0031FFFF。在進(jìn)行BOOTLOADER設(shè)計(jì)時(shí),需要進(jìn)行存儲(chǔ)器分配,并將映像文件下載到正確的地址空間中。
本文所設(shè)計(jì)的BOOTLOADER程序工作于內(nèi)核啟動(dòng)裝載模式時(shí),會(huì)將操作系統(tǒng)內(nèi)核映像和應(yīng)用程序映像裝載到RAM中,并跳轉(zhuǎn)到操作系統(tǒng)入口處執(zhí)行。若BOOTLOADER程序工作于自舉模式,則將自身映像裝載到RAM并運(yùn)行,根據(jù)串口發(fā)送過來的指令下載操作系統(tǒng)內(nèi)核映像、應(yīng)用程序映像或自身映像到RAM,然后將之寫入到 Flash存儲(chǔ)器中。另外,SDRAM與CPU連接需要有SDRAM控制器(已經(jīng)集成到MC9328MX1內(nèi)部)進(jìn)行控制,經(jīng)過初始化才能夠正確使用[3]。SDRAM初始化程序代碼如下:
BOOTLOADER程序總流程圖如圖2所示。
圖2 BOOTLOADER程序總流程圖
第一次下載BOOTLOADER程序時(shí),需要先將其轉(zhuǎn)化為加電自舉文件,然后使用PC機(jī)上的超級(jí)終端程序傳送到目標(biāo)系統(tǒng)中,再次下載BOOTLOADER程序時(shí),可先運(yùn)行 BOOTLOADER,將自身裝載到 RAM中運(yùn)行,將新的BOOTLOADER下載到RAM中并寫入Flash。
本文基于高性能嵌入式微處理器MC9328MX1,擴(kuò)展SDRAM和Flash存儲(chǔ)器以及其他外圍電路,設(shè)計(jì)了一個(gè)家庭智能控制終端。介紹了BOOTLOADER程序的概念和功能,設(shè)計(jì)了一個(gè)BOOTLOADER程序。該BOOTLOADER程序能將用戶應(yīng)用程序下載到Flash存儲(chǔ)器中并啟動(dòng)運(yùn)行,可提高程序下載和啟動(dòng)運(yùn)行的速度,當(dāng)系統(tǒng)出現(xiàn)故障時(shí),還可以從網(wǎng)絡(luò)上更新應(yīng)用程序,提高了系統(tǒng)的可靠性。本文將BOOTLOADER程序應(yīng)用于家庭智能控制終端系統(tǒng)中,取得了令人滿意的使用效果。
[1]王祖林,龍翔,鄭紅.新一代嵌入式微處理器龍i.MX結(jié)構(gòu)及應(yīng)用基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2004.
[2]朱博,孫運(yùn)強(qiáng).嵌入式系統(tǒng)的U-Boot移植分析[J].中國測(cè)試技術(shù),2008,(02):57-60.
[3]MC9328MX1 Reference Manual[Z].Motorola,Inc.2003.