之前在做IAP升级有接触到hex文件,现在分享一下。
1、简介
HEX 文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记录 。 这些记录由对应机器语言码和/或常量数据的十六 进 制编码数字组成。
HEX 文件通常用于传输将被存于ROM 或者EPROM 中的程序和数据。大多数EPROM 编程器或模拟器使用HEX 文件。
2、格式说明
先看看一个完整的hex文件
HEX格式文件以行为单位记录数据,每行都由任意数量的十六进制数组成。它们按以下格式排列
格式说明 | |
---|---|
冒号 | 数据每行都由冒号开头 |
A | 数据长度 1 Byte ,表示本行数据的长度 |
B | 数据地址 2 Byte ,表示数据的起始地址 |
C | 数据类型 1 Byte |
D | 具体数据 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:本行有16个byte数据 (0x10)
0000:表示本行数据起始地址为0x08000000。下一行则是0x08000010依次类推
00:数据标识,表示后面字节为记录的数据
48070020CD0100081D0400089D030008:10个byte的数据
DA: 校验和
3. 倒数第二行数据
04:表示本行有4个byte数据
0000:表示本行数据起始地址为0x00000000
05: 表示后面存放要执行的下一个指令的地址
080001CD:表示要执行的下一个指令的地址(main函数地址)
21;校验和
4. 最后一行
01:标识hex文件结束
注:每一个hex文件都以这个结尾。
3、其它