[轉]HEX文件格式解析


1.前言

本文主要講述keil MDK 下STM32編譯生成的的HEX鏡像文件格式。並說明鏡像load地址是如何添加進HEX文件的。 

 2.keil MDK如何在HEX文件中添加load addr

 通過在keil mdk中進行如下的設置,則會將0x8019000的load addr加入到HEX文件中

圖 鏡像配置

3.HEX文件格式

冒號 本行數據長度 本行數據起始地址 數據類型 數據 校驗碼
  1 byte 2 bytes 1 byte n byte 1 byte

 表 HEX文件格式

 

  • 以行為單位,每行以冒號開頭,內容全部為16進制碼(以ASCII碼形式顯示)
  • 在HEX文件里面,每一行代表一個記錄。記錄的基本格式為如上表所示

(1)第一個字節 表示本行數據的長度;

(2)第二、三字節表示本行數據的起始地址;

(3)第四字節表示數據類型,數據類型有:0x00、0x01、0x02、0x03、0x04、0x05。

'00' Data Rrecord:                                  用來記錄數據,HEX文件的大部分記錄都是數據記錄

'01' End of File Record:                            用來標識文件結束,放在文件的最后,標識HEX文件的結尾

'02' Extended Segment Address Record:用來標識擴展段地址的記錄

'03' Start Segment Address Record:       開始段地址記錄

'04' Extended Linear Address Record:    用來標識擴展線性地址的記錄

'05' Start Linear Address Record:           開始線性地址記錄

(4)之后是數據

(5)最后一個字節 為校驗和。

注:校驗和的算法為:計算校驗和前所有16進制碼的累加和(不計進位),檢驗和 = 0x100 - 累加和

3.HEX實例

筆者說編譯出的HEX文件內容如下:

:020000040801F1
:10900000E84D002039930108F5B30108F7B30108D2
:10901000F9B30108FBB30108FDB30108000000002B
:109020000000000000000000000000004D92010858
:10903000FFB3010800000000D59201082593010844

....

:00000001FF

 

  • 第一條語句:02 0000  04 0800  F2
冒號 本行數據長度 本行數據起始地址(偏移地址) 數據類型 數據 校驗碼
  1 byte 2 bytes 1 byte n byte 1 byte
02 0000 04 0801

 

F1

 

 在上面的數據類型后2種記錄(04,05)都是用來提供地址信息的。每次碰到這2個記錄的時候,都可以根據記錄計算出一個“基”地址。對於后面的數據記錄,計算地址的時候,都是以這些“基”地址為基礎的。

以我們的語句為例:第1條記錄的長度為02,LOAD OFFSET為0000,RECTYPE為04,說明該記錄為擴展段地址記錄。數據為0801,校驗和為F1。

從這個記錄的長度和數據,我們可以計算出一個基地址,這個地址為(0x0801 << 16) = 0x0801 0000 ,后面的數據記錄都以這個地址為基地址。

  •  第二條語句 :10900000E84D002039930108F5B30108F7B30108D2

 

冒號 本行數據長度 本行數據起始地址(偏移地址) 數據類型 數據 校驗碼
  1 byte 2 bytes 1 byte n byte 1 byte
: 10 9000 00 E84D002039930108F5B30108F7B30108 D2

第2條記錄的長度為10(0x10=16字節),LOAD OFFSET為0000,RECTYPE為00('00' Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄),數據為E84D002039930108F5B30108F7B30108 校驗碼為D2;

此時基地址為:0x0801 0000  加上偏移地址:0x9000   這條記錄的16個字節的數據的起始地址為:0x0801 0000+ 0x9000 =0x0801 9000

  • 第四條語句:00000001FF”  (每一個.hex文件的最后一行都是固定為這個內容)

 

冒號 本行數據長度 本行數據起始地址(偏移地址) 數據類型 數據 校驗碼
  1 byte 2 bytes 1 byte n byte 1 byte
: 00 0000 01   FF

 (每一個.hex文件的最后一行都是固定為這個內容)
記錄的長度為00,LOAD OFFSET為0000,RECTYPE為01  (01' End of File Record:用來標識文件結束,放在文件的最后,標識HEX文件的結尾)

4.參考文獻

[1] http://blog.csdn.net/yx_l128125/article/details/13624947


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM