玩單片機(jī)的朋友都會(huì)使用hex文件作為燒錄文件。那么當(dāng)我們寫一個(gè)在線升級(jí)軟件要支持hex文件的升級(jí),就需要通過hex文件轉(zhuǎn)成bin文件進(jìn)行傳輸,那么hex文件的格式和知識(shí)就必不可少了。
Intel HEX文件是由一行行符合Intel HEX文件格式的文本所構(gòu)成的ASCII文本文件。在Intel HEX文件中,每一行包含一個(gè)HEX記錄。這些記錄由對(duì)應(yīng)機(jī)器語言碼和/或常量數(shù)據(jù)的十六進(jìn)制編碼數(shù)字組成。Intel HEX文件通常用于傳輸將被存于ROM或者EPROM中的程序和數(shù)據(jù)。大多數(shù)EPROM編程器或模擬器使用Intel HEX文件。
1 Hex文件記錄格式
以行為單位,每行以冒號(hào)開頭,內(nèi)容全部為16進(jìn)制碼,以ASCII碼形式顯示。
在HEX文件里面,每一行代表一個(gè)記錄。記錄的基本格式為如表所示:
Start code一個(gè)字符,ASCII冒號(hào):。
Byte count兩個(gè)十六進(jìn)制數(shù)字(一個(gè)十六進(jìn)制數(shù)字對(duì)),表示數(shù)據(jù)字段中的字節(jié)數(shù)(十六進(jìn)制數(shù)字對(duì))。最大字節(jié)數(shù)為 255 (0xFF)。16 (0x10) 和 32 (0x20) 是常用的字節(jié)數(shù)。
Address四位十六進(jìn)制數(shù)字,表示數(shù)據(jù)的 16 位起始內(nèi)存地址偏移量。數(shù)據(jù)的物理地址是通過將此偏移量添加到先前建立的基地址來計(jì)算的,從而允許內(nèi)存尋址超出 16 位地址的 64 KB 限制。默認(rèn)為零的基地址可以通過各種類型的記錄進(jìn)行更改?;刂泛偷刂菲屏渴冀K表示為大端值。
Record type兩個(gè)十六進(jìn)制數(shù)字,00到05,定義數(shù)據(jù)字段的含義。參考下文
Data一個(gè)由n個(gè)字節(jié)組成的數(shù)據(jù)序列,由 2n 個(gè)十六進(jìn)制數(shù)字表示。一些記錄省略了這個(gè)字段(n等于零)。數(shù)據(jù)字節(jié)的含義和解釋取決于應(yīng)用程序。
Checksum兩個(gè)十六進(jìn)制數(shù)字,一個(gè)可用于驗(yàn)證記錄沒有錯(cuò)誤的計(jì)算值。計(jì)算校驗(yàn)和前所有16進(jìn)制碼的累加和。
2 數(shù)據(jù)記錄格式
Intel HEX文件由任意數(shù)量以回車換行符結(jié)束的數(shù)據(jù)記錄組成.
數(shù)據(jù)記錄外觀如下:
[:10246200464C5549442050524F46494C4500464C33]
其中:
10是這個(gè)記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量。
2462是數(shù)據(jù)將被下載到存儲(chǔ)器當(dāng)中的地址。
00是記錄類型(數(shù)據(jù)記錄)。
464C…464C是數(shù)據(jù)。
33是這個(gè)記錄的校驗(yàn)和的補(bǔ)足碼。
3 擴(kuò)展線性地址記錄格式(HEX386)
擴(kuò)展線性地址記錄也叫作32位地址記錄或HEX386記錄。這些記錄包含數(shù)據(jù)地址的高16位。擴(kuò)展線性地址記錄總是有兩個(gè)數(shù)據(jù)字節(jié)。
外觀如下:
[:02000004FFFFFC]
其中:
02是這個(gè)記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量。
0000是地址域,對(duì)于擴(kuò)展線性地址記錄,這個(gè)域總是0000。
04是記錄類型 04(擴(kuò)展線性地址記錄)。
FFFF是地址的高16位。
FC是這個(gè)記錄的校驗(yàn)和的補(bǔ)足碼。
當(dāng)一個(gè)擴(kuò)展線性地址記錄被讀取,存儲(chǔ)于數(shù)據(jù)域的擴(kuò)展線性地址被保存,它被應(yīng)用于從Intel HEX文件讀取來的隨后的記錄。線性地址保持有效,直到它被另外一個(gè)擴(kuò)展地址記錄所改變。
通過把記錄當(dāng)中的地址域與被移位(16位)的來自擴(kuò)展線性地址記錄的地址數(shù)據(jù)相加獲得數(shù)據(jù)記錄的絕對(duì)存儲(chǔ)器地址。
以下的例子演示了這個(gè)過程:
來自數(shù)據(jù)記錄地址域的地址2462 擴(kuò)展線性地址記錄的數(shù)據(jù)域FFFF0000 --------------------- 絕對(duì)存儲(chǔ)器地址FFFF2462
4 標(biāo)擴(kuò)展段地址記錄(HEX86)
擴(kuò)展段地址記錄也叫HEX86記錄,它包括4-19位數(shù)據(jù)地址段。擴(kuò)展段地址記錄總是有兩個(gè)數(shù)據(jù)字節(jié)。
外觀如下:
[:020000021200EA]
其中:
02是記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量。
0000是地址域,對(duì)于擴(kuò)展段地址記錄,這個(gè)域總是0000。
02是記錄類型 02(擴(kuò)展段地址記錄)。
1200是地址段。
EA是這個(gè)記錄的校驗(yàn)和的補(bǔ)足碼。
當(dāng)一個(gè)擴(kuò)展段地址記錄被讀取,存儲(chǔ)于數(shù)據(jù)域的擴(kuò)展段地址被保存,它被應(yīng)用于從Intel HEX文件讀取來的隨后的記錄。段地址保持有效,直到它被另外一個(gè)擴(kuò)展地址記錄所改變。
通過把記錄當(dāng)中的地址域與被移位(4位)的來自擴(kuò)展段地址記錄的地址數(shù)據(jù)相加獲得數(shù)據(jù)記錄的絕對(duì)存儲(chǔ)器地址。以下的例子演示了這個(gè)過程:
來自數(shù)據(jù)記錄地址域的地址 2462 擴(kuò)展段地址記錄數(shù)據(jù)域 1200 ----------------- 絕對(duì)存儲(chǔ)器地址 00014462
5 文件結(jié)束記錄(EOP)
Intel HEX文件必須以文件結(jié)束(EOF)記錄結(jié)束。這個(gè)記錄的記錄類型域的值必須是01。EOF記錄外觀總是如下
[:00000001FF]
其中:
00是記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量。
0000是數(shù)據(jù)被下載到存儲(chǔ)器當(dāng)中的地址。在文件結(jié)束記錄當(dāng)中地址是沒有意義被忽略的。0000H是典型的地址。
01是記錄類型01(文件結(jié)束記錄)。
FF是這個(gè)記錄的校驗(yàn)和的補(bǔ)足碼。
6 Intel Hex 完成例子
下面是一個(gè)完整的Intel HEX文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF看了這個(gè)例子,我自己也打開了之前寫的51單片機(jī)的hex文件:
:2000000002000E75210675225B75230200267B007C00900090758140758901758CF1758A45 :2000200028D28C75A882758CF1758A280BBBFA157B00EC75F00A8485F020F5210CBC64027A :200040007C00120051C0E0C0D0120051D0D0D0E032E52193F580D2A2C2A27580FED2A3C29C :20006000A3120087E52093F580D2A2C2A27580FDD2A3C2A3120087227D327E287FF81151AA :1A008000DFFEDEF8DDF4227E047FF8DFFEDEFA223F065B4F666D7D077F6FBC :00000001FF
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44619瀏覽量
638479 -
intel
+關(guān)注
關(guān)注
19文章
3483瀏覽量
186433 -
HEX文件
+關(guān)注
關(guān)注
0文章
26瀏覽量
12827 -
ASCII
+關(guān)注
關(guān)注
5文章
172瀏覽量
35197 -
EPROM
+關(guān)注
關(guān)注
3文章
132瀏覽量
54521
原文標(biāo)題:單片機(jī)Hex文件的格式
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
單片機(jī)中的hex和bin文件
STM32單片機(jī)生成的hex文件與bin文件區(qū)別與應(yīng)用
51單片機(jī)中各種小例子的hex文件
單片機(jī)hex和bin文件的區(qū)別
![<b class='flag-5'>單片機(jī)</b><b class='flag-5'>hex</b>和bin<b class='flag-5'>文件</b>的區(qū)別](https://file1.elecfans.com//web2/M00/A6/E2/wKgZomUMQQ2AKe3JAAA_oMjYDS8676.png)
單片機(jī)hex和bin文件的區(qū)別
![<b class='flag-5'>單片機(jī)</b><b class='flag-5'>hex</b>和bin<b class='flag-5'>文件</b>的區(qū)別](https://file1.elecfans.com//web2/M00/A6/E4/wKgZomUMQRqADK1tAABDTR6-Wh8685.png)
使用單片機(jī)控制LED燈的HEX文件免費(fèi)下載
![使用<b class='flag-5'>單片機(jī)</b>控制LED燈的<b class='flag-5'>HEX</b><b class='flag-5'>文件</b>免費(fèi)下載](https://file.elecfans.com/web1/M00/AB/ED/pIYBAF26POuACuVHAAL9TC9cmhM687.png)
單片機(jī)燒錄hex文件是如何解析
![<b class='flag-5'>單片機(jī)</b>燒錄<b class='flag-5'>hex</b><b class='flag-5'>文件</b>是如何解析](https://file.elecfans.com/web1/M00/CE/E5/pIYBAF-mBiqAW8A8AAApK8zwS7s273.png)
評(píng)論