HEX文件格式介绍

在单片机编译中,我们经常使用hex文件进行烧录,那么hex文件到底是一个怎样的文件呢?我们简单的介绍一下:
先上图:这是我用Notepad++ 直接打开的一个32bit的单片机编译器编译的一个hex文件的部分,

HEX文件格式介绍

文章插图
ASCII显示

HEX文件格式介绍

文章插图
十六进制显示
不难发现:HEX格式文件以行为单位,每行由“:”(16进制为:0x3a)开始,以回车键结束(16进制为:0x0d,0x0a) 。行内的数据都是由两个字符表示一个16进制字节,比如”08”就表示数0x08;”0a”,就表示0x0a 。对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a” 。
我们把每一行称之为一个Record 。通常一个Record的格式如下:
HEX文件格式介绍

文章插图
 
  • RECORD MARK (第1个字符)
为1个byte,为ASCII的“:”,十六进制为“0x3A” 。
如:
HEX文件格式介绍

文章插图
 

HEX文件格式介绍

文章插图
 
  • LOAD RECLEN (“:” 后的2个字符)
1个byte,表示本行包含的数据的长度 。如:
HEX文件格式介绍

文章插图
 

HEX文件格式介绍

文章插图
 
0x08 :表示本行有8byte的数据 。
  • OFFSET(LOAD RECLEN后的4个字符)
2个byte,表示数据存储的起始地址,如:
HEX文件格式介绍

文章插图
 

HEX文件格式介绍

文章插图
 
这里表示从0x0000地址开始存储8个数据,其中高位地址在前,低位地址在后 。
  • RECTYP(OFFSET后2个字符)
1个byte,表示数据的类型 。该类型总共有以下几种:
00 ----数据记录
01 ----文件结束记录
02 ----扩展段地址记录
【HEX文件格式介绍】04 ----扩展线性地址记录
如:
HEX文件格式介绍

文章插图
 

HEX文件格式介绍

文章插图
 
这里就是0x00即为数据记录 。
  • INFO or DATA(RECTYP后的4个字符)
2个byte,表示本行包含的数据 。如:
HEX文件格式介绍

文章插图
 

HEX文件格式介绍

文章插图
 
该处有16个字符,每2个字符表示一个byte,故此行有8个byte数据,这和前面的LOAD RECLEN所定义的数据长度是统一的 。
  • CHKSUM(INFO or DATA后的2个字符)
1个byte,为校验码 。如:
HEX文件格式介绍

文章插图
 

HEX文件格式介绍

文章插图
 
校验和的算法为:计算0x8D前所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和
即:checksum = 0x100 - (0x08+0x01+0x5A+0x10) = 0x8D 。
每个HEX格式的最后一行都是固定为:(hex文件的末尾一行)
:00000001FF
01表示文件结束记录,FF为校验 。




    推荐阅读