STM32 -Bin/Hex文件格式解析

文章目录

  • [1. 概述](#1. 概述)
  • [2. Hex文件](#2. Hex文件)
    • [2.1 格式解析](#2.1 格式解析)
    • [2.2 数据类型](#2.2 数据类型)
    • [2.3 举例解析](#2.3 举例解析)
    • [2.4 合并两个Hex文件方法](#2.4 合并两个Hex文件方法)
  • [3 总结(未完待续)](#3 总结(未完待续))

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 总结(未完待续)

授人以鱼,不如授人以渔

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

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

相关推荐
求知喻19 小时前
KEIL5构建软件最小系统
单片机·嵌入式
MC_J19 小时前
STM32H7 串口 UART/USART从原理到实战
stm32·单片机·嵌入式硬件
学不懂飞行器19 小时前
电赛保姆级教程】从炸管到国一:电赛电源类(DC-DC/单相逆变)硬核避坑与拓扑全指南
stm32·单片机·嵌入式硬件·电赛·fft
大阳12321 小时前
ARM5.(beep,key,中断)
单片机·嵌入式硬件
崇山峻岭之间21 小时前
单片机RNG实验
单片机·嵌入式硬件
JNX_SEMI21 小时前
EG1160:600V半桥驱动,2.5A强驱带保护
stm32·单片机·嵌入式硬件
芯岭技术21 小时前
PY32L020单片机,多种低功耗模式,电流低至 0.7μA,适合电池供电产品
单片机·嵌入式硬件
qq_4294995721 小时前
STM32串口中断接收
stm32·单片机·嵌入式硬件
嵌入式×边缘AI:打怪升级日志21 小时前
串口调试 — printf 重定向与 USART 通信
单片机·嵌入式硬件
M1582276905521 小时前
工业级 CAN 转以太网网关|SG-CANET-210/410,打通 CAN 与以太网,工业通信无边界
单片机·嵌入式硬件·php