hex檔案格式

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減去這個算數累加和,得出得值就是此行得校驗和。

相關詞條

相關搜尋

熱門詞條

聯絡我們