0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机Hex文件的格式详解

STM32嵌入式开发 来源:STM32嵌入式开发 2023-09-24 11:50 次阅读

单片机的朋友都会使用hex文件作为烧录文件。那么当我们写一个在线升级软件要支持hex文件的升级,就需要通过hex文件转成bin文件进行传输,那么hex文件的格式和知识就必不可少了。

Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。

1 Hex文件记录格式

以行为单位,每行以冒号开头,内容全部为16进制码,以ASCII码形式显示。

在HEX文件里面,每一行代表一个记录。记录的基本格式为如表所示:

wKgZomUPslGAR0WpAAALDyN76m8322.png

wKgaomUPslGALBYWAABsglzcKGw348.png

Start code一个字符,ASCII冒号:。

Byte count两个十六进制数字(一个十六进制数字对),表示数据字段中的字节数(十六进制数字对)。最大字节数为 255 (0xFF)。16 (0x10) 和 32 (0x20) 是常用的字节数。

Address四位十六进制数字,表示数据的 16 位起始内存地址偏移量。数据的物理地址是通过将此偏移量添加到先前建立的基地址来计算的,从而允许内存寻址超出 16 位地址的 64 KB 限制。默认为零的基地址可以通过各种类型的记录进行更改。基地址和地址偏移量始终表示为大端值。

Record type两个十六进制数字,00到05,定义数据字段的含义。参考下文

Data一个由n个字节组成的数据序列,由 2n 个十六进制数字表示。一些记录省略了这个字段(n等于零)。数据字节的含义和解释取决于应用程序。

Checksum两个十六进制数字,一个可用于验证记录没有错误的计算值。计算校验和前所有16进制码的累加和。

2 数据记录格式

Intel HEX文件由任意数量以回车换行符结束的数据记录组成.

数据记录外观如下:

[:10246200464C5549442050524F46494C4500464C33]

其中:

10是这个记录当中数据字节的数量。

2462是数据将被下载到存储器当中的地址。

00是记录类型(数据记录)。

464C…464C是数据。

33是这个记录的校验和的补足码。

3 扩展线性地址记录格式(HEX386)

扩展线性地址记录也叫作32位地址记录或HEX386记录。这些记录包含数据地址的高16位。扩展线性地址记录总是有两个数据字节。

外观如下:

[:02000004FFFFFC]

其中:

02是这个记录当中数据字节的数量。

0000是地址域,对于扩展线性地址记录,这个域总是0000。

04是记录类型 04(扩展线性地址记录)。

FFFF是地址的高16位。

FC是这个记录的校验和的补足码。

当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录。线性地址保持有效,直到它被另外一个扩展地址记录所改变。

通过把记录当中的地址域与被移位(16位)的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址。

以下的例子演示了这个过程:

来自数据记录地址域的地址2462
扩展线性地址记录的数据域FFFF0000
---------------------
绝对存储器地址FFFF2462

4 标扩展段地址记录(HEX86)

扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段。扩展段地址记录总是有两个数据字节。

外观如下:

[:020000021200EA]

其中:

02是记录当中数据字节的数量。

0000是地址域,对于扩展段地址记录,这个域总是0000。

02是记录类型 02(扩展段地址记录)。

1200是地址段。

EA是这个记录的校验和的补足码。

当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录。段地址保持有效,直到它被另外一个扩展地址记录所改变。

通过把记录当中的地址域与被移位(4位)的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址。以下的例子演示了这个过程:

来自数据记录地址域的地址  2462
扩展段地址记录数据域  1200
  -----------------
绝对存储器地址        00014462

5 文件结束记录(EOP)

Intel HEX文件必须以文件结束(EOF)记录结束。这个记录的记录类型域的值必须是01。EOF记录外观总是如下

[:00000001FF]

其中:

00是记录当中数据字节的数量。

0000是数据被下载到存储器当中的地址。在文件结束记录当中地址是没有意义被忽略的。0000H是典型的地址。

01是记录类型01(文件结束记录)。

FF是这个记录的校验和的补足码。

6 Intel Hex 完成例子

下面是一个完整的Intel HEX文件的例子:


:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF
看了这个例子,我自己也打开了之前写的51单片机的hex文件:

