Intel HEX格式说明
Intel HEX文件是记录文本行的ASCII文本文件。后缀为.hex
Intel HEX文件中,每一行是一个HEX记录,它由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用于将程序或数据传输存储到ROMEPROM。大多数编程器和模拟器使用Intel HEX文件。
1.记录详解
Intel HEX文件由若干个数据记录组成,每个字符都是ASCII字符表示。每一条数据记录以冒号开始,ASCII码为0x3A,以一个回车和一个换行结束,回车的ASCII码为0x0d,换行的ASCII码为0x0a
一个Intel HEX文件可以包含任意多的十六进制记录,每一行为一条记录。每条记录有六个区域。通常记录的格式如下图所示:
记录的一般结构
下面是一个记录的格式。
:]cc
字符
:
ll
aaaa
tt
[dd…]
cc
英文描述
RECORD
MARK
LOAD
RECLEN
OFFSET
RECTYP
INFO
or
DATA
CHKSUM
区域
冒号为
起始标志
长度域
length
地址域
address
类型域
type
数据域
data
校验和域
check sum
字节长度
1 byte
1 byte
2 bytes
1 byte
N bytes
1 byte
每一组字母是独立的一个域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述:
:     冒号是每一Intel HEX记录开始的标志
ll    是这条记录的长度域,它表示INFO or DATA[dd…]的字节bytes个数
aaaa 是地址域,它表示数据的起始地址
<如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址,
对于不支持扩展段地址和扩展线性地址的,89C51,这就是此条记录的起始地址>
tt  表示这条HEX记录的类型,6种类型
00 ----数据记录            Data Record (8-, 16-, or 32-bit formats)
01 ----文件结束记录      End of File Record(8-, 16-, or 32-bit formats)
02 ----扩展段地址记录    Extended Segment Address Record(16- or 32-bit formats)
03-----起始段地址记录    Start Segment Address Record(16- or 32-bit formats)
04-----扩展线性地址记录  Extended Linear Address Record(32-bit format only)
05-----起始线性地址记录  Start Linear Address Record(32-bit format only)
dd  是数据域,表示一个字节的数据,一个记录可能有多个数据字节,长度域ll域的数值大小
说明了数据域字节数。
cc   是效验和域,表示记录的效验和。计算方法是将本条记录冒号开始后的所有字母对
(不包括本效验字本身和冒号)所表示的十六进制数字<一对字母表示一个十六进制数
以字节为单位>都加起来然后模除256得到余数,最后求出余数的补码即是本效验字节
cc.
必须注意的是,此处的补码是将余数的8bit二进制数所有位取反,然后加1。也就是
最高位不管是0还是1,都要取反。
某一条记录的校验和计算过程:
第一步,求该行各字节数字的和(不包括冒号,不包括最后一个字节即校验和本身)
第二步,模除256
第三步,各位取反
第四步,加1即得到校验和
<例如: 一条记录为 :0300000002005E9D
校验和cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E) %  0x100)
=0x01+NOT(0x63 % 0x100)
=0x01+NOT(0x63)
=8’b1+8’b1001_1100
=8’b1001_1101
=8’h9D
3.1.数据记录00 (8-, 16-, or 32-bit formats)
字符
:
ll
aaaa
tt
[dd…]
cc
英文描述
RECORD
MARK
RECLEN
LOAD
OFFSET
RECTYP
00
DATA
CHKSUM
区域
冒号为
起始标志
长度域
length
地址域
address
类型域
type
数据域
data
校验和域
check sum
ASCII
固定为00
16进制
3A
3030
字节长度
1 byte
1 byte
2 bytes
1 byte
N bytes
1 byte
RECORD MARK
该区域为‘:’的ASCII编码,其16进制数为8‘h3A
RECLEN
该区域使用2ASCII编码的16进制数字来表示数据域的字节个数。最大值为
0xFF H 4646 (十进制255)
LOAD OFFSET
该区域使用4ASCII编码的16进制数字来表示数据域的第一个数据存放的偏移
地址。
RECTYP
ASCII编码字符为00,其16进制编码为H3030,它指示该文件记录类型为数据记
录。
CHKSUM
    校验和为RECLEN, LOAD OFFSET, RECTYP, DATA 区域以字节为单位,求和,模除256,取反,加1
