STM32 HEX 文件格式解析

以*.hex为后缀的文件文件我们称之为HEX文件。HEX的英语原始意思是16进制。这种文件格式主要用于保存单片机固件。
hex文件内容: 
STM32 HEX 文件格式解析
整个文件以行为单位,每行以冒号开头,内容全部为16进制码,2个 ASCII码字符表示1个Hex字节。
:02 0000 04 0800 F2
1、每行以冒号开头
2、第1字节0x02表示数据区的字节个数,用ASCII表示就是4个ASCII字符。
3、第2、3字节0x0000 表示偏移地址或无用填0
4、第4字节0x04表示本行记录的类型
  • '00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
  • '01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
  • '02' Extended Segment Address Record: 用来标识扩展段地址的记录
  • '03' Start Segment Address Record: 段地址 STM32不用
  • '04' Extended Linear Address Record: 用来标识扩展线性地址
  • '05' Start Linear Address Record: 程序启动运行的地址
5、5-6字节表示数据区
6、最后1个字节是校验字节。所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和
 
重点分析hex文件的前面2行和最后几行。
:020000040800F2 <------- 首行给出烧录的目标地址的高16位 : 0x0800
:1000000000F000204501000839FE00088D8000083E <------- 烧写到0x0800 0000 处的数据
:1000100019F20008B714000811A40108000000003C <------- 烧写到0x0800 0010 处的数据
-----中间行的格式都相同 -----
:020000040806EC<------- 烧录目标地址的高16位:0x0806
-----中间行省略 -----
:10D1D000201A1A961032102970CBD9F1809A0910B2 <------- 烧写到0x0806 D1D0 处的数据
:08D1E0004B0DF2540124000084 <------- 烧写到0x0806 D1E0 处的数据
:0400000508000131BD <------- 05类型的行对于烧写程序无用。见参看英文。
:00000001FF <------- HEX文件结束行
05 类型: Start Linear Address Record. The address field is 0000, the byte count is 04. The 4 data
bytes represent the 32-bit value loaded into the EIP register of the 80386 and higher CPU.