名人堂再聚首 2023-03-15 10:32 采纳率: 52.8%
浏览 69
已结题

使用外部Flash进行固件升级

大家好!

我现在要做个软件升级程序,升级的大概流程是这样的:
1、上位机通过RS485发送Hex文件到单片机,单片机需要将这些内容保存在外部Flash存储器中,比如MX25L1605D;
2、接收完文件并校验后根据上位机的指令,重启,擦除旧程序,从外部Flash读取Hex的内容并写入到程序存储器ROM中;
3、程序更新成功则运行新程序,否则仍然运行旧程序(保存在外部Flash中);

因为受内存及ROM的限制,不能使用文件系统,有如下问题要请教下:
1、上位机发送HEX文件时,是按照hex文件的原格式发送吗?比如:一个hex文件的一行是这样的:
:10751E00A019D8A4120056EC2FF0000E0101A06F96,16个数据,起始地址是:0x751E,类型是数据,校验是:0x96,请问上位机在发送时是直接发送这些16进制吗(包括地址)?这个冒号不用发送吧?

2、上位机在发送hex文件时是一次发送一行hex文件内容好还是一次发送固定长度的字节呢?

3、单片机在保存上位机发送来的数据时以什么样的方式保存在外部Flash中比较好呢?每一行的hex内容如何和其他行的区别开来呢?就是在从外部Flash读取hex文件的内容时如何知道哪些数据写入到ROM的哪个区域及数据长度?

在此先谢谢大家了!

  • 写回答

3条回答 默认 最新

  • 少林and叔叔 2023-03-15 11:25
    关注

    针对以上问题:建议你把hex文件转换为bin文件。
    1.bin文件不需要解析,上位机直接读取bin文件的内容,直接发送给单片机。
    2.上位机发送bin文件给单片,最好发送固定长度的字节数据,每次发送自定义帧格式,防止数据出错;
    3.单片机RAM空间不知道有多大,建议先把bin文件放在RAM中,等bin文件收完再写入到flash中。flash一般是按page写入,写入之前还需要先擦除。
    要实现2个镜像文件的启动,还需要修改二次bootloader,比较复杂的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 蓝桥oj3931,请问我错在哪里
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state