比如下面的一条数据记录
:0C032400787FE4F6D8FD75813402036B8D
0C    LOAD RECLEN是此行记录数据的字节数目,表示记录的数据域有12个字节的INFO
DATA。最大为0xFF或者255
0324  是本条记录的数据在内存<将要烧写的eprom地址>中的起始地址.
      OFFSET只用于数据记录。其他类型的记录中,不使用这个域,应该被编码为4ASICC
码‘0000’或者030303030H
00      是记录类型,00表示是一个数据记录
787F 036B 是数据域
8D    是此条记录的效验和
校验和计算过程:
第一步,求各字节的和(不包括冒号,不包括最后一个字节即校验和本身)
        0C+03+24+00+78+7F+E4+F6+D8+FD+75+81+34+02+03+6B = 11‘h673
第二步,模除256
    11’h673 mod 9’h100 = 8‘h73
第三步,各位取反
    not (8’h73) = not(8’b0111_0011) = 8’h1000_1100 = 8’h8C
第四步,加1即得到校验和
    8’h8C + 1 = 8’h8D
3.2.文件结束记录01(8-, 16-, or 32-bit formats)
一个Intel HEX文件必须有且仅有一条文件结束记录,其类型域必须是01。没有数据即长度域为00,数据域没有。该记录必须是文件的最后一行,每个文件有且仅有一条文件结束记录。
通常一条文件结束记录除了类型域(01),校验和域,其他域都为0,例如 :00000001FF
00是记录中数据字节的数目
0000这个地址对于EOF记录来说无任何意义
01记录类型是01(文件结束记录标示)
FF是效验和计算如下01h + NOT( (00h + 00h + 00h + 01h) mod 100h).
字符
:
ll
aaaa
tt
cc
英文描述
RECORD
MARK
hex字符串是什么
RECLEN
00
LOAD
OFFSET
0000
RECTYP
01
CHKSUM
区域
冒号为
起始标志
长度域
length
地址域
address
类型域
type
校验和域
check sum
ASCII
固定为00
固定为0000
固定为01
FF
16进制
3A
3030
30303030
3031
4646
字节长度
1 byte
1 byte
2 bytes
1 byte
1 byte
RECORD MARK
该区域为‘:’的ASCII编码,其16进制数为H3A
RECLEN
由于文件结束记录不包含任何INFODATAASCII编码字符为00,其16进制
编码为H 3030
LOAD OFFSET
由于文件结束记录不使用该区域,ASCII编码字符为0000,其16进制编码为
030303030H
RECTYP
ASCII编码字符为01,其16进制编码为H3031,它指示该文件记录类型为文件结
束记录。
CHKSUM
校验和为RECLEN, LOAD OFFSET, RECTYP 区域以字节为单位,求和,模除256,取反,加1。由于文件结束记录各域都是静止不变的,所以CHKSUM可以静态计算出来,为HFF
3.3.Extended Segment Address Record02 (16- or 32-bit formats)
字符
:
ll
aaaa
tt
[dd…]
cc
区域
冒号为
起始标志
长度域
length
地址域
address
类型域
type
数据域
data
校验和域
check sum
ASCII
02
0000
02
16进制
3A
3032
30303030
3032
字节长度
1 byte
1 byte
2 bytes
1 byte
N bytes
1 byte
RECORD MARK
该区域为‘:’的ASCII编码,其16进制数为H3A
RECLEN
该区域使用2ASCII编码的16进制数字来表示数据域的字节个数。最大值为
0xFF 4646H (十进制255)
LOAD OFFSET
由于扩展段地址记录不使用该区域,ASCII编码字符为0000,其16进制编码为
030303030H
RECTYP
ASCII编码字符为02,其16进制编码为H3032,它指示该文件记录类型为扩展段
地址记录。
CHKSUM
    校验和为RECLEN, LOAD OFFSET, RECTYP, USBA区域以字节为单位,求和,模除256,取反,加1
3.4.扩展线性地址记录(HEX386)04
扩展线性地址记录也可称为 32位地址记录    HEX386记录,这个纪录包含高16(16-31)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样:
:02000004FFFFFC
02    是记录的数据字节数目

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。