:2000000002000E75210675225B75230200267B007C00900090758140758901758CF1758A45
:2000200028D28C75A882758CF1758A280BBBFA157B00EC75F00A8485F020F5210CBC64027A
:200040007C00120051C0E0C0D0120051D0D0D0E032E52193F580D2A2C2A27580FED2A3C29C
:20006000A3120087E52093F580D2A2C2A27580FDD2A3C2A3120087227D327E287FF81151AA
:1A008000DFFEDEF8DDF4227E047FF8DFFEDEFA223F065B4F666D7D077F6FBC
:00000001FF

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620836
  • intel
    +关注

    关注

    19

    文章

    3452

    浏览量

    184782
  • HEX文件
    +关注

    关注

    0

    文章

    21

    浏览量

    12668
  • ASCII
    +关注

    关注

    4

    文章

    169

    浏览量

    34529
  • EPROM
    +关注

    关注

    3

    文章

    119

    浏览量

    54129

原文标题:单片机Hex文件的格式

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机中的hex和bin文件

    单片机程序编译之后,除了生成hex文件之外还生成了bin文件,实际它们都是单片机的下载文件,下文
    发表于 07-29 09:21 3635次阅读

    LabView简单程序解析单片机Hex文件

    最近在研究AVR单片机的Bootloader程序,这里牵涉到AVR单片机Flash的存储结构等的问题若干。其中,对于单片机程序生成的Hex文件
    发表于 03-14 11:50

    Hex文件格式是什么意思

    hex文件格式hex文件格式是可以烧写到单片机中,被单片机执行的一种
    发表于 01-12 06:17

    Hex文件格式解析

    hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex
    发表于 03-02 06:34

    51单片机中各种小例子的hex文件

    51单片机基础实验的各种实例的hex文件,能帮助大家从0开始学习51单片机
    发表于 02-26 17:18 62次下载

    GIF文件格式详解

    GIF文件格式详解 GIF文件格式详解 GIF文件格式详解
    发表于 05-24 10:53 2次下载

    Hex格式详解

    Hex格式详解
    发表于 10-31 14:46 10次下载
    <b class='flag-5'>Hex</b>的<b class='flag-5'>格式</b><b class='flag-5'>详解</b>

    单片机hex和bin文件的区别

    单片机程序写好之后,我们都要把程序下载到单片机的内存中,单片机才会按照程序员的逻辑执行命令实现功能。之前也讲过下载单片机的几种方式,比如ISP下载,JTAG下载,下载
    发表于 11-10 17:30 5640次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>hex</b>和bin<b class='flag-5'>文件</b>的区别

    单片机hex和bin文件的区别

    hex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex
    发表于 11-15 09:07 4738次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>hex</b>和bin<b class='flag-5'>文件</b>的区别

    单片机烧录hex文件是如何解析

    含有单片机的电子产品在量产的时候会用到.hex文件或者.bin。hex是十六进制的,包含地址信息和数据信息,而bin文件是二进制的,只有数据
    的头像 发表于 11-07 10:33 6212次阅读
    <b class='flag-5'>单片机</b>烧录<b class='flag-5'>hex</b><b class='flag-5'>文件</b>是如何解析

    STM32--hex文件格式

        hex 是 Intel 公司制定的一种使用 ASCII 文本记录机器码或常量数据的文件格式,它可以烧录到MCU中,被MCU执行的一种文件格式。一个hex
    发表于 12-06 11:21 4次下载
    STM32--<b class='flag-5'>hex</b><b class='flag-5'>文件格式</b>

    单片机中的hex和bin文件

    经过这几步后,程序下载工作就完成了,在以上的步骤中我们并没有选择要把程序下载到单片机的哪块内存中,即不需要设置地址。因为HEX文件内部的信息已经包括了地址。 单片机一般是下载
    的头像 发表于 04-18 10:16 5081次阅读

    STM32单片机Hex、Bin文件的区别及应用详解

        STM32、51等单片机程序经过编译后,生成的hex文件、bin文件,它们都是单片机烧写文件
    的头像 发表于 07-05 17:23 1w次阅读

    单片机hex文件和bin文件有什么不同

    单片机程序编译之后,除了生成hex文件之外还生成了bin文件,实际它们都是单片机的下载文件
    发表于 01-26 16:09 1728次阅读

    单片机hex、bin文件的区别

    单片机hex、bin文件的区别
    的头像 发表于 09-21 17:38 1380次阅读
    <b class='flag-5'>单片机</b>中<b class='flag-5'>hex</b>、bin<b class='flag-5'>文件</b>的区别