hex文件和bin文件区别

转自https://blog.csdn.net/wordwarwordwar/article/details/77151611

HEX文件和BIN文件是我们经常碰到的2种文件格式。因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的IAP更新,其中要考虑HEX文件和BIN文件,所以需要学习下这两种文件。下面是最近的我的了解,如有不对地方还请指正。

1. HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身
    在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。

2. HEX文件格式
    HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。以下为记录(Record)的具体格式:

Record structure

A record (line of text) consists of six fields (parts) that appear in order from left to right:

  1. Start code, one character, an ASCII colon ':'.
  2. Byte count, two hex digits, indicating the number of bytes (hex digit pairs) in the data field. The maximum byte count is 255 (0xFF). 16 (0x10) and 32 (0x20) are commonly used byte counts.
  3. Address, four hex digits, representing the 16-bit beginning memory address offset of the data. The physical address of the data is computed by adding this offset to a previously established base address, thus allowing memory addressing beyond the 64 kilobyte limit of 16-bit addresses. The base address, which defaults to zero, can be changed by various types of records. Base addresses and address offsets are always expressed as big endian values.
  4. Record type (see record types below), two hex digits, 00 to 05, defining the meaning of the data field.
  5. Data, a sequence of n bytes of data, represented by 2n hex digits. Some records omit this field (n equals zero). The meaning and interpretation of data bytes depends on the application.
  6. Checksum, two hex digits, a computed value that can be used to verify the record has no errors.

看个例子:
     :020000040000FA
     :10000400FF00A0E314209FE5001092E5011092E5A3
     :00000001FF         
       
      对上面的HEX文件进行分析:
      第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基地址。
      第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.
        第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识文件的结尾。
       
        在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4。

3. BIN文件格式
    对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。

4. HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
    对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件 大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。

hex文件大小与STM32中芯片flash大小的关系

转自https://blog.csdn.net/he__yuan/article/details/78036073

之前一直以为STM32flash空间大小和hex文件
相关,以为hex文件大小超过flas大小后程序就会
出问题但是我发现hex文件大于flash也可以正常
下载,有的程序也可以正常运行,有的不可以,所
以经过总结如下:
1、flhex文件其实是个格式规范的文本文件。程序代码

大小与hex文件大小没有绝对的关联性,因为我们在用串

口下载程序时一般都是用的hex文件下载,,所以大家会

以为hex文件大小和flash大小息息相关,hex文件大小超

过了flash大小就会出问题,我也以为是这样,直到最近

我发现有hex文件大于flash的大小但是依然可以写进去,

因为真正烧写进去的是二进制文件,在hex文件中包含了

bin文件的信息

2、hex文件大小和bin文件大小没有决定性关系

hex文件内容很多,其中就包含了bin文件二进制的内容,

所有很多软件都能直接把hex文件转化成bin文件,烧写进flash

的文件不是hex而是一堆bin文件

3、flash大小和bin文件大小息息相关

bin文件就是完全的程序文件,里面包含了所有的程序

内容,bin文件烧写进flash就可以执行,可以用STlink进

入仿真查看相关的flash,就是bin文件内容

