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文件为例对此文件进行解析:
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:......
......
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