HEX文件格式分析

  • Post author:
  • Post category:其他


日常开发工作中hex文件是经常用到的一种文件格式,例如生产部门进行量产程序烧录,那么往往使用的是HEX文件。

下面以stm32生成的hex为例,分析hex的文件格式:

官方定义:

<0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a>

打开一个stm32生成的hex文件:

1)结合格式分析第一行(指定基地址)

:020000040800F2(:02 0000 04 0800 F2)

解析:

“:” –对应格式中的<0x3a>,0x3a就是冒号的ASCII码

“02”–对应数据长度,即长度为2字节

“0000”–对应数据地址,长度为2个字节。Stm32一个32位的芯片两个字节肯定不足以表示地址(要四个),所以这里地址的具体用法要结合后面的数据类型分析。这里为4指定基地址,所以这两个字节并没有什么用。

“04”–对应数据类型,具体的含义见【注释1】,这里的4是指定基地址。

“0800”–对应数据,长度是浮动的,这里是2个字节,和前面的长度相呼应。这里指定的是基地址。当然指定的是高16的地址,如常见的0x0800 0000 ,所以这个基地址<<16使用。

“F2”–对应的是校验结果,result = 256 – (date[0] + … +date[n])% 256 ,0xF2 = 0x100 – (0x02 +0x00 + 0x00 + 0x04 + 0x08 + 0x00)%0x100。

校验范围是从长度到数据结束字节。

“”–对应<0x0d><0x0a>,就是回车和换行。

2)结合格式分析第二行(数据)

第二行开始到文件快结束的绝大部分内容都是对应的数据,即bin文件中所携带的内容,其他例如基地址,文件起始,文件结束等内容是hex文件才有的附加信息。

:10000000600700200D0C0008050400080704000824

(:10 0000 00 60 07 00 20 0D 0C 00 08 05 04 00 08 07 04 00 08 24)

“10”–对应数据长度16,即60 07 00 20 0D 0C 00 08 05 04 00 08 07 04 00 08这16个字节。

“0000”–对应地址,这里类型是数据,准确的说是低16位,高十六位由第一行的04基地址类型指定,上面指定的是0800 这里指定的是0000,那么后面的16个字节的目标位置就是addr = 0x800 << 16 + 0x0000, 即0x0800 0000。

在这里插入图片描述

在这里插入图片描述

“600700200D0C00080504000807040008”–对应的是数据,这里的数据也就是我们实实在在要写入到产品flash中的东西,下面对HEX与BIN文件做简单对比。

在这里插入图片描述

在这里插入图片描述

3)分析最后两行(入口地址和文件结束)

在这里插入图片描述

“:0400000508000189”–对应函数入口地址,可以参考 .map 文件中可以看到以下信息

在这里插入图片描述

“:00000001FF”–对应文件结束。

【20190407补充】

每行数据的地址是两个字节,可以携带64K的数据,但是如果生成的hex准确的说bin数据大于64k,这时候hex会有如何的变化呢,我用内联函数扩大了生成文件的大小,让生成hex远大于64K,结果hex文件的处理如下图所示:

我们看到了,是重新的指定了基地址,新开辟了64K字节的空间,00类型中的数据的<地址>又开始由0000开始累加了,当我们日常自己要处理hex文件,例如自己写离线下载上位机程序,或是IAP目标板程序,这一点要明确,基地址不仅是只会有一条。

【注释1】

‘00’ Data Record 数据

‘01’ End of File Record 文件结束标志

‘02’ Extended Segment Address Record 延伸段地址

‘03’ Start Segment Address Record 起始延伸地址

‘04’ Extended Linear Address Record 扩展线性地址 也就是基地址

‘05’ Start Linear Address Record 程序起始地址也就是程序入口地址(main)

————————————————

参考文章:

【1】https://blog.csdn.net/qq_38646260/article/details/89047473

【2】https://blog.csdn.net/weixin_39752827/article/details/81477686



版权声明:本文为u012017396原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。