hex 是 Intel 公司制定的一种使用 ASCII 文本记录机器码或常量数据的文件格式,它可以烧录到MCU中,被MCU执行的一种文件格式。一个hex文件由多条记录组成,而每条记录由5个部分组成,
格式如下:
“:aabbbbcc[dd...]ee”
用记事本打开hex文件如下:
:020000040801F1
:1000000018050020050401087D0201087F0201088F
:100010008102010883020108850201080000000036
:10002000000000000000000000000000870201083E
:1000300089020108000000008B0201088D020108FE
:100040001F0401081F0401081F0401081F04010800
:100050001F0401081F0401081F0401081F040108F0
:100060001F0401081F0401081F0401081F040108E0
:100070001F0401081F0401081F0401081F040108D0
:100080001F0401081F0401081F0401081F040108C0
:100090001F0401081F0401081F0401081F040108B0
:1000A0001F0401081F0401081F0401081F040108A0
:1000B0001F0401081F0401081F0401081F04010890
1、“:”:每条记录的开头都使用冒号来表示一条记录的开始;
2、“aa”:表示这条记录的实际数据的长度(16进制表示),即[dd...]中的数据长度;
3、“bbbb”:表示这条记录中的数据写到FLASH中的起始地址;
4、“cc”:表示这条记录的类型,各个类型表示如下:
00:数据记录
01:本文件结束记录
02:扩展地址记录
04:扩展线性地址记录(表示后面的记录按这个地址递增)
05:表示一个线性地址记录的起始地址(只适用于ARM)
5、"[dd...]":表示一个字节的数据,一条记录中有多少个字节数据 ,aa表示它有多少个字节的数据
6、"ee":表示本条记录的校验和,它是前面所有16进制数据(除冒号以外,两个数字为一个字节)和对256取模运算的结果的补码
例如:
1、在上面的第一行hex数据中
02:表示这条记录实际数据的长度是2个字节;
0000:表示这条记录要存储到的地址;
04:表示这是一条扩展线性地址记录;
0801:因为这是一条扩展线性地址记录,所以这部分表示地址的高16位,与前面的“0000”结合在一起,表示要扩展的线性地址为“ 0x08010000”,这是STM32内部FLASH设置的偏移地址地址;
F1:表示校验和,它的值为(0x02+0x00+0x00+0x04+0x08+0x01)%256的值再取补码。
2、在上面的第二行hex数据中:
10:表示这条记录数据区的长度为16字节;
0000:表示这条记录所在的地址,与前面的扩展记录结合,表示这条记录要存储的FLASH首地址为(0x08010000+0x0000);
00:表示这是一条数据记录,数据区的是地址;
18050020050401087D0201087F020108:这是要按地址存储的数据;
8F:校验和
4140

被折叠的 条评论
为什么被折叠?



