Hex文件格式详解

时间:2024-03-19 12:33:35

1.HEX文件

HEX文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成HEX[1]。

2.格式解析

HEX文件的每一行格式均相同,[0x3A][数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte][0x0D][0x0A],

其中,

[数据长度1Byte]表示本行包含的数据长度;

[数据地址2Byte]表示数据地址;

[数据类型1Byte]表示所记录地址类型

00-Data Record,数据记录

01-End of File Record,文件结束记录

02-Extended Segment Address Record,扩展段地址记录

03-Start Segment Address Record,开始段地址记录

04-Extended Linear Address Record,扩展线性地址记录

05-Start Linear Address Record,开始线性地址记录

上面的后两种记录,都是用来提供地址信息的。在有这两种记录的时候,可以根据记录计算出一个基地址。对于后面的数据记录,计算地址的时候均是以这些基地址为基础的。

[校验1Byte]计算校验和之前的所有16进制码的累加和(不计进位),校验和=0x100-累加和。


  3.举例

以本人供测试使用的单片机STM32L151RBT6在keil5下所生成的hex文件为例对此文件进行解析:

Hex文件格式详解Hex文件格式详解

Hex文件格式详解

Line1:020000040800F2

02:本行数据长度;

0000:地址为0000;

04:Extended Linear Address Record扩展线性地址记录,即后面的数据以此为基地址;

0800:扩展线性 地址即基地址为0800(本行数据长度为2);

F2:校验和,在F2之前的所有数据累加和取低字节,计算结果为02+04+08=0E,0x100-0x0E=0xF2;

Line2:100000005004002009010008FD180008CD16000862

10:本行数据长度为0x10即16个字节

0000:偏移地址为0000

00:Data Record数据记录,即此行内容为数据

5004002009010008FD180008CD160008:实际数据,以Line1中的0x8000为基地址,偏移地址为0000,依次存放的16字节数据内容。

62:校验和,10+50+04+20+09+01+08+FD+18+08+CD+16+08=9E(计算结果取低字节),0x100-0x9E=0x62

Line3:......

......

Hex文件格式详解Hex文件格式详解

Hex文件格式详解

Line667::00000001FF

00:此行数据长度为0

0000:地址为0

01:End of File Record,文件结束

FF:校验和为0xFF


参考资料

[1]百度百科:https://baike.baidu.com/item/hex%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F/1025048?fr=aladdin

附上参考文章:http://www.forwhat.cn/post-240.html