本文框架
- 1. hex文件格式
- 1.1 数据长度
- 1.2 地址域
- 1.3 数据类型
- 1.4 数据域
- 1.5 CRC校验域
本文对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 | 扩展段地址记录 |
04 | 扩展线性地址记录,后续的地址需在此基础上偏移,直到遇到下一个扩展线性地址记录 |
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