當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]摘 要: 介紹了Boot loader(引導(dǎo)加載)技術(shù)的原理, 著重討論了M icroch ip公司的DSPIC30F系列數(shù)字信號(hào)控制器( DSC)的Boo tloader程序的編寫及F lash存儲(chǔ)器運(yùn)行時(shí)自編程( RTSP)技術(shù)的原理, 并實(shí)現(xiàn)了電子皮帶秤控制儀

摘  要: 介紹了Boot loader(引導(dǎo)加載)技術(shù)的原理, 著重討論了M icroch ip公司的DSPIC30F系列數(shù)字信號(hào)控制器( DSC)的Boo tloader程序的編寫及F lash存儲(chǔ)器運(yùn)行時(shí)自編程( RTSP)技術(shù)的原理, 并實(shí)現(xiàn)了電子皮帶秤控制儀表程序的在線自編程升級(jí)。

1  引  言

當(dāng)前, 隨著MCU、DSP等高性能集成電路的廣泛應(yīng)用, 大部分電子設(shè)備需要對(duì)用戶程序進(jìn)行升級(jí)以達(dá)到完善、豐富系統(tǒng)功能的目的。但目前對(duì)這類設(shè)備的程序升級(jí)大多采用開(kāi)發(fā)人員攜帶編程工具到現(xiàn)場(chǎng)進(jìn)行操作的方式, 這樣做給系統(tǒng)的統(tǒng)一管理和維護(hù)造成很大困難。針對(duì)這一問(wèn)題提出一種基于dsPIC30系列芯片應(yīng)用Bootloader技術(shù)實(shí)現(xiàn)用戶程序在線自編程升級(jí)的方法, 從而達(dá)到了用戶程序升級(jí)時(shí)無(wú)須下載器, 操作簡(jiǎn)單、快捷的目的。

2  Boo tloader的原理

Bootloader相當(dāng)于PC主板上的B IOS, 是最底層的引導(dǎo)軟件。Boo tloader是一段固化在嵌入式系統(tǒng)目標(biāo)系統(tǒng)ROM或者是諸如FLASH 等非易失存儲(chǔ)器中的一段程序, 它的主要作用就是引導(dǎo)操作系統(tǒng)或用戶程序的運(yùn)行。系統(tǒng)上電后Boo tloader將首先接管系統(tǒng), 在進(jìn)行一些最基本的上電自檢后, Bootloader將對(duì)系統(tǒng)的硬件進(jìn)行初始化, 為引導(dǎo)操作系統(tǒng)作好準(zhǔn)備, 接下來(lái), Bootloader需要將操作系統(tǒng)的代碼拷貝到主存儲(chǔ)器的特定地址, 最后Boot loader將控制權(quán)交給操作系統(tǒng), 由操作系統(tǒng)完成接下來(lái)的工作;在不含操作系統(tǒng)的系統(tǒng)中, Bootloader可以完成這樣一些操作: 分配程序存儲(chǔ)空間; 重新映射復(fù)位和中斷向量; 將程序代碼從片外加載到程序區(qū), 執(zhí)行時(shí)再將代碼加載到RAM 中以便快速執(zhí)行; 檢測(cè)是否需要下載新的用戶代碼, 若需要?jiǎng)t通過(guò)某種通信方式接收新代碼并將其寫入指定程序存儲(chǔ)空間中, 若不需要, 則執(zhí)行原有用戶代碼。

在嵌入式領(lǐng)域中, Bootloader是嚴(yán)重地依賴于硬件的, 因此想要建立一個(gè)通用的Bootloader 幾乎是不可能的。以dsPIC30F系列數(shù)字信號(hào)控制器為例,深入討論在該系列芯片中編寫B(tài)oot loader程序的方法, 這種方法同樣適用于一些其它類型的微控制器。

3  Bootloader的操作模式

大多數(shù)Bootloader 都包含兩種不同的操作模式: “啟動(dòng)加載 ”模式和“下載”模式, 這兩種模式的定義如下:

啟動(dòng)加載( Boot Load ing)模式: 這種模式也稱為  自主 ( AutONomous)模式。也即Bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將用戶程序加載到RAM 中運(yùn)行, 整個(gè)過(guò)程并沒(méi)有用戶的介入。這種模式是Boo tloader的正常工作模式。

