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