Hex文件介绍
- 一、文件格式介绍
- 数据格式
- Hex文件例子
- 常见类型字段
- 二、CRC校验计算
- eg.地址文件CRC计算
- :020000040127D2
- :0200000400FFFB
- eg.数据文件计算
- 三、生成hex文件
- 用Excel生成
一、文件格式介绍
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这个需要手动处理的部分太多了(小尝分享~)