《IntelHEX格式说明》由会员分享,可在线阅读,更多相关《IntelHEX格式说明(7页珍藏版)》请在金锄头文库上搜索。
1、Intel HEX 格式说明Intel HEX 文件是记录文本行的ASCII 文本文件。后缀为.hex 在 Intel HEX文件中 ,每一行是一个HEX 记录 , 它由十六进制数组成的机器码或者数据常量。Intel HEX 文件经常被用于将程序或数据传输存储到ROM ,EPROM 。大多数编程器和模拟器使用 Intel HEX 文件。1.记录详解Intel HEX 文件由若干个数据记录组成,每个字符都是ASCII 字符表示。每一条数据记录以冒号开始, ASCII码为 0x3A ,以一个回车和一个换行结束,回车的ASCII码为0x0d,换行的ASCII 码为 0x0a 。一个 Intel HE
2、X文件可以包含任意多的十六进制记录,每一行为一条记录。每条记录有六个区域。通常记录的格式如下图所示:记录的一般结构下面是一个记录的格式。:llaaaattdd.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 每一组字母是独立的一个域,每一个字母是一个十六进制数
3、字,每一域至少由两个十六进制数字组成,下面是字节的描述:: 冒号是每一 条 Intel HEX记录开始的标志ll是这条记录的长度域,它表示 INFO or DATA域dd的字节 bytes 个数aaaa 是地址域 ,它表示 数据的起始地址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
4、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 是效验和域,表示记录的效验和。计算方法是将本条记录冒号开始后的所有字母对(不包括本效验字
5、本身和冒号)所表示的十六进制数字都加起来然后模除256 得到余数,最后求出余数的补码即是本效验字节cc. 必须注意的是,此处的补码是将余数的8bit 二进制数所有位取反,然后加1。也就是最高位不管是0 还是 1,都要取反。某一条记录的校验和计算过程:第一步,求该行各字节数字的和(不包括冒号,不包括最后一个字节即校验和本身) 第二步,模除256 第三步,各位取反第四步,加1 即得到校验和中的起始地址. OFFSET 只用于数据记录。其他类型的记录中,不使用这个域, 应该被编码为4 个 ASICC 码 0000或者030303030H。00 是记录类型,00 表示是一个数据记录787F 到 036
6、B 是数据域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 H
7、EX 文件必须有且仅有一条文件结束记录,其类型域必须是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 RECLEN 00LOAD OFFSET 000
8、0RECTYP 01CHKSUM 区域冒号为起始标志长度域length 地址域address 类型域type 校验和域check sum ASCII :固定为 00 固定为0000 固定为 01 FF 16 进制3A30303030303030314646字节长度1 byte 1 byte 2 bytes 1 byte 1 byte RECORD MARK 该区域为:的ASCII 编码,其 16 进制数为 H3A。RECLEN 由于文件结束记录不包含任何INFO 或 DATA ,ASCII 编码字符为00,其 16 进制编码为 H 3030。LOAD OFFSET 由于文件结束记录不使用该区域
9、,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 区域冒号为起始标志长度域leng
10、th 地址域address 类型域type 数据域data 校验和域check sum ASCII :02 0000 02 16 进制3A3032303030303032字节长度1 byte 1 byte 2 bytes 1 byte N bytes 1 byte RECORD MARK 该区域为:的ASCII 编码,其 16 进制数为 H3A。RECLEN 该区域使用2 个 ASCII 编码的 16 进制数字来表示数据域的字节个数。最大值为0xFF 或 4646H (十进制 255)。LOAD OFFSET 由于扩展段地址记录不使用该区域,ASCII 编码字符为0000,其 16 进制编码为
11、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 是记录的数据字节数目0000 是地址域这在扩展地址记录中总是0000
12、 04 是记录类型04(扩展地址记录) FFFF 是高 16 位地址FC 是记录效验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh) 当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效, 直到读到下一个扩展线性记录. 绝对内存地址= 数据记录中的地址+ 移位后的扩展线性地址下面举例说明这个过程从数据记录的地址域得到地址2462 从扩展线性地址记录的地址域得到地址FFFF 绝对内存地址FFFF2462 3.5.扩展段地址记录(HEX86) 02 扩
13、展段地址记录也被称为HEX86 记录 , 包含4-19 位的数据地址段, 这个扩展段地址记录总是有两字节数据,如下 : :020000021200EA 02 是记录中的数据字节数目0000 是地址域 ,在扩展段地址记录中,这个域总是0000 02 是记录类型02(扩展段地址的标示) 1200 是该段的地址EA 是效验和计算如下 : 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h). 当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从Intel HEX 文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录绝对内存地址= 数据记录中的地址+ 移位后的扩展段地址数据记录中的地址域移位后扩展段地址记录中的地址域下面举例说明这个过程从数据记录的地址域得到地址2 4 6 2 从扩展段地址记录的地址域得到地址1 2 0 0 绝对内存地址0 0 0 1 4 4 6 2