🔥 Intel HEX 文件格式分析

📌 核心概念

HEX 文件是一种 ASCII 文本格式的固件文件,常用于:

  • 单片机程序烧录
  • BootLoader升级
  • Flash存储器写入

常见编译器:

  • KEIL
  • IAR
  • GCC ARM

生成的目标文件经过转换后即可得到 Intel HEX 文件。


🧱 一、Intel HEX整体结构

每一行称为一个 Record(记录)

格式如下:

:LLAAAATTDD...DDCC

例如:

:100000000C94E94B18951895189518951895189518950E

Record结构

字段大小说明
MARK1 Byte起始符 ‘:’
RECLEN1 ByteData长度
OFFSET2 Byte偏移地址
RECTYP1 ByteRecord类型
DATAN Byte数据内容
CHKSUM1 Byte校验和

📦 二、字段详解

MARK

:

固定字符:

0x3A

表示一条 Record 开始。


RECLEN

数据长度。

例如:

:10...

表示:

0x10 = 16 Bytes

DATA部分长度为16字节。


OFFSET

记录数据相对于当前基地址的偏移。

例如:

4800

表示:

offset = 0x4800

RECTYP

记录类型。

决定当前Record用途。


DATA

真正的数据内容。

长度必须与:

RECLEN

一致。


CHKSUM

校验和。

计算方式:

checksum = 0x100 - ( sum(all bytes) % 0x100)

例如:

:020000020000FC

计算:

0x02 + 0x00 + 0x00 + 0x02 + 0x00 + 0x00 = 0x04
0x100 - 0x04 = 0xFC

🗂 三、Record Type 类型表

Type名称说明
00Data Record数据记录
01End Of File文件结束
02Extended Segment Address扩展段地址
03Start Segment Address开始段地址
04Extended Linear Address扩展线性地址
05Start Linear Address开始线性地址

📡 四、扩展线性地址记录(Type=04)

用于32位地址空间。

结构:

:02000004ULBACC

字段:

字段
RECLEN02
OFFSET0000
RECTYP04
DATAULBA

示例:

:020000040800F2

解析:

ULBA = 0x0800

得到:

LBA = ULBA << 16 
= 0x08000000

📡 五、扩展段地址记录(Type=02)

结构:

:02000002USBACC

地址计算:

SBA = USBA << 4

示例:

USBA = 0x1000

得到:

SBA = 0x10000

🎯 六、数据记录(Type=00)

结构:

:LLAAAATTDD...DDCC

其中:

TT = 00

解析:

RECLEN = 0x10
OFFSET = 0x4800
TYPE = 00

数据:

9004002055940008599200085B920008

📍 七、数据地址计算

Linear模式

地址:

Address = LBA + OFFSET + Index

即:

(LBA + DRLO + DRI) MOD 4G

Segment模式

地址:

Address = SBA + OFFSET + Index

即:

(SBA + DRLO + DRI) MOD 64K

🚀 八、开始线性地址记录(Type=05)

用于指定程序入口地址。

结构:

:04000005EIPCC

示例:

:0400000508009465F6

入口地址:

0x08009465

🚀 九、开始段地址记录(Type=03)

用于8086架构。

结构:

:04000003CSIPCC

其中:

前16位 -> CS
后16位 -> IP

🏁 十、文件结束记录(Type=01)

结构:

:00000001FF

固定格式:

字段
RECLEN00
OFFSET0000
TYPE01
CHKSUMFF

表示:

HEX文件结束

🧠 开发重点记忆

① STM32最常见

Type 04 + Type 00 + Type 01

② 真正的数据都在

Type 00

③ Flash地址计算

实际地址 = ULBA << 16 + OFFSET

④ STM32程序入口

通常:

0x08000000

开始执行。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注