下載( Dow nloading) 模式: 在這種模式下, 目標(biāo)機(jī)上的Bootloader將通過(guò)串口等通信手段從PC 機(jī)下載文件, 比如: 下載內(nèi)核映像和根文件系統(tǒng)映像等。從PC機(jī)下載的文件通常首先被Bootloader保存到目標(biāo)機(jī)的RAM中, 然后再被Bootloader寫到目標(biāo)機(jī)上的FLASH類固態(tài)存儲(chǔ)設(shè)備中。Boo tloader的這種模式通常在系統(tǒng)程序更新時(shí)使用。工作于這種模式下的Boot loader通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的接口。

4  dsPIC30F系列芯片簡(jiǎn)介

M icroch ip公司推出的dsPIC30F 系列數(shù)字信號(hào)控制器( DSC)可以靈活地運(yùn)行一個(gè)常駐FLASH 的引導(dǎo)加載程序( Bootloader Prog ram )實(shí)現(xiàn)對(duì)用戶程序的在線自編程升級(jí)??梢允褂萌魏慰捎玫臄?shù)據(jù)接口和相關(guān)協(xié)議讀取代碼, 然后將代碼寫入(編程)到FLASH 存儲(chǔ)器中, 從而實(shí)現(xiàn)電子設(shè)備在線自編程升級(jí)程序代碼的目的。dsPIC30F系列數(shù)字信號(hào)控制器的Boo tloader程序需要自行編寫, 并且可以通過(guò)SPI、UART等各種數(shù)據(jù)接口來(lái)接收PC 機(jī)發(fā)送的數(shù)據(jù)。顯然, 采用了串口( RS232 方式) 與PC 機(jī)進(jìn)行通信最為方便。

5  dsPIC30F系列芯片F(xiàn)LASH 存儲(chǔ)器的運(yùn)行時(shí)自編程( RTSP)

dsPIC30F系列數(shù)字信號(hào)控制器內(nèi)部包含了用于執(zhí)行用戶代碼的FLASH 存儲(chǔ)器。用戶可以使用兩種方法對(duì)此存儲(chǔ)器編程:a運(yùn)行時(shí)自編程( Run-T ime Self Programm ing, RTSP ); b 在線串行編程( In- C ircu it Serial Programm ing, ICSP)。其中RTSP方式是由用戶軟件執(zhí)行的, 允許用戶代碼修改閃存程序存儲(chǔ)器的內(nèi)容, 是實(shí)現(xiàn)用戶程序在線自編程升級(jí)的基礎(chǔ)。

