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

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

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

一、问题现象

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

  • 情况一:使用离线烧录器导入固件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、调整或合并固件:根据实际情况,调整数据存放位置或合并固件,避免地址冲突。

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

相关文章:

  • CTF-DAY11
  • yolov5如何训练使用MRI 脊椎分割数据集_ 脊椎分割项目解决方法如何 原图,标签分别2460张 实现可视化及评估
  • STM32-TIM定时中断(6)
  • element-ui时间线样式修改
  • Mamba 状态空间模型 笔记 llm框架 一维卷积
  • 云效 MCP Server:AI 驱动的研发协作新范式
  • cnas软件检测实验室质量管理体系文件思维导图,快速理清全部文件
  • 初等数论--欧拉函数及其性质
  • 【谭浩强】第七章第14题
  • 钉钉打卡教程
  • 深入解析网络联通性检测:ping 与 tracert 的原理、用法及实战应用
  • 位运算(二进制中1的个数)
  • 快手618购物节招商启动,国补可叠加跨店满减等大促补贴
  • 算法专题五:位运算
  • 机器学习实操 第二部分 第19章 大规模训练和部署 TensorFlow 模型
  • 关闭 Windows Server 2012 R2 的关机原因提示功能,从而实现直接执行关机或重启操作
  • 二维旋转矩阵:让图形动起来的数学魔法 ✨
  • QT 解决msvc fatal error C1060: 编译器的堆空间不足
  • js 两个数组中的指定参数(id)相同,为某个对象设置disabled属性
  • ROS导航局部路径规划算法
  • 人民时评:透过上海车展读懂三组密码
  • 美联储连续第三次维持利率不变,警示关税影响
  • 公积金利率降至历史低位,百万房贷30年省5万
  • 金融监管总局将推出8项增量政策:涉房地产金融、险资入市、稳外贸等
  • 李公明 | 一周画记:生活就是抵抗
  • 金正恩视察重要坦克厂并强调更迭陆军装备