Hex文件介绍及制作

发布时间:2023年12月27日

一、文件格式介绍

Hex文件是一种十六进制文件格式,可由notpad++打开或者HexView app打开进行查看数据,以下以Notpad++打开为例

数据格式

:llaaaatt[dd...dd]cc

其中:

:”:记录开始标志。
ll”:长度字段,表示后面数据字段的长度(以字节为单位)。
aaaa”:地址字段,表示数据在内存中的地址(以字节为单位)。
tt”:类型字段,表示记录的类型。不同的类型对应不同的数据含义。
dd…dd”:数据字段,表示实际的数据,长度由长度字段指定。
cc”:校验和字段,用于检测数据的正确性。

Hex文件例子

在这里插入图片描述
:020000040127D2

长度字段为 02 字节,表示后面的数据长度为2个字节。(即0127 为2个字节)
地址字段为 0000,表示起始地址为0。
类型字段为 04,表示这是扩展线性地址记录。
数据字段为 0127,表示高位地址(扩展线性地址的值)。
校验和字段为 D2

:20FF000000000001010200000025FF000A01C6CDBEFA5C75151A99EF969C96FE0D2CE1D922
长度字段为 20 字节,表示后面的数据长度为32个字节。
地址字段为 FF00,表示起始地址为0xFF00。
类型字段为 00,表示这是数据记录。
数据字段包含32个字节,00000001010200000025FF000A01C6CDBEFA5C75151A99EF969C96FE0D2CE1D9
校验和字段22

如果校验和错误在notpad++里会显示飘红
在这里插入图片描述
:00000001FF

长度字段为 00,表示没有数据字段。
地址字段为 0000,没有实际意义。
类型字段为 01,表示文件结束。
校验和字段为 FF
文件结束这一行字段没有实际意义,但是不可少,目前我见过的Hex文件,文件结束字段都如上

常见类型字段

  • 00(数据记录):包含实际的数据。数据的起始地址由地址字段表示。

例如::10 0000 00 0102030405060708090A0B0C0D0E0F10 62

  • 01(文件结束记录):表示文件的结束。通常出现在文件的最后一条记录。

例如::00 0000 01 FF

  • 02(扩展段地址记录):指定后续数据记录的起始地址的高16位。

例如::02 0000 04 0102 F7

  • 04(扩展线性地址记录):指定后续数据记录的起始地址的高16位。

例如::04 0000 00 0127 D2

  • 05(起始线性地址记录):指定程序的起始执行地址

例如::04 0000 05 0102 0000 F4

二、CRC校验计算

eg.地址文件CRC计算

:020000040127D2

在这里插入图片描述

:020000040127D2
除了CRC校验值,其他数据都要参与计算。如上:通过计算020000040127 得出0xD2值
计算公式:即将每个byte的值相加对0x100求余得X(或者"与0xFF"),0x100减去X得到CRC值
计算方式:
step1:0x02+0x00+0x00+0x04+0x01+0x01+0x27=0x2E
step2:0x2E&0xFF=0x2E(或者0x2E%0x100=2E)
step3:0x100-0x2E=0xD2

:0200000400FFFB

在这里插入图片描述
通过计算0200000400FF 得出0xFB值
step1:0x02+0x00+0x00+0x00+0x04+0x00+0xFF=0x105
step2:0x2E&0xFF=0x5
step3:0x100-0x5=0xFB

eg.数据文件计算

在这里插入图片描述
step1:0x20+0x00+0x20+0x00+0x5E+0xED+0x45+0xEC+0x01+0xAA+0xFF+0xFF+0x01+0x02+0x00+0x20+0x00+0x25+0xFF+0xE0+0x01+0x27+0xF8+0xC0+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF+0xFF=0x1560(我用ChatGPT3.5给我算,气死我了,一直算不对,还是得用计算器算,可以用电脑自带的计算器程序员模式计算)
step2:0x1560&0xFF=0x60
step3:0x100-0x60=0xA0

三、生成hex文件

用Excel生成

在这里插入图片描述

C列和D列输入对应数据,F列计算出CRC值,将完成数据计算结果写入E列中
在这里插入图片描述

有飘红的行,将CRC值手动填充成2位,第一位添0
在这里插入图片描述

ps:用excel表格处理少量数据还行,大量数据就不太方便了。使用excel这个需要手动处理的部分太多了(小尝分享~)

文章来源:https://blog.csdn.net/qq_42429142/article/details/135243995
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。