当前位置: 首页 > backend >正文

辉芒微离线烧录器“文件格式错误”问题解决

最近在使用辉芒微离线烧录器烧录程序时,提示“文件格式错误”,记录一下解决方法。

一、问题现象

经过多次尝试和排查,发现以下几种情况:

  • 情况一:使用离线烧录器导入固件1(boot程序),可以顺利导入到离线烧录器,且将固件烧录到芯片后可正常运行。

  • 情况二:使用离线烧录器导入固件2(app程序),同样可以导入到离线烧录器。

  • 情况三:使用离线烧录器导入固件3(app程序去除IAP部分,地址也更改为没有IAP的情况),可以导入到离线烧录器,且将固件烧录到芯片后可正常运行。

  • 情况四:当尝试使用离线烧录器一起导入固件1与固件2时,却提示“文件格式错误”。

请添加图片描述

从以上现象可以初步判断:问题可能出在固件2中。

二、排查

为了进一步确定问题所在,我将固件1与固件2分别导入到J-Flash中进行查看。以下是导入后的hex文件显示情况:

  • 固件1导入到J-Flash hex文件显示:
    在这里插入图片描述

固件1的起始地址为0x08000000。

  • 固件2导入到J-Flash hex文件显示:
    在这里插入图片描述

固件1的起始地址为0x08003800。

在查看hex文件时,我发现了一个关键问题:起始地址为0x08003800的固件2,在地址为0x08001000的地方有数据定义。这表明固件2在0x08001000地址的数据定义会覆盖固件1在地址0x08001000的内容。

三、问题结论

经过上述排查,可以明确问题的原因:在使用离线烧录器合并两个固件时,固件2在0x08001000地址的数据定义覆盖固件1在地址0x08001000的内容,从而导致离线烧录器提示“文件格式错误”。

四、解决方案

针对这一问题:我采取了以下解决方法:

  • 1、调整数据存放位置:在项目中,我将固件2中定义在0x08001000的数据存放到了其他地方,避免了地址冲突。这种方法简单直接,适用于对固件2的数据存放位置有调整空间的情况。

  • 2、合并IAP与APP:另一种方法是将IAP与APP进行合并。以下是几种常见的合并方法:

    • 方法一:使用专门的合并工具,按照指定的地址和格式将IAP和APP合并为一个完整的固件文件。这种方法操作相对简单,但需要找到合适的合并工具。

    ① 可以使用二进制文件合并工具,将IAP和APP的bin文件拖入工具界面,设置好偏移量等参数后进行合并。
    ②使用J-Flasj等烧录软件,先将IAP程序烧录到芯片,再将APP程序烧录到指定地址,最后统一读取出来保存为一个文件。
    ③使用ST-LINK Utility或STM32CubeProg等工具,先分别烧录IAP和APP程序,再读取合并后的程序文件。

    具体方法可参考:
    STM32合并烧录IAP+APP
    IAP与APP合并为一个烧写文件-STM32实测
    IAP代码和APP代码合并烧录过程示范
    IAP、APP程序拼接,及Hex/Bin格式互转

    • 方法二:手动编辑hex文件,将IAP和APP的内容按照地址顺序合并到一个文件中。这种方法需要一定的hex文件编辑经验,但可以更灵活地控制合并过程。

    具体方法可参考:
    合并STM32 iap的hex文件合并为一个hex文件

五、总结

遇到以上分析和解决过程,我们成功解决了辉芒微离线烧录器“文件格式错误”的问题。在实际开发过程中,遇到类似问题时,可以通过以下步骤进行排查和解决:

  • 1、单独测试固件:分别测试每个固件,确定单个固件是否可以正常导入和烧录。

  • 2、检查地址冲突:使用工具查看固件的hex文件,检查是否存在地址冲突。

  • 3、调整或合并固件:根据实际情况,调整数据存放位置或合并固件,避免地址冲突。

希望以上经验能为遇到类似问题的开发者提供参考。

http://www.xdnf.cn/news/5118.html

相关文章:

  • 代采系统:定义、优势与未来趋势
  • 屎上雕花系列-2nd
  • Windows 忘记密码怎么办?
  • Java Stream API 深度解析:从入门到高阶应用
  • 关于VScode的调试
  • YOLO使用CableInspect-AD数据集实现输电线路缺陷检测
  • C++结构体介绍
  • C# NX二次开发:宏录制实战讲解(第一讲)
  • Jetpack Compose 状态管理:为什么 `by viewModel.state` 能自动刷新界面?
  • C语言实现三子棋
  • java volatile关键字
  • LINUX CFS算法解析
  • YOLO目标检测算法
  • 麦角硫因:全能型护肤成分的技术突破与应用前景
  • 数据链路层服务
  • 基础RNN网络详解
  • 餐饮行业新风口:上门厨师服务系统的技术实现路径
  • 机器视觉的平板电脑屏幕组件覆膜应用
  • canoe的安装总结
  • requests库
  • 【笔记】BCEWithLogitsLoss
  • [Windows] 摄像头分身工具【CamSplitter】
  • upload文件上传
  • ES6新增Set、Map两种数据结构、WeakMap、WeakSet举例说明详细。(含DeepSeek讲解)
  • 【PINN】DeepXDE学习训练营(18)——operator-diff_rec_unaligned_pideeponet.py
  • 安全核查基线-1.LPD服务
  • 【软件设计师:体系结构】15.计算机体系结构概论
  • 将/root下的employee.json挪到/home/Downloads/
  • 让模型具备“道生一,一生二,二生三,三生万物”的现实实用主义能力
  • Stagehand:AI驱动的下一代浏览器自动化框架