名人堂再聚首 2023-03-15 10:32 采纳率: 48.7%
浏览 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 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址