hex文件解析
hex(hexadecimal),十六進(jìn)制的英文縮寫,*.hex為后綴的文件為稱之為hex文件,主要用于保
存單片機(jī)固件,可直接下載到單片機(jī)中,故又稱為可執(zhí)行文件
1、 hex文件內(nèi)容
-
打開任意一個(gè)hex文件,內(nèi)容如下(為了內(nèi)容展示方便,已刪除中獎(jiǎng)部分內(nèi)容):
-
整個(gè)文件以行為單位,每行以冒號開頭,內(nèi)容全部為16進(jìn)制碼(以ASCII碼形式顯示), 2個(gè)ASCII碼字符表示1個(gè)Hex字節(jié)。
2、 hex文件解析
hex文件的內(nèi)容都是有規(guī)律的編碼,我們可以對它進(jìn)行解析,以第一行 :020000040800F2 為例:
1) 每一行都以 :(0x3A)開頭
2) 第1個(gè)字節(jié)0x02 ,表示數(shù)據(jù)區(qū)的字節(jié)個(gè)數(shù),用ASCII表示就是4個(gè)ASCII字符
3) 第2、3字節(jié)0x00, 0x00 ,表示偏移地址或無用填0
4) 第4個(gè)字節(jié)0x04, 表示本行記錄的數(shù)據(jù)類型
- ‘00’ Data Record :用來記錄數(shù)據(jù), HEX文件的大部分記錄都是數(shù)據(jù)記錄
- ‘01’ End of File Record :用來標(biāo)識文件結(jié)束,放在文件的最后,標(biāo)識HEX文件的結(jié)尾
- ‘02’ Extended Segment Address Record :用來標(biāo)識擴(kuò)展段地址的記錄
- ‘03’ Start Segment Address Record :段地址 STM32不用
- ‘04’ Extended Linear Address Record :用來標(biāo)識擴(kuò)展線性地址
- ‘05’ Start Linear Address Record :程序啟動(dòng)運(yùn)行的地址
5) 第5、6個(gè)字節(jié)0x08, 0x00即是數(shù)據(jù)
6) 第7個(gè)字節(jié)0xF2是校驗(yàn)字節(jié),校驗(yàn)和的算法為:計(jì)算從0x3A 以后(不包括0x3A)的所有各字節(jié)的和模256的余。即各字節(jié)二進(jìn)制算術(shù)和,不計(jì)超過256的溢出值,然后用0x100減去這個(gè)算數(shù)累加和,得出得值就是此行得校驗(yàn)和。
7) 每條數(shù)據(jù)最后還有<0x0d> (回車鍵)、 <0x0a>(換行鍵)
總結(jié):hex文件的數(shù)據(jù)行可按如下方式解析:
- 注意:由于每行標(biāo)識數(shù)據(jù)地址的只有2Byte,所以最大只能到64K,為了可以保存高地址的數(shù)據(jù),就有了Extended Linear Address Record。如果這行的數(shù)據(jù)類型是0x04,那么,這行的數(shù)據(jù)就是隨后數(shù)據(jù)的基地址。例如:
- 第一行,是Extended Linear Address Record,里面的數(shù)據(jù),也就是基地址是0x0004,
- 第二行是Data Record,里面的地址值是0x0000。那么數(shù)據(jù)18F09FE518F09FE518F09FE518F09FE5要寫入FLASH中的地址為 (0x0004 << 16) | 0x0000,也就是寫入FLASH的0x40000這個(gè)地址。
- 第三行的數(shù)據(jù)的寫入地址為0x40010。當(dāng)一個(gè)HEX文件的數(shù)據(jù)超過7k的時(shí)候,文件中就會出現(xiàn)多個(gè)Extended Linear Address Record。
3、 分析示例:
-
:020000040800F2 -----首行給出燒錄的目標(biāo)地址的高16位 : 0x0800
-
:100000003807002029020008B90300086F03000820 ----燒寫到0x0800 0000 處的數(shù)據(jù)
-
:10001000B5030008D10200084706000800000000F0 ----燒寫到0x0800 0010 處的數(shù)據(jù)
-
:040000050800018965 ----05類型的行對于燒寫程序無用
-
:00000001FF ----HEX文件結(jié)束行
--- 完 ---
本文參考安富萊STM32開發(fā)板軟件參考手冊,筆者知識有限,如果發(fā)現(xiàn)本文有錯(cuò)誤的地方歡迎批評、指正!
總結(jié)
- 上一篇: 加密算法之SHA(SHA1、SHA256
- 下一篇: java饲养员喂动物案例,封装、继承、多