hex文件说明

        在项目学习的时候,烧录生成的工程文件.hex给stm32单片机,需要分析hex文件的内容,并对其中某些数据进行修改。通过学习,了解了hex的格式内容。并记录之

在工程项目中是把程序下载到flash 的 0x0800 0000开头的位置

hex文件说明_第1张图片

这里是生成的.hex文件中的数据。

hex文件说明_第2张图片

例如 第一行数据:020000040800F2,其实质表达的是十六进制的数据0x02 0x00 0x00 0x04 0x08 0x00 0xf2

  1. 第一个字节 0x02表示本行数据的长度;
  2. 第二、三字节 0x00 0x00表示本行数据的起始地址;
  3. 第四字节 0x04表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
  • '00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
  • '01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾

  • '02' Extended Segment Address Record: 用来标识扩展段地址的记录

  • '03' Start Segment Address Record:开始段地址记录

  • '04' Extended Linear Address Record: 用来标识扩展线性地址的记录

  • '05' Start Linear Address Record:开始线性地址记录

     4.然后是数据,0x08 0x00

     5.最后一个字节 0xf2为校验和。

  • 校验和的算法为:计算 0xf2前所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和

       '04'  '05',都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。

HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:

:020000040800F2

:1000000048B6002085010008B1450008252B0108ED

:10001000B9450008C1450008C945000800000000B6

:00000001FF      

对上面的HEX文件进行分析:

第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0800,校验和为F2。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为(0x0800 << 16) = 0x0800 0000后面的数据记录都以这个地址为基地址。

第2条记录的长度为10(16),LOAD OFFSET为0000,RECTYPE为00,说明该记录为数据记录。数据为48 B6 00 20 85 01 00 08 B1 45 00 08 25 2B 01 08,共16个BYTE。这个记录的校验和为ED。此时的基地址为0X0800 0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x0800 0000 + 0x0000 = 0x0800 0000.

第3条记录的长度为10(16),LOAD OFFSET为0010,RECTYPE为00,说明该记录为数据记录。数据为B9 45 00 08 C1 45 00 08 C9 45 00 08 00 00 00 00,共16个BYTE。这个记录的校验和为B6。此时的基地址为0X0800 0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x80000 + 0x0010 = 0x0800 0010.

第4条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识文件的结尾。

你可能感兴趣的:(stm32)