1. 程式人生 > >【dsPIC33E】Bootloader(二)Microchip的Hex檔案結構介紹

【dsPIC33E】Bootloader(二)Microchip的Hex檔案結構介紹

市面上大多數微控制器的Hex檔案都是基於Intel Hex,而dsPIC33E也不例外,dsPIC33E支援的格式為Intel HEX32(INHX32)。

hex檔案以ascii形式,按照行來記錄資料

每一行從:開始,每至少2個字元表示一組16進位制資料,格式為 :BBAAAATTHHHH....HHHCC
                     BB -- 16進位制,表示此行資料長度位元組數,表示HH的數目
                AAAA

-- 16進位制,表示資料記錄的起始地址,若此行是資料記錄,則表示偏移地址,其它無意義
                     TT -- 16進位制,表示記錄型別,
                                  00-資料記錄(Data Record); 
                                  01-檔案記錄結束(End of File record); 
                                  02-擴充套件段地址記錄(Extend Segment address record);後面所有資料地址+段地址左移4位
                                  04-擴充套件線性地址記錄(Extend Linear address record);後面所有資料地址+線性地址左移16位

             HH...HH -- 16進位制,低位元組/高位元組 結合資料,高位元組在後;注意,若是偏移地址,則都是2位元組,高位元組在前,低位元組在後
                     CC -- 16進位制,校驗碼,除冒號和自身以外的其他位元組資料加起來模除256的餘數的補碼。

例如:10A6B0000000EB00D4FD0700000F78001E007800BA

CC=01+~(10+A6+B0+00+00+00+EB+00+D4+FD+07+00+00+0F+78+00+1E+00+78+00)=BA

需要特別注意的是:

1、Intel hex是針對位元組的,而16位程式計數器不是,需要進行特殊處理,對於dsPIC33E/PIC24E,每個程式儲存器地址都是乘了一個2來獲取位元組地址,例如一個數據存於0x100,而在Hex中為0x200,詳見dsPIC33E/PIC24E程式設計規範(DS70619B)擴充套件A中的介紹。

2、dsPIC33E/PIC24E沒有擴充套件段地址,只有擴充套件線性地址

3、MPLAB X專案屬性中的建設裡,勾選規範會HEX檔案和不勾選生成的HEX檔案是不一樣的,建議規範Hex

4、資料記錄為little-endian,低端在前;而地址記錄為bit-endian,高階在前

5、Hex檔案記錄中,一旦出現段地址或者線性地址,之後所有資料都要加偏移地址,直到出現一個新的段地址或者線性地址,再重新變更偏移地址。

6、對於真實地址,是 線性地址<<16 + 段地址<<4 + 偏移地址

示例:

:020000040108EA           線性偏移地址:0108

:0200000212FFBD           段偏移地址:12FF

:0401000090FFAA5502       資料地址:0100

:00000001FF               檔案結束

真實地址為:0108左移16位,為01080000;12FF左移4位,為00012FF0;資料地址為00000100;加起來為010930F0

最終解析出來(8位微控制器):

地址     資料

010930F0: 90

010930F1: FF

010930F2: AA

010930F3: 55

對於dsPIC33E/PIC24E,16為微控制器,2個16位組成32(有效的是低24位)地址要除以2,所以真實地址解析如下:

00849878: 55AAFF90

0084987A: ......

而2個地址組成一個24位的指令字(32位的高8位為0),低端在前,所以表示實際地址應該如下:

00849878: 00AAFF90

0084987a: xxxxxxxx

 

以下為dsPIC33EP256MC506程式編譯後的Hex檔案解析,工具原始碼下載地址(內含Hex檔案解析及Bootloader上位機):https://download.csdn.net/download/u010875635/10819828


 

本節Hex檔案解析到此結束,下一節將數Bootloader下位機設計。