dsPIC30F系列芯片對(duì)FLASH 存儲(chǔ)器的運(yùn)行時(shí)自編程是通過(guò)表指令TBLWT、TBLRD 和NVM 寄存器實(shí)現(xiàn)的。FLASH 存儲(chǔ)器是由行和板構(gòu)成的。每行由32 條指令( 96 字節(jié)) 組成。通常, 每個(gè)板由128行組成( 4K # 24條指令)。RTSP可以讓用戶每次擦除一行( 32條指令)以及一次編程32條指令。

程序存儲(chǔ)器的每個(gè)板包括能夠保存32條編程數(shù)據(jù)指令的寫鎖存器。這些鎖存器不是存儲(chǔ)器映射的。

用戶訪問(wèn)寫鎖存器的惟一方法是使用寫表指令。在實(shí)際編程操作前, 必須先用寫表指令將待寫數(shù)據(jù)裝入板寫鎖存器。待編程入板的數(shù)據(jù)通常是按以下順序裝入寫鎖存器的: 指令0, 指令1, 依此類推。所有的32位寫鎖存器必須在編程操作期間寫入, 以確保覆蓋保存在鎖存器中的舊數(shù)據(jù)。

RTSP編程的基本步驟是先建立一個(gè)表指針, 然后執(zhí)行一系列TBLWT 指令以裝入寫鎖存器。編程是通過(guò)將NVMCON 寄存器的特殊位置1 進(jìn)行的。

需要將32條TBLWTL和32 條TBLWTH 指令裝入四條指令。如果需要對(duì)多個(gè)不連續(xù)的程序存儲(chǔ)器區(qū)進(jìn)行編程, 應(yīng)該為每個(gè)區(qū)域和下一個(gè)要寫入的一組寫鎖存器修改表指針。

6  Bootloader程序編寫

6. 1  dsPIC30F系列器件存儲(chǔ)空間的分配

在編寫B(tài)ootloader程序之前, 我們必須首先了解芯片的程序存儲(chǔ)空間分配情況。dsPIC30F 系列芯片包含144K字節(jié)的FLASH 程序存儲(chǔ)空間, 尋址范圍為0x0000100~ 0x017FFE, 圖1 ( a)為dsPIC30F系列芯片的程序存儲(chǔ)器地址映射情況。

0x00~ 0x03地址單元是復(fù)位向量; 0x04~ 0xFE地址單元是中斷向量表和后備中斷向量表( IVT /A IVT) ; 在其后的0x100~ 0x17FFE單元為48K指令字的用戶閃存程序存儲(chǔ)器。原則上, Boot loader程序可以放在整個(gè)程序空間中的任何位置, 但是為了簡(jiǎn)單方便、具有通用性和盡量減少對(duì)用戶程序的影響,本設(shè)計(jì)使用了0x100 ~ 0x4FE 的一段程序存儲(chǔ)器( Boo tloader程序與用戶程序的代碼總量不能超過(guò)144KB)。Bootloader程序后面便可存放用戶程序,但是受到FLASH 存儲(chǔ)器頁(yè)的限制, 用戶程序不可緊跟在Boo tloader程序之后, 它必須從下一個(gè)FLASH存儲(chǔ)器頁(yè)的開(kāi)始處(如0x500) 存放, 如圖1 ( b) 所示。


圖1 程序存儲(chǔ)器地址映射

6. 2  . hex文件的解析

當(dāng)dsPIC30F系列數(shù)字信號(hào)控制器的程序編寫完成之后, 利用開(kāi)發(fā)平臺(tái)MPLAB IDE編譯后會(huì)生成一個(gè). hex 文件, 將這個(gè). hex 文件燒寫到FLASH 存儲(chǔ)器中系統(tǒng)才能運(yùn)行, 因此要完成的任務(wù)就是將這個(gè). hex 文件下載到目標(biāo)系統(tǒng)中。如果直接從PC 端將. hex 文件中的全部?jī)?nèi)容發(fā)送給下位機(jī), 就需要Boot loader程序來(lái)解析提取要寫入存儲(chǔ)器的數(shù)據(jù), 這樣做勢(shì)必加大Boo tloader程序代碼長(zhǎng)度, 也會(huì)影響整個(gè)Boo tloader過(guò)程的時(shí)間, 因此本設(shè)計(jì)采用在PC機(jī)端程序解析. hex 文件的方法。為了正確地將這個(gè). hex文件下載到下位機(jī)中必須對(duì). hex 文件有一個(gè)比較深入的了解。. hex文件的格式如下:

: BBAAAATTHHHH……HHCC

BB: 二位16 進(jìn)制值, 表示該幀數(shù)據(jù)的字節(jié)長(zhǎng)度。

AAAA: 四位16 進(jìn)制值, 表示隨后數(shù)據(jù)的起始地址, 該地址為字節(jié)地址。

TT: 二位16進(jìn)制值, 表示數(shù)據(jù)幀類型(   00 : 數(shù)據(jù)幀;   01 : 結(jié)束幀;   04 : 擴(kuò)展地址幀)。

HH: 16進(jìn)制值, 表示具體的數(shù)據(jù), 即具體程序代碼。

CC: 二位16進(jìn)制的校驗(yàn)碼, 使該幀全部以二位16進(jìn)制相加后總和為0。

一個(gè). hex 文件可分為5部分代碼: 復(fù)位向量代碼、程序代碼、中斷向量代碼、后備中斷向量代碼和結(jié)束代碼, 除結(jié)束代碼僅含結(jié)束幀外, 其余各部分代碼都由擴(kuò)展地址幀和數(shù)據(jù)幀組成, 其中僅數(shù)據(jù)幀存儲(chǔ)了用戶程序信息。因此PC 機(jī)端程序僅保留擴(kuò)展地址幀和數(shù)據(jù)幀的內(nèi)容并按順序進(jìn)行發(fā)送即可, 下位機(jī)接收數(shù)據(jù)后根據(jù)擴(kuò)展地址幀可以直接將用戶代碼寫入FLASH 存儲(chǔ)器相應(yīng)的地址單元中, 從而提高了整個(gè)Bootloader的效率。

6. 3  dsPIC30F器件. g ld文件的修改

Bootloader程序運(yùn)行時(shí), 需要讀出用戶程序中預(yù)先設(shè)置好的一個(gè)延時(shí)值(本設(shè)計(jì)為1s) 作為下位機(jī)等待PC 機(jī)發(fā)送升級(jí)命令的周期, 還要指定用戶程序起始地址以便Boot loader程序執(zhí)行完畢后可以繼續(xù)執(zhí)行用戶程序。為了滿足這兩個(gè)要求, 必須修改用戶程序的鏈接文件( . g ld文件), 以指定用戶程序的起始地址和Bootloader 程序的延時(shí)周期。對(duì)于. g ld文件的具體修改如圖2所示。


