• STM32 -Bin/Hex文件格式解析



    1. 概述

    2. Hex文件

    请添加图片描述

    2.1 格式解析

    • 每行以冒号(:)起始,后面每两个字母是一个8bit的16进制数;
    • 每行的格式:BBAAAATTD……DCC:
      • BB 表示本行数据的长度:
      • AAAA 表示本行数据存储的地址;
      • TT 表示数据类型;
      • DD 是实际的数据,它的长度不定(每行以16字节对齐);
      • CC 是校验和(计算方法:本行所有字节累加和(累加和只用低8位)取反再加1);

    2.2 数据类型

    • 数据类型一共有6种形式:

      • '00’数据记录(Hex文件的大部分记录都是数据记录);

      • '01’文件结束记录(标识Hex文件的结尾,放在文件的最后);

      • '02’扩展段地址记录;

      • '03’开始段地址记录;

      • '04’扩展线性地址记录(声明数据存储的高位地址);

      • '05’开始线性地址记录(线性起始地址指定__main(主程序前)函数的地址,通常可忽略);

    2.3 举例解析

    • 第一行 :020000040800F2
      • 02 :表示本行数据的长度为2:
      • 0000 :表示本行数据存储的地址;
      • 04 :表示数据类型为扩展线性地址记录;
      • 0800 :因为本行的数据类型为04,即0800声明了数据存储的高位地址为0x0800;
      • F2 :校验和(计算方法:本行所有字节累加和(累加和只用低8位)取反再加1,即0xF2=0x01 + ∼(0x02+0x04+0x08))
    • 第二行 :10300000E8740020493100085131000853310008AC
      • 10 :表示本行数据的长度为16(可见数据存储以每行16字节对齐);
      • 3000 :表示本行数据存储的地址低位为0x3000,即实际数据的存储地址为0x0800 3000;
      • 00 :表示数据类型为数据记录;
      • E…8 :因为本行的数据类型为00数据记录,DD区即为实际的数据;
    • 第五行 :10FFF00004F086FA974890F82D000090954890F804
      • 10 :表示本行数据的长度为16
      • FFF0 :表示本行数据存储的地址低位为0x3010,即实际数据的存储地址为0x0800 FFF0;
    • 第六行 :020000040801F1
      • 02 :表示本行数据的长度为2:
      • 0000 :表示本行数据存储的地址;
      • 04 :表示数据类型为扩展线性地址记录;
      • 0801 :声明了数据存储的高位地址为0x0801(当地址长度超过16bit 即0xFFFF时,就需要扩展线性地址记录再次声明新的高位地址);
    • 倒数第三行 :0450900004012400F3
      • 04 :表示本行数据的长度为4:
      • 5090 :表示本行数据存储的地址低位为0x5090,即实际数据的存储地址为0x0801 5090;
      • 00 :表示数据类型为数据记录;
      • (此行长度不足0x10,只有0x04,这代表已经到了Hex文件数据的末尾了)
    • 倒数第二行 :04000005080031318D
      • 04 :表示本行数据的长度为4:
      • 0000 :表示本行数据存储的地址;
      • 05 :表示数据类型为开始线性地址记录;
      • 此行内容通常可忽略,官方解释为:
        • 线性起始地址指定__main(主程序前)函数的地址,但不指定启动代码的地址,启动代码通常在调用 SystemInit() 后调用__main。奇数线性起始地址表示 __main 是为 Thumb 指令集编译的。
        • 线性起始地址记录可以出现在十六进制文件的任何地方。在大多数情况下,可以忽略该记录,因为它不包含闪存编程所需的信息。
    • 倒数第一行 :00000001FF
      • 00 :表示本行数据的长度为0:
      • 0000 :表示本行数据存储的地址;
      • 01 :表示文件结束记录(标识Hex文件的结尾,放在文件的最后);

    2.4 合并两个Hex文件方法

    3. Bin文件

    3.1 生成方式

    3.2 合并多个Bin文件方法

    3.3 打开Bin文件方式

    • 使用十六进制文件编辑器(我用的是:Uedit32.exe打开如下图所示:)
      请添加图片描述

    3.4 和Hex文件比较

    • 对比上面打开的Hex文件里的内容,可发现Bin文件内容正好是Hex文件中数据段里的实际数据内容,没有数据长度、存储地址、校验等附加内容,Bin文件内容直接就是闪存内的代码文件,是没有任何附加格式的二进制原始文件

    4 总结


    授人以鱼,不如授人以渔

    这里只提供钓鱼方法而不是一条完整的鱼

    有问题欢迎留言交流 / 指正o( *  ̄▽ ̄ * )ブ

  • 相关阅读:
    JAVA 开发中常用的工具有哪些?
    Docker重量级监控系统CIG - CAdvisor + InfluxDB + Grafana
    Kubernetes网络组件介绍
    Open3D 点云法向量重定向(基于相机位置)
    9.Linux实操指令(压缩和解压缩指令)
    考研数据结构与算法(四)字符串
    (附源码)计算机毕业设计ssmExcel 操作题自动评分系统
    真无线蓝牙耳机哪款好?千元真无线蓝牙耳机推荐
    H5新Api | requestIdleCallback - requestAnimationFram
    05_Docker-Compose
  • 原文地址:https://blog.csdn.net/wenjie2017/article/details/134529959