在你做公升級的時候你會用到hex檔案的載入,所以對hex檔案的解析很重要。
.hex整個檔案以行為單位,每行以冒號開頭,內容全部為16進製製碼(以ascii碼形式顯示)
格式為:
<
0x3a
> 資料長度
1byte 資料位址
2byte 資料型別
1byte 資料
nbyte 校驗
1byte <
0x0d
>
<
0x0a
>
由於每行標識資料位址的只有2byte,所以最大只能到2^16 = 64k,為了可以儲存高位址的資料,就有了extended linear address record。如果這行的資料型別是0x04,那麼,這行的資料就是隨後資料的基位址。
例如:
:
020000040004f6:
1000000018f
09fe518f09fe518f09fe518f09fe5c0
:1000100018f
09fe5805f20b9f0ff1fe518f09fe51d…:
00000001ff
'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是校驗碼。
第一行,是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
:
1000000018f
09fe518f09fe518f09fe518f09fe5c0 這行中的 0xc0
:1000100018f
09fe5805f20b9f0ff1fe518f09fe51d 這行中的 0x1d
校驗和的演算法為:計算從0x3a 以後(不包括0x3a)的所有各位元組的和模256的餘。即各位元組二進位制算術和,不計超過256的溢位值,然後用0x100減去這個算數累加和,得出得值就是此行得校驗和。
了解hex檔案的結構 那麼可以在嵌入式段進行公升級檔案的接受傳輸,根據hex檔案的格式對公升級傳輸檔案的校驗與傳輸結束判斷等。常用於公升級裝置軟體。
另外,有時公升級的檔案可以合成乙個檔案最後進行解析,這種情況下可以合併hex多個檔案:
1.將由keil生成的boot.hex檔案的最後2行刪除,類似如下內容:
:
040000050800019559
:00000001ff
解讀keil生成的hex檔案 小V
keil arm公司收購的整合微控制器的編譯鏈結等一系列工具的開發環境,支援c和彙編程式設計。經常燒錄keil生成的hex檔案,不免想知道其資料組成,以下為使用keil 4結合網上和自身的使用,解讀一下。使用keil c51,即大端格式 請使用小端編譯的自行轉換 keil hex檔案是由一行行符合i...
Hex檔案格式解析
字串個數12 42n 22 資料說明 資料長度 n 位址資料型別 資料校驗 phexfileformat datasize16進製制 0 ff phexfileformat offsetaddr16進製制 0 ffff 資料型別為01 02 03 04 05時位址被忽略通常為0000 當資料型別為0...
關於Hex檔案的解析和修改應用
目錄前言 一 hex是什麼?二 使用步驟 1.引入hexlexer類 2.呼叫類 最近研究了一下hex檔案的用法。主要用途是配合stvp進行量產工具的開發應用。因為涉及到常量的修改不想編譯和修改或者應用再無法修改原始檔案的地方 可以通過提前記錄對應的常量偏移來進行修改。需求 修改指定偏移位置的hex...