hex文件格式

hex文件格式是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex文件的方式有很多種,可以通過不同的編譯器將C程序或者彙編程序編譯生成hex。
Hex文件格式解析
Hex文件如果用特殊的程序來查看(一般記事本就可以實現)。打開後可發現,整個文件以行爲單位,每行以冒號開頭,內容全部爲16進制碼(以ASCII碼形式顯示)。Hex文件可以按照如下的方式進行拆分來分析其中的內容:
例如:
:020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA
第一個 0x02 爲數據長度。
緊跟着後面的0x00 0x00 爲地址。
再後面的0x04爲數據類型,類型共分以下幾類:
‘00’ Data Record//數據記錄
‘01’ End of File Record//文件結束記錄
‘02’ Extended Segment Address Record//擴展段地址記錄
‘03’ Start Segment Address Record//開始段地址記錄
‘04’ Extended Linear Address Record//擴展線性地址記錄
‘05’ Start Linear Address Record//開始線性地址記錄
然後,接着0x04後面的兩個 0x00 0x00就是數據。最後一個0xFA是校驗碼。
HEX文件的每一行都是這樣的格式:

<0x3a>

[數據長度1Byte]

[數據地址2Byte]

[數據類型1Byte]

[數據nByte]

[校驗1Byte]

<0x0d>

<0x0a>

在例如:

:1000000018F09FE518F09FE518F09FE518F09FE5C0
按照上面的數據行格式分析如下:

<0x3a>

[數據長度1Byte]

10(十六進制)

[數據地址2Byte]

00 00

[數據類型1Byte]

00

[數據nByte]

18F09FE518F09FE518F09FE518F09FE5

[校驗1Byte]

C0

<0x0d>

<0x0a>

每行中的數據並不是一定有的,第二個字節數據長度爲0,那麼這行就沒有數據。

由於每行標識數據地址的只有2Byte,所以最大隻能到64K,爲了可以保存高地址的數據,就有了Extended Linear Address Record。如果這行的數據類型是0x04,那麼,這行的數據就是隨後數據的基地址。例如:
:020000040004F6
:1000000018F09FE518F09FE518F09FE518F09FE5C0
:1000100018F09FE5805F20B9F0FF1FE518F09FE51D
第一行,是Extended Linear Address Record,裏面的數據,也就是基地址是0x0004,第二行是Data Record,裏面的地址值是0x0000。那麼數據18F09FE518F09FE518F09FE518F09FE5要寫入FLASH中的地址爲 (0x0004 << 16) | 0x0000,也就是寫入FLASH的0x40000這個地址。同樣,第三行的數據的寫入地址爲0x40010。當一個HEX文件的數據超過7k的時候,文件中就會出現多個Extended Linear Address Record。
End of File Record 行是每一個HEX文件的最後一行。例如:
:00000001FF
這樣的一行數據內容是固定的,數據長度爲0,地址爲0。
校驗值:每一行的最後一個值爲此行數據的校驗和。例如:
:1000000018F09FE518F09FE518F09FE518F09FE5C0 這行中的 0xC0
:1000100018F09FE5805F20B9F0FF1FE518F09FE51D 這行中的 0x1D
校驗和的算法爲:計算從0x3A 以後(不包括0x3A)的所有各字節的和模256的餘。即各字節二進制算術和,不計超過256的溢出值,然後用0x100減去這個算數累加和,得出得值就是此行得校驗和。

轉載:https://baike.baidu.com/item/hex文件格式?fr=aladdin

發佈了3 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章