Bootloader技術(shù)在數(shù)字信號控制器中的應(yīng)用
摘 要: 介紹了Boot loader(引導(dǎo)加載)技術(shù)的原理, 著重討論了M icroch ip公司的DSPIC30F系列數(shù)字信號控制器( DSC)的Boo tloader程序的編寫及F lash存儲器運行時自編程( RTSP)技術(shù)的原理, 并實現(xiàn)了電子皮帶秤控制儀表程序的在線自編程升級。
本文引用地址:http://www.ex-cimer.com/article/170924.htm1 引 言
當(dāng)前, 隨著MCU、DSP等高性能集成電路的廣泛應(yīng)用, 大部分電子設(shè)備需要對用戶程序進(jìn)行升級以達(dá)到完善、豐富系統(tǒng)功能的目的。但目前對這類設(shè)備的程序升級大多采用開發(fā)人員攜帶編程工具到現(xiàn)場進(jìn)行操作的方式, 這樣做給系統(tǒng)的統(tǒng)一管理和維護(hù)造成很大困難。針對這一問題提出一種基于dsPIC30系列芯片應(yīng)用Bootloader技術(shù)實現(xiàn)用戶程序在線自編程升級的方法, 從而達(dá)到了用戶程序升級時無須下載器, 操作簡單、快捷的目的。
2 Boo tloader的原理
Bootloader相當(dāng)于PC主板上的B IOS, 是最底層的引導(dǎo)軟件。Boo tloader是一段固化在嵌入式系統(tǒng)目標(biāo)系統(tǒng)ROM或者是諸如FLASH 等非易失存儲器中的一段程序, 它的主要作用就是引導(dǎo)操作系統(tǒng)或用戶程序的運行。系統(tǒng)上電后Boo tloader將首先接管系統(tǒng), 在進(jìn)行一些最基本的上電自檢后, Bootloader將對系統(tǒng)的硬件進(jìn)行初始化, 為引導(dǎo)操作系統(tǒng)作好準(zhǔn)備, 接下來, Bootloader需要將操作系統(tǒng)的代碼拷貝到主存儲器的特定地址, 最后Boot loader將控制權(quán)交給操作系統(tǒng), 由操作系統(tǒng)完成接下來的工作;在不含操作系統(tǒng)的系統(tǒng)中, Bootloader可以完成這樣一些操作: 分配程序存儲空間; 重新映射復(fù)位和中斷向量; 將程序代碼從片外加載到程序區(qū), 執(zhí)行時再將代碼加載到RAM 中以便快速執(zhí)行; 檢測是否需要下載新的用戶代碼, 若需要則通過某種通信方式接收新代碼并將其寫入指定程序存儲空間中, 若不需要, 則執(zhí)行原有用戶代碼。
在嵌入式領(lǐng)域中, Bootloader是嚴(yán)重地依賴于硬件的, 因此想要建立一個通用的Bootloader 幾乎是不可能的。以dsPIC30F系列數(shù)字信號控制器為例,深入討論在該系列芯片中編寫B(tài)oot loader程序的方法, 這種方法同樣適用于一些其它類型的微控制器。
3 Bootloader的操作模式
大多數(shù)Bootloader 都包含兩種不同的操作模式: “啟動加載 ”模式和“下載”模式, 這兩種模式的定義如下:
啟動加載( Boot Load ing)模式: 這種模式也稱為 自主 ( AutONomous)模式。也即Bootloader從目標(biāo)機上的某個固態(tài)存儲設(shè)備上將用戶程序加載到RAM 中運行, 整個過程并沒有用戶的介入。這種模式是Boo tloader的正常工作模式。
下載( Dow nloading) 模式: 在這種模式下, 目標(biāo)機上的Bootloader將通過串口等通信手段從PC 機下載文件, 比如: 下載內(nèi)核映像和根文件系統(tǒng)映像等。從PC機下載的文件通常首先被Bootloader保存到目標(biāo)機的RAM中, 然后再被Bootloader寫到目標(biāo)機上的FLASH類固態(tài)存儲設(shè)備中。Boo tloader的這種模式通常在系統(tǒng)程序更新時使用。工作于這種模式下的Boot loader通常都會向它的終端用戶提供一個簡單的接口。
4 dsPIC30F系列芯片簡介
M icroch ip公司推出的dsPIC30F 系列數(shù)字信號控制器( DSC)可以靈活地運行一個常駐FLASH 的引導(dǎo)加載程序( Bootloader Prog ram )實現(xiàn)對用戶程序的在線自編程升級??梢允褂萌魏慰捎玫臄?shù)據(jù)接口和相關(guān)協(xié)議讀取代碼, 然后將代碼寫入(編程)到FLASH 存儲器中, 從而實現(xiàn)電子設(shè)備在線自編程升級程序代碼的目的。dsPIC30F系列數(shù)字信號控制器的Boo tloader程序需要自行編寫, 并且可以通過SPI、UART等各種數(shù)據(jù)接口來接收PC 機發(fā)送的數(shù)據(jù)。顯然, 采用了串口( RS232 方式) 與PC 機進(jìn)行通信最為方便。
5 dsPIC30F系列芯片F(xiàn)LASH 存儲器的運行時自編程( RTSP)
dsPIC30F系列數(shù)字信號控制器內(nèi)部包含了用于執(zhí)行用戶代碼的FLASH 存儲器。用戶可以使用兩種方法對此存儲器編程:a運行時自編程( Run-T ime Self Programm ing, RTSP ); b 在線串行編程( In- C ircu it Serial Programm ing, ICSP)。其中RTSP方式是由用戶軟件執(zhí)行的, 允許用戶代碼修改閃存程序存儲器的內(nèi)容, 是實現(xiàn)用戶程序在線自編程升級的基礎(chǔ)。
dsPIC30F系列芯片對FLASH 存儲器的運行時自編程是通過表指令TBLWT、TBLRD 和NVM 寄存器實現(xiàn)的。FLASH 存儲器是由行和板構(gòu)成的。每行由32 條指令( 96 字節(jié)) 組成。通常, 每個板由128行組成( 4K # 24條指令)。RTSP可以讓用戶每次擦除一行( 32條指令)以及一次編程32條指令。
程序存儲器的每個板包括能夠保存32條編程數(shù)據(jù)指令的寫鎖存器。這些鎖存器不是存儲器映射的。
用戶訪問寫鎖存器的惟一方法是使用寫表指令。在實際編程操作前, 必須先用寫表指令將待寫數(shù)據(jù)裝入板寫鎖存器。待編程入板的數(shù)據(jù)通常是按以下順序裝入寫鎖存器的: 指令0, 指令1, 依此類推。所有的32位寫鎖存器必須在編程操作期間寫入, 以確保覆蓋保存在鎖存器中的舊數(shù)據(jù)。
RTSP編程的基本步驟是先建立一個表指針, 然后執(zhí)行一系列TBLWT 指令以裝入寫鎖存器。編程是通過將NVMCON 寄存器的特殊位置1 進(jìn)行的。
需要將32條TBLWTL和32 條TBLWTH 指令裝入四條指令。如果需要對多個不連續(xù)的程序存儲器區(qū)進(jìn)行編程, 應(yīng)該為每個區(qū)域和下一個要寫入的一組寫鎖存器修改表指針。
評論