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