原创 STM32之Hex文件格式解析

2019-10-10 10:43 3532 15 3 分类: 软件与OS 文集: 程序设计

Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。Hex文件可以按照如下的方式进行拆分来分析其中的内容:

  例如:

  :020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA

  第一个 0x02 为数据长度。

  紧跟着后面的0x00 0x00 为地址。

  再后面的0x04为数据类型,类型共分以下几类:

  '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

  然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。

  HEX文件的每一行都是这样的格式:

  

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

 在例如:

  :1000000018F09FE518F09FE518F09FE518F09FE5C0

  按照上面的数据行格式分析如下:

  

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

 每行中的数据并不是一定有的,第二个字节数据长度为0,那么这行就没有数据。

  由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,就有了Extended Linear Address Record。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。例如:

  :020000040004F6

  :1000000018F09FE518F09FE518F09FE518F09FE5C0

  :1000100018F09FE5805F20B9F0FF1FE518F09FE51D

  第一行,是Extended Linear Address Record,里面的数据,也就是基地址是0x0004,第二行是Data Record,里面的地址值是0x0000。那么数据18F09FE518F09FE518F09FE518F09FE5要写入FLASH中的地址为 (0x0004 << 16) | 0x0000,也就是写入FLASH的0x40000这个地址。同样,第三行的数据的写入地址为0x40010。当一个HEX文件的数据超过64k的时候,文件中就会出现多个Extended Linear Address Record。

  End of File Record 行是每一个HEX文件的最后一行。例如:

  :00000001FF

  这样的一行数据内容是固定的,数据长度为0,地址为0。

  校验值:每一行的最后一个值为此行数据的校验和。例如:

  :1000000018F09FE518F09FE518F09FE518F09FE5C0 这行中的 0xC0

  :1000100018F09FE5805F20B9F0FF1FE518F09FE51D 这行中的 0x1D

  校验和的算法为:计算从0x3A 以后(不包括0x3A)的所有各字节的和模256的余。即各字节二进制算术和,不计超过256的溢出值,然后用0x100减去这个算数累加和,得出得值就是此行得校验和。

如手头的STM32 HEX 第一行 020000040800F2

start addr= (0x0800<<16)=0x0800 0000.这个地址就是编译器里面IROM1的Start地址。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

curton 2019-10-10 22:32

非常好 学习了
相关推荐阅读
minicaihong 2020-10-22 16:44
场效应管放大电路的直流偏置电路详解
什么是偏置电路晶体管构成的放大器要做到不失真地将信号电压放大,就必须保证晶体管的发射结正偏、集电结反偏。即应该设置它的工作点。所谓工作点就是通过外部电路的设置使晶体管的基极、发射极和集电极处于所要求的...
minicaihong 2020-10-22 16:37
场效应管偏置电路-场效应管偏置电路的工作原理及作用分析
什么是偏置电路晶体管构成的放大器要做到不失真地将信号电压放大,就必须保证晶体管的发射结正偏、集电结反偏。即应该设置它的工作点。所谓工作点就是通过外部电路的设置使晶体管的基极、发射极和集电极处于所要求的...
minicaihong 2020-10-22 16:27
MOS管偏置电路-MOS管直流、恒流等偏置电路图文及方程详解
MOS管偏置电路MOS管直流偏置电路MOS管的单电源直流偏置电路有两种:1、只能用于结型和耗尽型MOS管的自给偏置电路。2、可用于各种MOS管的分压式偏置电路自给MOS管偏置电路(1)图解法根据图中电...
minicaihong 2020-05-27 09:50
sprintf 格式化字符串
sprintf 格式化字符串好久没写博客了,又遇到自己觉得很傻的问题,格式化字符串还要找下定义和用法sprintf() 函数把格式化的字符串写入变量中。arg1、arg2、++ 参数将被插入...
minicaihong 2020-05-25 15:07
12T和1T的单片机
标准51是12T的,就是说12个时钟周期(晶振周期,例如12M的,周期是1/12M,单位秒),机器做一个指令度周期,刚好就是1/12M*12=1uS,常见指令例如nop就是一个周期,刚好1uS,其他的...
minicaihong 2020-05-23 16:22
4HC595驱动8*8点阵屏
74HC595驱动8*8点阵屏置顶 菜袅1号 2020-05-19 10:00:03   52   收藏展开该项目使用国产M0核单片机,驱动方式类似于stm32平台;点阵驱动芯片:...
EE直播间
更多
我要评论
1
15
关闭 站长推荐上一条 /3 下一条