圖2  . g ld文件的修改。

6. 4  Boot loader程序流程:

系統(tǒng)上電復(fù)位后, 在完成各種初始化配置后首先判斷0x500地址單元中值是否為0xFF, 如果是,則說(shuō)明系統(tǒng)從未下載過(guò)用戶程序, 系統(tǒng)會(huì)一直運(yùn)行Boot loader程序等待PC 機(jī)發(fā)送下載命令; 如果0x500中的值不是0xFF, 則說(shuō)明系統(tǒng)中已經(jīng)下載過(guò)用戶程序了, 這時(shí)候根據(jù)0x500中的值來(lái)設(shè)置定時(shí)器T imer2的初值并開(kāi)始計(jì)時(shí), 如果UART2 在指定的自舉周期內(nèi)未接收到PC 機(jī)發(fā)來(lái)的下載命令(說(shuō)明系統(tǒng)不需要下載程序), 系統(tǒng)會(huì)自動(dòng)跳出Boo tloader程序而去運(yùn)行已有的用戶代碼, 如果UART2在自舉周期內(nèi)接收到了下載命令, Boo tloader程序會(huì)進(jìn)入循環(huán)狀態(tài)等待PC機(jī)發(fā)送數(shù)據(jù)。如圖3所示。


圖3  程序流程圖。

如前文所述, PC 機(jī)發(fā)送的數(shù)據(jù)是從. hex 文件中提取的, PC機(jī)首先發(fā)送擴(kuò)展地址部分, 下位機(jī)接收保存后會(huì)繼續(xù)等待接收32個(gè)指令字( 96字節(jié))并保存到RAM 中, 然后根據(jù)接收到的地址擦除FLASH 存儲(chǔ)器中的1行, 擦除FLASH 是通過(guò)調(diào)用匯編函數(shù)E raseMem來(lái)進(jìn)行的, 函數(shù)原型如下:

mov# 0x4041, NVMCON ; 使NVMCON 寄存器為擦除FLASH模式

mov # 0x55, W 0

movW0, NVMKEY

mov # 0xAA, W0

movW 0, NVMKEY ; 將0x55、0xAA 寫入密鑰寄存器

bsetNVMCON, #WR ; 開(kāi)始擦除

nop

nop

return

擦除FLASH存儲(chǔ)器的一行后需要把接收到的32個(gè)指令字寫入到FLASH 存儲(chǔ)器寫鎖存器中, 這一過(guò)程可以通過(guò)函數(shù)W riteLatch 實(shí)現(xiàn), 函數(shù)原型如下:

movW0, TBLPAG ; 寫表寄存器

tb lw tlW3, [W1]

tb lw thW2, [W1] ; 寫入鎖存器

return

這一步完成之后就可以將接收到的32個(gè)指令字寫入FLASH 存儲(chǔ)器了, 其方法與擦除FLASH 類似, 寫完一行后向PC 機(jī)發(fā)送應(yīng)答。待FLASH 存儲(chǔ)器全部寫完之后, PC 機(jī)會(huì)發(fā)送表示結(jié)束下載的命令, 下位機(jī)接收后退出Boo tloader程序, 進(jìn)入新的用戶程序繼續(xù)運(yùn)行, 從而完成整個(gè)在線自編程過(guò)程。

7  結(jié)束語(yǔ)

dsPIC30F 系列數(shù)字信號(hào)控制器應(yīng)用Boot loader實(shí)現(xiàn)用戶程序在線自編程升級(jí)的方法具有很高的應(yīng)用價(jià)值, 尤其是應(yīng)用于自主開(kāi)發(fā)的工業(yè)自動(dòng)化儀表時(shí)給用戶程序的現(xiàn)場(chǎng)升級(jí)帶來(lái)了極大的方便。該方法已經(jīng)成功用于電子皮帶秤控制儀表系統(tǒng)中, 達(dá)到了提高系統(tǒng)軟件升級(jí)的更換效率、降低升級(jí)費(fèi)用、提高產(chǎn)品制造商對(duì)用戶的服務(wù)質(zhì)量滿意度的目的。方法雖然僅以dsPIC30F系列芯片為例, 但對(duì)于M icrochip公司生產(chǎn)的其它系列芯片只要略加修改同樣適用。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