HEX文件格式分析

Hex文件如果用特殊的程序來查看( notepad++)。打開後可發現,真個文件以行爲單位,每行以冒號開頭,內容全部爲16進制碼。Hex文件可以按照如下的方式進行拆分來分析其中的內容:
在這裏插入圖片描述

hex文件每一行的數據格式爲:

冒號 數據長度 存儲地址 數據類型 數據內容 校驗值
1字節 2字節 1字節 n字節 1字節

接下來我們以“:020000040001f9”分析它們數據格式之間的關係

1、冒號

冒號對於文件本身來說沒有參考意義,有興趣的可以去研究相關資料

2、數據長度

如圖所示
在這裏插入圖片描述
該列都代表數據長度,即該行數據內容的長度值
所以第一行的數據內容長度爲2字節,第2行數據內容的長度爲10字節,以此類推

3、存儲地址

在這裏插入圖片描述
上圖紅色框中的都是表示數據內容在flash中的存儲地址,由於存儲地址只佔有2個字節所以最大隻能到64K,顯然,對於超過64K的數據就不能編碼存儲地址,因此爲了可以保存高地址的數據,就有了Extended Linear Address Record(下面的數據類型會講解)。如果這行的數據類型是0x04,那麼,這行的數據內容就是隨後數據的基地址。

存儲地址 分爲偏移地址和絕對地址

也就是說hex文件中存儲地址位存儲的可能是偏移地址也可能是絕對地址
如何判斷是偏移地址還是絕對地址?

一般從打開的hex文件整體格式來說主要取決於第一行的代碼
如果看到數據類型位的值是“04”那麼04後面的數據內容則爲存儲後面數據的基地址,例如:
在這裏插入圖片描述
那麼實際數據的存儲地址:(基地址<<16) | 偏移地址
那麼第二行數據內容的存儲地址我們可以得出:
address: (0x0001 << 16) | 0xc000 = 0x0001c000;
所以第二行數據內容的實際存儲地址爲:0x0001c000;
如果第一行沒有04類型的數據則一般存儲地址位則保存絕對地址,例如:
在這裏插入圖片描述
可知第一行數據內容的存儲地址爲:0x0000; 第二行數據內容存儲地址爲:0x0020;

4、數據類型

數據類型共分爲以下幾類:

數據類型 英文解釋 中文解釋
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 該類型後面的值爲開始線性地址

在這裏插入圖片描述
在這裏插入圖片描述

5、數據內容

數據內容沒什麼好說的就是flash實際存儲的數據
在這裏插入圖片描述
以上紅框中都爲數據內容

6、校驗值

從hex文件格式可知每1行都有校驗值,每一行的最後一個字節都爲校驗值
在這裏插入圖片描述
校驗值計算方法:
0x100 - (該行數據所有的數據的累加和%256)
例如::020000040001F9

0x100 - ((0x02+0x00+0x00+0x04+0x00+0x01)%256) = 0xf9

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章