hex文件格式解析

本文详细介绍了IntelHEX文件格式,包括数据长度、地址域、数据类型(如数据记录、文件结束记录等)、数据域以及CRC校验等内容,为开发者处理和解析这类文件提供指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文对hex文件格式进行解析,介绍各部分组成及其含义,在此mark下,方便后续开发脚本对hex文件进行操作。

1. hex文件格式

Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据[百度百科]。
在这里插入图片描述
Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列:
:llaaaatt[dd…]cc
从“:”后依次为数据长度、地址、数据类型、数据内容及CRC校验值信息。

1.1 数据长度

ll 是数据长度域,代表记录当中数据字节(dd)的数量。
在上图红圈②中,即表示有16个Byte的数据长度。

1.2 地址域

aaaa 是地址域,代表记录当中数据的起始地址。
需要注意需要在扩展线性地址基础上偏移后才是最终的地址。

1.3 数据类型

tt 是代表HEX记录类型的域,可能是以下数据当中的一个:

类型含义
00数据记录,即本行携带的有数据信息
01文件结束记录,在hex文件的末尾出现
02扩展段地址记录
03起始段地址标识
04扩展线性地址记录,后续的地址需在此基础上偏移,直到遇到下一个扩展线性地址记录
05开始线性地址记录(‌Start Linear Address Record)‌

当出现数据类型为“02”及“04”时,需要进行地址偏移,直到出现一个新的段地址或者线性地址,再重新变更偏移地址。
数据实际物理地址为:线性地址左移16位+段地址左移4位+偏移地址
地址计算示例:

:02000004010BEA 线性偏移地址:0x010B
:020000021FFFBD 扩展段地址:0x1FFF
:0401000090FFAA5502 数据地址:0x0100

基地址:010B左移16位,0x010B0000;
扩展段地址:1FFF左移4位,0x0001FFF0;
数据偏移地址:0x0100;
实际物理地址=基地址+扩展段地址+偏移地址=0x010D00F0。

1.4 数据域

dd 是数据域,它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符。

1.5 CRC校验域

cc 是校验和域,表示这个记录的校验和。
校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。

计算示例:
在这里插入图片描述
在上图中第二行CRC前所有数据的和:
0x10+0xEF+0x80+0xA5+0xA5+0xA5+0xA5+0x01 = 0x414 = 1044
checksum = 256 - sum_of_hex % 256 = 236 =0xEC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Autosar汽车电子进阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值