《2022年Hex文件格式 .pdf》由会员分享,可在线阅读,更多相关《2022年Hex文件格式 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Intel HEX 文件是记录文本行的ASCII 文本文件,下面是 Intel HEX 文件格式,在Intel HEX 文件中,每一行是一个 HEX记录由十六进制数组成的机器码或者静态数据,Intel HEX 文件经常被用于将程序或数据传输存储到ROM.EPROM,大多数编程器和模拟器使用 Intel HEX 文件.记录格式:一个 Intel HEX 文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.:llaaaattdd.cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述.:?冒号是每一条 Intel HEX
2、 记录的开始ll?是这条记录的长度域,他表示数据(dd)的字节数目.aaaa?是地址域,他表示数据的起始地址 tt?这个域表示这条 HEX 记录的类型,他有可能是下面这几种类型00-数据记录 01-文件结束记录02-扩展段地址记录04-扩展线性地址记录dd?是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以查看 ll 域的说明cc?是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有对字母所表示的十六进制数字 都加起来然后模除256 得到的余数最后求出余数的补码即是本效验字节cc.一数据记录Intel HEX 文件由若干个数据记录组成,一个数据记录以一个回车和一
3、个换行结束 比如下面的一条数据记录:10246200464C5549442050524F46494C4500464C33 10 是此行记录数据的字节数目2462 是数据在内存 中的起始地址00 是记录类型 00(是一个数据记录)464C 到 464C 是数据33 是此行记录的效验和二扩展线性地址记录(HEX386)扩展线性地址记录也可以认为是32 为地址记录和 HEX386记录,这个纪录包含高16(16-31 位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -:02000004FFFFFC 02 是记录的
4、数据字节数目0000 是地址域这在扩展地址记录中总是0000 04 是记录类型 04(扩展地址记录)FFFF是高 16 位地址FC是记录效验和,计算方法如下:01h+NOT(02h+00h+00h+04h+FFh+FFh)当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从 Intel HEX 文件中读出的记录,这个扩展线性记录一直有效,直到读到下一个扩展线性记录.绝对内存地址=数据记录中的地址?+?移位后的扩展线性地址?|?|?数据记录中的地址域?移位后扩展线性地址记录中的地址域下面举例说明这个过程从数据记录的地址域得到地址?2462 从扩展线性地址记录的地址域得
5、到地址?FFFF?-绝对内存地址?FFFF2462?三扩展段地址记录(HEX86)扩展段地址记录也可以认为是包含地址中4-19 位的数据地址段,这个扩展段地址记录总是有两字节数据,如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -:020000021200EA 02 是记录中的数据字节数目0000 是地址域,在扩展段地址记录中,这个域总是 0000 02 是记录类型 02(扩展段地址的标示)1200 是该段的地址EA是效验和计算如下:01h+NOT(02h+00h+00h+02h+12h+00h).当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从Intel
6、 HEX 文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录绝对内存地址=数据记录中的地址?+?移位后的扩展段地址?|?|?数据记录中的地址域?移位后扩展段地址记录中的地址域下面举例说明这个过程从数据记录的地址域得到地址?2462 从扩展段地址记录的地址域得到地址?1200?-绝对内存地址?00014462 四文件结束记录(EOF)一个 Intel HEX 文件必须有一个文件结束记录,这个记录的类型域必须是01,一个EOF记录总是这样:00000001FF 00 是记录中数据字节的数目0000 这个地址对于 EOF记录来说无任何意义01 记录类型是 01(文件结束记录标示)名师资料
7、总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -FF是效验和计算如下01h+NOT(00h+00h+00h+01h).Hex文件格式2009-12-23 13:10 参考资料:Intel Hexadecimal Object File Format Specification Revision A 1/66/88 适用范围:8 位,16 位,32位处理器转载请注明:http:/ IAR 的例程生成的一段HEX文件,由于太长的原因,我删掉一些。有的朋友可能会被吓到,但看完这篇文章后希望你能觉得其实也很简单。本文也将针对这个例子来讲,有什么说得不对的,请各位拍砖!:0200000
8、480007A:1000000018F09FE518F09FE518F09FE518F09FE5C0:1000100018F09FE50000A0E118F09FE518F09FE5BB:10002000B80F00804001008064010080D40100808E:10003000FC01008000000000880100802402008094:100040004C0200806C0200808C020080AC020080B8:10005000CC020080EC0200800C0300802C030080A6:100060004C0300806C0300808C030080AC
9、03008094:10007000CC030080EC0300800C0400802C04008082:100080004C0400806C0400808C040080AC04008070:10009000CC040080EC0400800C0500802C0500805E:1000A0004C0500806C0500808C050080AC0500804C:1000B000CC0500800000000000000000EC0500807E:1000C0000C0600802C0600804C0600806C06008028:1000D0008C060080AC060080CC060080E
10、C06008018:1000E0000C0700802C0700804C0700806C07008004:1000F0008C070080AC070080CC070080EC070080F4:100100000C08008000000000000000002C080080A7 中间一部分删除以控制篇幅:1011C0001EFF2FE11EFF2FE11EFF2FE11EFF2FE16B:1011D0001EFF2FE11EFF2FE11EFF2FE11EFF2FE15B:1011E0001EFF2FE11EFF2FE11EFF2FE11EFF2FE14B:1011F0001EFF2FE11EF
11、F2FE11EFF2FE11EFF2FE13B:101200001EFF2FE11EFF2FE11EFF2FE11EFF2FE12A:101210001EFF2FE11EFF2FE11EFF2FE11EFF2FE11A 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -:101220001EFF2FE11EFF2FE11EFF2FE11EFF2FE10A:101390009F10E0E3AC1DC1E3001080E51EFF2FE1CC:1013A000001000A0041000A0081000A00C1000A065:1013B000101000A0141000A
12、0181000A01C1000A015:1013C00028009FE510402DE924409FE5040050E1EE:1013D0000400000A041090E40FE0A0E111FF2FE1E7:1013E000040050E1FAFFFF1A1040BDE81EFF2FE194:1013F000A4140080C814008028209FE500402DE937:10140000000092E5000050E30400000A0210A0E191:101410000200A0E3563412EF0000A0E3000082E5D2:101420000040BDE81EFF2F
13、E1241000A0050000EAE7:10143000041090E4042090E404C091E4043053E2EA:1014400004C082E4FBFFFF1A043090E4000053E381:10145000F6FFFF1A1EFF2FE10010A0E3030000EAD1:10146000042090E4043053E2041082E4FCFFFF1AED:10147000043090E4000053E3F8FFFF1A1EFF2FE151:101480000100A0E31B0000EB000050E3CBFFFF1BBB:101490000000A0E3BDFDF
14、FEB180000EB090000EB2E:1014A000FDFFFFEA581400802C000000001000A08F:1014B000000000002C140080040000000C150080C7:1014C0002C1000A00000000000502DE9C9FFFFEB28:1014D0002620A0E3802B82E30210A0E11800A0E305:1014E000563412EFFBFFFFEA0070A0E10700A0E115:1014F000F4FFFFEBFDFFFFEA0100A0E31EFF2FE179:1015000000502DE9F7FF
15、FFEA0EF0B0E10200000005:0400000580000FB8B0:00000001FF 1.基本知识Hex文件跟一般的 txt 文件没有不同,打开之后都可以正常显示,然而如果用文本工具打开一个二进制文件则会变成乱码。原因就在于hex 文件的代码都是ASCII 码来表示。例如一个8 位的二进制代码 8b10100101(以十六进制来说就是 A5h),用 ASCII 码来显示就是由一个 A 的字符和一个 5 的字符组成。Hex文件的作用就是带有地址信息,使用编程器或者仿真器进行烧写芯片的时候并不是把 Hex文件的内容直接写到芯片,而是要经过一个解析的过程,也可以说把地址和代码分离
16、出来,然后再根据地址与数据的关系进行烧写。举个例子,假设你是一个搬家公司的老板,现在你要把一堆家私(数据)搬到一栋大楼的一些楼层,而每件家私上面都贴有楼层的号码牌(地址),那么你的工人不用你的指挥就知道把家私搬到哪一层,搬完之后他们会把号码牌取下来并还给你。而如果是 BIN 文件,则没有地址信息,换句话来说就是你必须告诉你每个工人哪件家私名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 10 页 -要送到哪一层。根据 INTEL的文档(即本文的参考资料),8 位机的 HEX文件可以有 16位的寻址范围,16位机对应 20位寻址范围,32 位对应 32 位的寻址范围,对此我没有做过证
17、明,但我对这个保持一定的怀疑,以后有机会再证明,这个也不是本文的重点。2.文件格式1)基本格式:1012F00024C09FE500C09CE50C308CE50830A0E3DD HEX文件由一条一条类似上面的记录组成。按照 INTEL的文档,有下面如此格式。各个部分的解释是:RECORD MARK:一行记录的开始,用冒号:标示,ASCII 码值为 0 x3A。RECLEN(RECORD LENGTH):本记录的数据或地址信息的长度,因为只有一个字节长,所以最多也就是256 个字节。LOAD OFFSET:相对地址,即相对于基址本记录的数据要存放的地址。RECTYP(RECORD TYPE)
18、:本段记录的类型,分6 种,分别有:00:数据类型记录;(Data Record)01:文件的结束类型记录;(End of File Record)02:扩展段地址类型记录;(Extended Segment Address Record)03:起始段地址类型记录;(Start Segment Address Record)04:扩展线性地址类型记录;(Extended Linear Address Record)(只适用于32 位地址)05:起始线性地址类型记录;(Start Linear Address Record)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页
19、-INFO or DATA:地址信息或数据的内容;CheckSum:校验和,下面会详细讲;需要注意的是,下面每一个长度指的是二进制的长度,换成ASCII 码就是两倍长度,所以 HEX文件的大小一般要比BIN文件大两倍以上。按照上面的格式,现在把上面提到的一条记录来分析。:|10|12F0|00|24C09FE500C09CE50C308CE50830A0E3|DD 上面的记录已经用一个红色的竖条按结构划分。很明显,:表示记录的开始,10 表示本记录的数据有16 个,12F0表示相对地址是本记录的数据开始放的起始地址,00 表示本条记录是数据类型记录,2录 4C09F.A0E3 是本条记的数据,
20、DD是本条记录的校验和,所谓校验和,是指从本记录的数据长度开始,即10 开始,一直加到数据的最后一个字节即E3,(记得要把两个字符组成一个字节),写成公式就是Sum=0 x10+0 x12+0 xF0+0 x00+0 x24+0 xC0+0 x9f+0 xe5+0 x00+0 xc0+0 x9c+0 xe5+0 x0c+0 x30+0 x8c+0 xe5+0 x08+0 x30+0 xa0+0 xe3=0 x923,只需要低八位,即 0 x23,再对 0 x23取补数(即对 0 x23取相反数再加一),得到最后的校验和 0 xDD。在进行详细分析各种类型的记录之前,再找一条记录来加深印象,这条
21、记录跟上条不同,是一条包含地址信息的记录。:|02|0000|04|8000|7A:表示记录的开始,02 表示本记录的地址有2 个,0000 在此条记录并无意义,04 表示此条记录是扩展线性地址类型记录,前面已经说明,扩展线性地址类型只适用于 32 位地址。既然是 32 位地址,那为什么表示数地址信息的数据只有 16 位,即 0 x8000呢?下面会详细说明。8000 表示起始地址,7A本条记录的校验和。2)扩展线性地址类型的记录(Extended Segment Address Record)此数据记录的作用是表示接下来的数据的起始地址,即表明接下来的数据存放在哪个地方。再次说明一下,此类型
22、只适合32 位地址寻址。例子::|02|0000|04|8000|7A:|10|0000|00|18F09FE518F09FE518F09FE518F09FE5|C0 下面对表示地址信息的数据区进行详细讲解。对于扩展线性地址类型的记录,它的数据区用于表示地址,但不是表示 32 位,而是只表示线性地址的高16 位,即名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -bit16-bit32,低 16 位为 0,所以按照例子来看,它表示起始地址为 0 x80000000,因此我们可以知道接下来的这条记录的起始地址为:0 x8000000+0 x0000=0 x8000000(
23、相对地址),所以在 0 x80000000放置 0 x18,在 0 x80000001放置 0 xf0,在 0 x80000002放置 0 x9f.以此类推。3)扩展段地址类型记录(Extended Segment Address Record)适用于 16 位或 32 位寻址。作用与扩展线性地址类型的记录相同,都是用两个字节即 16 位来表示接下来的数据的起始地址,不同的是,它的寻址范围没有扩展线性地址类型的记录那么宽,它只有20 位,所以数据区的两个自己表示的是bit4-bit19,bit0-bit3为 0。但是需要注意的是,它的寻址范围并不是1G,而是 64k,即 16位。下面同样以例子
24、来详细说明。以下是一个 atmege16单片机(取指总线为 16 位)的 hex 文件。:|02|0000|02|0000|FC:0200000029C015:1000540004E00EBF0FE50DBF4FEF44BB45BB05ECFD:10006400A89803D0A89A01D0FBCF0F930F930F93B6:100074000A95F1F70F910A95D1F70F910A95B1F707:040084000F9108953B:00000001FF 我们需要关心的是第一条记录,我已经用红线把每一部分划分出来,RECTYP02表示这是一条扩展段地址类型记录,数据区“000
25、0”表示接下来的数据的起始地址为 0 x00000,接下来就不多解释了,跟扩展线性地址类型的记录相同。4)数据类型记录(Data Record)例子::|10|12F0|00|24C09FE500C09CE50C308CE50830A0E3|DD 数据类型的记录最好理解了,就拿上面的例子快速带过就行了。最主要特征是 RECTYP 为00,表示数据类型记录,接下来的就是16 个数据。5)文件的结束类型记录(End of File Record)表示 hex 文件的结束。通过 RECTYP 为“01”来判别。-draft to be used-6)起始线性地址类型记录(Start Linear Address Record)只适用于 80386。x86 的寻址方面的知识我忘得差不多,等以后补上,有上面这几个应该就足够平时的使用。7)起始段地址类型记录(Start Segment Address Record)只适用于 8086/80186。名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -
限制150内