Bootloader技術(shù)在數(shù)字信號控制器中的應(yīng)用
6 Bootloader程序編寫
6. 1 dsPIC30F系列器件存儲空間的分配
在編寫Bootloader程序之前, 我們必須首先了解芯片的程序存儲空間分配情況。dsPIC30F 系列芯片包含144K字節(jié)的FLASH 程序存儲空間, 尋址范圍為0x0000100~ 0x017FFE, 圖1 ( a)為dsPIC30F系列芯片的程序存儲器地址映射情況。
0x00~ 0x03地址單元是復(fù)位向量; 0x04~ 0xFE地址單元是中斷向量表和后備中斷向量表( IVT /A IVT) ; 在其后的0x100~ 0x17FFE單元為48K指令字的用戶閃存程序存儲器。原則上, Boot loader程序可以放在整個程序空間中的任何位置, 但是為了簡單方便、具有通用性和盡量減少對用戶程序的影響,本設(shè)計使用了0x100 ~ 0x4FE 的一段程序存儲器( Boo tloader程序與用戶程序的代碼總量不能超過144KB)。Bootloader程序后面便可存放用戶程序,但是受到FLASH 存儲器頁的限制, 用戶程序不可緊跟在Boo tloader程序之后, 它必須從下一個FLASH存儲器頁的開始處(如0x500) 存放, 如圖1 ( b) 所示。
圖1 程序存儲器地址映射
6. 2 . hex文件的解析
當(dāng)dsPIC30F系列數(shù)字信號控制器的程序編寫完成之后, 利用開發(fā)平臺MPLAB IDE編譯后會生成一個. hex 文件, 將這個. hex 文件燒寫到FLASH 存儲器中系統(tǒng)才能運行, 因此要完成的任務(wù)就是將這個. hex 文件下載到目標(biāo)系統(tǒng)中。如果直接從PC 端將. hex 文件中的全部內(nèi)容發(fā)送給下位機, 就需要Boot loader程序來解析提取要寫入存儲器的數(shù)據(jù), 這樣做勢必加大Boo tloader程序代碼長度, 也會影響整個Boo tloader過程的時間, 因此本設(shè)計采用在PC機端程序解析. hex 文件的方法。為了正確地將這個. hex文件下載到下位機中必須對. hex 文件有一個比較深入的了解。. hex文件的格式如下:
: BBAAAATTHHHH……HHCC
BB: 二位16 進(jìn)制值, 表示該幀數(shù)據(jù)的字節(jié)長度。
AAAA: 四位16 進(jìn)制值, 表示隨后數(shù)據(jù)的起始地址, 該地址為字節(jié)地址。
TT: 二位16進(jìn)制值, 表示數(shù)據(jù)幀類型( 00 : 數(shù)據(jù)幀; 01 : 結(jié)束幀; 04 : 擴展地址幀)。
HH: 16進(jìn)制值, 表示具體的數(shù)據(jù), 即具體程序代碼。
CC: 二位16進(jìn)制的校驗碼, 使該幀全部以二位16進(jìn)制相加后總和為0。
一個. hex 文件可分為5部分代碼: 復(fù)位向量代碼、程序代碼、中斷向量代碼、后備中斷向量代碼和結(jié)束代碼, 除結(jié)束代碼僅含結(jié)束幀外, 其余各部分代碼都由擴展地址幀和數(shù)據(jù)幀組成, 其中僅數(shù)據(jù)幀存儲了用戶程序信息。因此PC 機端程序僅保留擴展地址幀和數(shù)據(jù)幀的內(nèi)容并按順序進(jìn)行發(fā)送即可, 下位機接收數(shù)據(jù)后根據(jù)擴展地址幀可以直接將用戶代碼寫入FLASH 存儲器相應(yīng)的地址單元中, 從而提高了整個Bootloader的效率。
評論