关于烧录的hex文件相关推荐

  1. 烧录的HEX文件大于flash存储空间问题

    一.背景 在用一款芯片NRF52832做项目,发现使用Keil编译后的文件大小达到了1M,但是片内flash资源只有512K.结果程序可以正常通过J-link烧写,且运行正常. 芯片资源如下: nRF ...

  2. STM32的烧录和Hex/bin烧录文件解析

    一.STM32的烧录 1. 用IDE工具烧录 可以配置IAR或Keil,用IDE下载.硬件工具需要使用ST-Link(分为SWD或Jtag方式,SWD连线少,比较常用于调试)或J-Link连接到板子的 ...

  3. STM32的烧录和Hex/bin烧录文件解析、烧录文件是被如何存储到MCU中的?

    什么是hex文件 以*.hex为后缀的文件我们称之为HEX文件.hex是intel规定的标准,hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或EEPROM中的程序和数据.是由一行 ...

  4. STM32使用J-LINK下载HEX文件

    使用J-LINK仿真器下载HEX文件到STM32芯片 工具/原料 J-Flash ARM 开发板 J-LINK仿真器 方法/步骤 打开"开始"-"所有程序"-S ...

  5. hex文件详解及常用合并方法介绍

    前言 在很多复杂的系统中,或者多人参与设计的系统中,程序分区必不可免,拿最简单的IAP升级来说,包含两个程序区,BOOT区和APP区,BOOT区的主要职责是引导代码进去APP区执行目标功能,但是在下载 ...

  6. PICKIT 3 烧录hex文件

    软件版本:MPLAB 4.15 烧录工具:PICKIT 3.0 实现:使用PICKIT 3.0 给目标芯片供电并烧录hex文件 1.打开软件MPLAB IPE v4.15,连接PICKIT 3.0 和 ...

  7. STM32、NBIOT、Lora模块烧写方法-Hex文件烧录步骤详解-新大陆物联网设备-NEWLab开发板

    一.概述 基础STM32开发板的烧录步骤,程序烧录是学习途中不可获取的部分,是展示程序效果的重要方式,本文以新大陆STM32开发板为例,演示烧录的过程. 二.烧录步骤 首先,准备好已有开发板一份即ST ...

  8. keil烧录hex文件

    问题现象:keil默认烧录是axf文件,想要烧录hex文件 问题解决:如下图所示:

  9. 单片机学习01_JFlash.exe烧录hex文件操作

    0.用JLINK在电脑上连接STM32板子或者使用SWD模式连接STM32板子 1.首先安装JLINK V5.12版本的驱动,下载链接如下: http://down.drv5.cn/www.drv5. ...

最新文章

  1. 疯狂涨知识!「高并发秒杀」微信抢红包实战案例帮你突破瓶颈
  2. c++ doxygen 注释规范_利用Doxygen给C程序生成注释文档
  3. 数据揭秘中国女性的薪水普遍比男性低,说好的“同工同酬”呢?
  4. 搜索——I’m stuck!(ccf)
  5. 杀入“果链”!闻泰科技取代台厂成苹果MacBook组装供应商
  6. 最大连续子数组和求解问题
  7. Linux基本命令二(帮助命令)
  8. 分析:谷歌不会退出中国市场的8大理由
  9. redis-trib.rb操作命令
  10. Bumped!详解—(Dijkstra堆优化,优先队列实现,结构体重载运算符)
  11. IE图标删不掉,桌面IE删了又有了
  12. C++用户的Cplex使用指南(三)——Cutting stock problem求解
  13. 什么是DirectX?什么是OpenGL?API的作用
  14. 银行数字化转型导师坚鹏:金融场景搭建与营销活动策划培训结束
  15. Python特定场景数据内型“解压”操作
  16. html计算平方米,尺和平方米换算(尺与平方米换算计算器)
  17. 花儿虽然最终凋零,但是依然开过 ——《花束般的恋爱》影评
  18. 通过PyQt5+PyQtWebEngine+pyecharts建立自己的收入支出记账软件
  19. 搭建Prometheus监控报警
  20. 哈工大信息安全概论2021年期末考点

热门文章

  1. 高中通用课是计算机课吗,新高二通用技术课这样上
  2. 007-mysql group by 之 rollup
  3. HP1005激光一体机出现Load tray plain ,A4
  4. 什么是互联网舆情监测分析系统,TOOM舆情监测云服务有哪些内容?
  5. iPad端电子杂志应用发布步骤
  6. Xinxin-python知识回顾
  7. 矩阵的负二分之一次方
  8. stram- list统计(求和、最大、最小、平均)java集合
  9. c语言图像库 俄罗斯方块,C++俄罗斯方块游戏 无需图形库的俄罗斯方块
  10. EGE图形库基础及使用方法