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