之前在做IAP升级有接触到hex文件,现在分享一下。
HEX 文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记录 。 这些记录由对应机器语言码和/或常量数据的十六 进 制编码数字组成。 HEX 文件通常用于传输将被存于ROM 或者EPROM 中的程序和数据。大多数EPROM 编程器或模拟器使用HEX 文件。
先看看一个完整的hex文件
HEX格式文件以行为单位记录数据,每行都由任意数量的十六进制数组成。它们按以下格式排列
格式说明冒号数据每行都由冒号开头A数据长度 1 Byte ,表示本行数据的长度B数据地址 2 Byte ,表示数据的起始地址C数据类型 1 ByteD具体数据 N Byte ,表示本行中数据字节的数量,它和A说明的数据长度一致E校验和 1 Byte ,检验和 = 0x100 - 累加和 数据类型详解‘00’数据记录:用来记录数据,HEX文件的大部分记录都是数据记录‘01’文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾‘02’扩展段地址记录:用来标识扩展段地址的记录‘03’开始段地址记录:开始段地址记录‘04’扩展线性地址记录:用来标识扩展线性地址的记录‘05’开始线性地址记录:开始线性地址记录具体数据分析如下(以keil生成hex文件为例) 1. Hex文件第一行
例::020000040800F2 02:代表本行有2个字节数据 0000:本行数据的起始地址(偏移地址) 04:扩展线性地址标识,表面后面2个字节数据是后面数据的基地址 注:由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,故有了扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录含数据的高16位,扩展线性地址记录总是有两个数据字节。 0800:是扩展地址 (0x0800 << 16) = 0x08000000后面的数据记录都以这个地址为基地址。 F2: 记录本行校验和 F2=0x100-(0x02+0x04+0x08)2. 第二行及中间数据
10:本行有10个byte数据 0000:表示本行数据起始地址为0x08000000。下一行则是0x08000010依次类推 00:数据标识,表示后面字节为记录的数据 48070020CD0100081D0400089D030008:10个byte的数据 DA: 校验和3. 倒数第二行数据
04:表示本行有4个byte数据 0000:表示本行数据起始地址为0x00000000 05: 表示后面存放要执行的下一个指令的地址 080001CD:表示要执行的下一个指令的地址(main函数地址) 21;校验和4. 最后一行
01:标识hex文件结束 注:每一个hex文件都以这个结尾。