Intel HEX(ihex)是一种广泛用于微控制器和嵌入式系统编程的文件格式,主要用于存储可执行机器代码或程序数据。这种格式简单、易读,通常由十六进制编码表示二进制数据。以下是对 Intel HEX 文件格式的详细介绍。
1. 基本结构
Intel HEX 文件由多行记录组成,每行记录称为“记录行”,以 ASCII 字符表示,每一行都遵循以下格式:
:LLAAAATT[DATA]CC
:冒号 (0x3A): 每行记录的开头,表示该行为一条有效的记录。
LL (2 字节): 数据字节数(一个记录行中有效数据的字节数,范围 0~255)。
AAAA (4 字节): 数据的起始地址,表示当前记录中数据存储在目标内存的地址偏移量。
TT (2 字节): 记录类型,表示记录的用途(见记录类型说明)。
[DATA] (2×LL 字节): 数据内容,十六进制编码。
CC (2 字节): 校验和,确保数据传输的完整性。
2. 记录类型
TT 字段表示记录的类型,常见的类型如下:
值 (TT) 名称 说明
00 数据记录 (Data Record) 包含实际的数据,用于加载到内存中的目标地址。
01 文件结束记录 (EOF) 指示文件结束,没有数据,仅用于标记结束。
02 扩展段地址记录 提供 16 位段基址,允许表示超过 64KB 的地址空间。
04 扩展线性地址记录 提供 32 位地址的高 16 位,适用于 32 位地址空间。
05 起始线性地址记录 指示代码执行的起始地址,通常用于指定启动向量地址。
3. 详细字段解释
-
数据字节数(LL)
表示当前记录中 [DATA] 的长度,单位为字节,如果没有数据,则 LL 为 00。
-
地址字段(AAAA)
用于指定数据的存储地址,对于扩展段地址记录和扩展线性地址记录,这一字段通常为 0000,地址信息通过扩展记录提供。
校验和(CC)
校验和通过以下公式计算:
1. 计算从 LL 到 [DATA] 字段所有字节的和;
2. 取此和的最低字节(低 8 位);
3. 用 0x100 减去上述结果的低字节,即:
校验和=0x100−((LL+AAAA+TT+DATA 字节总和) & 0xff)
接收方会验证校验和是否正确,确保数据未损坏。
4. 举例说明
以下是一个典型的 Intel HEX 文件示例:
:10000000214601360121470136007EFE09D2190140
:00000001FF
解析第一行:
:10010000214601360121470136007EFE09D2190140
:(冒号): 开头符号。
10: 数据字节数(16 字节)。
0000: 起始地址 0x0000。
00: 记录类型(数据记录)。
214601360121470136007EFE09D21901: 数据内容,共16个字节数据(从左到右默认是MSB)。
40: 校验和。
解析最后一行:
:00000001FF
:(冒号): 开头符号。
00: 数据字节数(0字节)。
0000: 起始地址 0x0000。
01: 文件结束记录 (EOF) 指示文件结束。
FF: 校验和。