:
① HEX文件以ASCII码的形式显示16进制数据。
② HEX文件每一条记录都是固定格式,以“:”开头,数据部分分为5个区域:
前2位是数据长度域,
接着是4位的地址域,
接着是2位的数据类型域,
再是数据区域,长度在最前面的数据长度域定义,
最后是2位校验位。
校验方法是:所有数据视为16进制的数据,再相加和为0。
③ 数据类型域只能是如下6种数据:
00 数据记录
01 文件结束记录
02 扩展段地址记录
03 开始段地址记录
04 扩展线性地址记录
05 开始线性地址记录
④ 虽然有6种类型,但是并不是都会出现,有的是特定架构的芯片独有的。对单片机来说,02这个类型似乎没有什么用处,Intel的资料如下:
类型02的计算方法是 02所指定的16位地址,左移4位,再与00类型记录的地址相加,得到内存地址。
类型 03 也没有用处,资料如下:
大概是8086/80186有用吧。
⑤ 还剩4个类型,可以完全解读单片机生成的HEX文件了,如图下两张图所示:
第一条记录是 04 这个类型,它标记了写入内存地址的高16位。将数据域左移16位得到0x00020000,我们记住它,因为这个地址不再出现了,他是以后地址的高16位。
以后的几乎都是00这个类型,属于数据,它跟二进制bin文件是相同的,只是它是ASCII码。
第一条意思是:在地址是 0x0002C000的数据,有16个,分别是:
0x50 0x48 0x00 0x20 0x8D 0xC2 0x02 0x00 0x95 0xC2 0x02 0x00 0x97 0xC2 0x02 0x00
最后倒数第二条记录,类型是 05,可以解读地址是 0x0002C201,代表函数入口地址,参考Intel的资料,感觉对单片机也没用。
最后一条的类型是01,代表整个HEX文件结束.
下面的图是bin文件跟HEX文件的对比,可以看出bin文件跟HEX的00类型里面的数据域内容相同。