Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。
#HEX记录格式
Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域, 它们按以下格式排列[:LLAAAATT[DD…]CC]。每一组字母对应一个不同的域, 每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成, 它们构成一个字节。
详细解释如下:
:每个Intel HEX记录都由冒号开头。
LL是数据长度域,它代表记录当中数据字节(dd)的数量。
AAAA是地址域,它代表记录当中数据的起始地址。
TT是代表HEX记录类型的域,它可能是以下数据当中的一个:
00– 数据记录
01– 文件结束记录
02– 扩展段地址记录
04– 扩展线性地址记录
DD是数据域,它代表一个字节的数据。一个记录可以有许多数据字节,记录当中数据字节的数量必须和数据长度域LL中指定的数字相符。
CC是校验和域,它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。也就是说LLAAAATT[DD…]CC一共的校验和永远为0。
#数据记录格式
Intel HEX文件由任意数量以回车换行符结束的数据记录组成.
数据记录外观如下:
[:10246200464C5549442050524F46494C4500464C33]
其中:
10是这个记录当中数据字节的数量。
2462是数据将被下载到存储器当中的地址。
00是记录类型(数据记录)。
464C…464C是数据。
33是这个记录的校验和的补足码。
#扩展线性地址记录(HEX386)格式
扩展线性地址记录也叫作32位地址记录或HEX386记录。这些记录包含数据地址的高16位。扩展线性地址记录总是有两个数据字节。
外观如下:
[:02000004FFFFFC]
其中:
02是这个记录当中数据字节的数量。
0000是地址域,对于扩展线性地址记录,这个域总是0000。
04是记录类型 04(扩展线性地址记录)。
FFFF是地址的高16位。
FC是这个记录的校验和的补足码。
当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录。线性地址保持有效,直到它被另外一个扩展地址记录所改变。
通过把记录当中的地址域与被移位(16位)的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址。以下的例子演示了这个过程:
来自数据记录地址域的地址 2462 扩展线性地址记录的数据域*10000H + FFFF0000 --------------------- 绝对存储器地址 FFFF2462
#扩展段地址记录(HEX86)
扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段。扩展段地址记录总是有两个数据字节。
外观如下:
[:020000021200EA]
其中:
02是记录当中数据字节的数量。
0000是地址域,对于扩展段地址记录,这个域总是0000。
02是记录类型02(扩展段地址记录)。
1200是地址段。
EA是这个记录的校验和的补足码。
当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录。段地址保持有效,直到它被另外一个扩展地址记录所改变。
通过把记录当中的地址域与被移位(4位)的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址。以下的例子演示了这个过程:来自数据记录地址域的地址 2462
扩展段地址记录数据域*10H + 12000 ----------------- 绝对存储器地址 00014462
#文件结束(EOF)记录。
Intel HEX文件必须以文件结束(EOF)记录结束。这个记录的记录类型域的值必须是01。EOF记录外观总是如下
[:00000001FF]
其中:
00是记录当中数据字节的数量。
0000是数据被下载到存储器当中的地址。在文件结束记录当中地址是没有意义被忽略的。0000H是典型的地址。
01是记录类型01(文件结束记录)。
FF是这个记录的校验和的补足码。
#Intel HEX文件例子
下面是一个完整的Intel HEX文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF
看了这个例子,我自己也打开了之前写的51单片机的hex文件:
:2000000002000E75210675225B75230200267B007C00900090758140758901758CF1758A45 :2000200028D28C75A882758CF1758A280BBBFA157B00EC75F00A8485F020F5210CBC64027A :200040007C00120051C0E0C0D0120051D0D0D0E032E52193F580D2A2C2A27580FED2A3C29C :20006000A3120087E52093F580D2A2C2A27580FDD2A3C2A3120087227D327E287FF81151AA :1A008000DFFEDEF8DDF4227E047FF8DFFEDEFA223F065B4F666D7D077F6FBC :00000001FF
#英文原文
QUESTION:WhatistheIntelHEXfileformat? ANSWER: 8.1TheIntelHEXfileisanASCIItextfilewithlinesoftextthatfollowtheIntelHEXfileformat.EachlineinanIntelHEXfilecontainsoneHEXrecord.Theserecordsaremadeupofhexadecimalnumbersthatrepresentmachinelanguagecodeand/orconstantdata.IntelHEXfilesareoftenusedtotransfertheprogramanddatathatwouldbestoredinaROMorEPROM.MostEPROMprogrammersoremulatorscanuseIntelHEXfiles. 8.2RecordFormat. AnIntelHEXfileiscomposedofanynumberofHEXrecords.Eachrecordismadeupoffivefieldsthatarearrangedinthefollowingformat: :LLAAAATT[DD…]CC Eachgroupofletterscorrespondstoadifferentfield,andeachletterrepresentsasinglehexadecimaldigit.Eachfieldiscomposedofatleasttwohexadecimaldigits-whichmakeupabyte-asdescribedbelow: 8.2.1:isthecolonthatstartseveryIntelHEXrecord. 8.2.2LListherecord-lengthfieldthatrepresentsthenumberofdatabytes(dd)intherecord. 8.2.3AAAAistheaddressfieldthatrepresentsthestartingaddressforsubsequentdataintherecord. 8.2.4TTisthefieldthatrepresentstheHEXrecordtype,whichmaybeoneofthefollowing: 8.2.4.100-datarecord 8.2.4.201-end-of-filerecord 8.2.4.302-extendedsegmentaddressrecord 8.2.4.404-extendedlinearaddressrecord 8.2.5DDisadatafieldthatrepresentsonebyteofdata.Arecordmayhavemultipledatabytes.Thenumberofdatabytesintherecordmustmatchthenumberspecifiedbythellfield. 8.2.6CCisthechecksumfieldthatrepresentsthechecksumoftherecord.Thechecksumiscalculatedbysummingthevaluesofallhexadecimaldigitpairsintherecordmodulo256andtakingthetwo'scomplement. 8.3DataRecords. TheIntelHEXfileismadeupofanynumberofdatarecordsthatareterminatedwithacarriagereturnandalinefeed.Datarecordsappearasfollows: :10246200464C5549442050524F46494C4500464C33 where: 8.3.110isthenumberofdatabytesintherecord. 8.3.22462istheaddresswherethedataaretobelocatedinmemory. 8.3.300istherecordtype00(adatarecord). 8.3.4464C...464Cisthedata. 8.3.533isthechecksumoftherecord. 8.4ExtendedLinearAddressRecords(HEX386). Extendedlinearaddressrecordsarealsoknownas32-bitaddressrecordsandHEX386records.Theserecordscontaintheupper16bits(bits16-31)ofthedataaddress.Theextendedlinearaddressrecordalwayshastwodatabytesandappearsasfollows: :02000004FFFFFC where: 8.4.102isthenumberofdatabytesintherecord. 8.4.20000istheaddressfield.Fortheextendedlinearaddressrecord,thisfieldisalways0000. 8.4.304istherecordtype04(anextendedlinearaddressrecord). 8.4.4FFFFistheupper16bitsoftheaddress. 8.4.5FCisthechecksumoftherecordandiscalculatedas01h+NOT(02h+00h+00h+04h+FFh+FFh). 8.4.6Whenanextendedlinearaddressrecordisread,theextendedlinearaddressstoredinthedatafieldissavedandisappliedtosubsequentrecordsreadfromtheIntelHEXfile.Thelinearaddressremainseffectiveuntilchangedbyanotherextendedaddressrecord. 8.4.7Theabsolute-memoryaddressofadatarecordisobtainedbyaddingtheaddressfieldintherecordtotheshiftedaddressdatafromtheextendedlinearaddressrecord.Thefollowingexampleillustratesthisprocess.. Addressfromthedatarecord'saddressfield2462 ExtendedlinearaddressrecorddatafieldFFFF ----------- Absolute-memoryaddressFFFF2462 8.5ExtendedSegmentAddressRecords(HEX86). Extendedsegmentaddressrecords-alsoknownasHEX86records-containbits4-19 ofthedataaddresssegment.Theextendedsegmentaddressrecordalwayshastwo databytesandappearsasfollows: :020000021200EA where: 8.5.102isthenumberofdatabytesintherecord. 8.5.20000istheaddressfield.Fortheextendedsegmentaddressrecord,thisfieldisalways0000. 8.5.302istherecordtype02(anextendedsegmentaddressrecord). 8.5.41200isthesegmentoftheaddress. 8.5.5EAisthechecksumoftherecordandiscalculatedas01h+NOT(02h+00h+00h+02h+12h+00h). 8.5.6Whenanextendedsegmentaddressrecordisread,theextendedsegmentaddressstoredinthedatafieldissavedandisappliedtosubsequentrecordsreadfromtheIntelHEXfile.Thesegmentaddressremainseffectiveuntilchangedbyanotherextendedaddressrecord. 8.5.7Theabsolute-memoryaddressofadatarecordisobtainedbyaddingtheaddressfieldintherecordtotheshifted-addressdatafromtheextendedsegmentaddressrecord.Thefollowingexampleillustratesthisprocess. Addressfromthedatarecord'saddressfield2462 Extendedsegmentaddressrecorddatafield1200 -------- Absolutememoryaddress00014462 8.6End-of-File(EOF)Records. AnIntelHEXfilemustendwithanend-of-file(EOF)record.Thisrecordmusthavethevalue01intherecordtypefield.AnEOFrecordalwaysappearsasfollows: :00000001FF where: 8.6.100isthenumberofdatabytesintherecord. 8.6.20000istheaddresswherethedataaretobelocatedinmemory.Theaddressinend-of-filerecordsismeaninglessandisignored.Anaddressof0000histypical. 8.6.301istherecordtype01(anend-of-filerecord). 8.6.4FFisthechecksumoftherecordandiscalculatedas01h+NOT(00h+00h+00h+01h). 8.7ExampleIntelHEXFile. FollowingisanexampleofacompleteIntelHEXfile: :10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF审核编辑:汤梓红
-
intel
+关注
关注
19文章
3480浏览量
185732 -
HEX文件
+关注
关注
0文章
26浏览量
12723 -
文件
+关注
关注
1文章
561浏览量
24692 -
EPROM
+关注
关注
3文章
123浏览量
54371 -
HEX
+关注
关注
0文章
37浏览量
16796
原文标题:Hex文件内容详细解析
文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论