• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32如何将flash分为三个区用来做在线升级?

13060939415 2018-04-21 浏览量:2816
现在的想法是将32的flash分为三个区,分别是BootLoader区,程序备份区和运行区,在在线升级时将程序升级到备份区,当升级完成后,再将备份区的程序拷到运行区运行,如果升级失败则直接运行运行区,这样就保证了在线升级失败也可以使程序正常运行老版本,对于这种想法,大家有没有好的建议或者例程。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 完全可以,我现在就是这么做的。IAP程序放在0地址,开机运行,用标志位判断是否需要升级,需要升级则拷贝备份区的程序到运行区,然后跳转到运行区,否则直接跳转到运行区。运行区的首地址根据IAP程序的大小来确定,取整数K的地址。程序空间不足也可以外挂EEROM来存储升级数据。
    • 发布于 2018-04-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:13
  • 直接用0x00000位址分区,到8M左右一个区,然后后面随便分
    • 发布于2018-04-21
    • 举报
    • 评论 0
    • 0
    • 0

  • http://www.openedv.com/forum.php?mod=viewthread&tid=267436,这里面有个同样问题。是可以将FLASH分成几个区,用来升级程序用,而且有保障措施,避免升级失败无法工作的情况
    • 发布于2018-04-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 地址分区就行,用指针进行地址的跳转
    • 发布于2018-04-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 分区是软件定义的,这个根据你自己的需求来做
    • 发布于2018-04-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 这样是可以的,但是要将片内的flash划分区域的话,必须要按照flash的页地址划分,小容量和中容量的flash的每页只有1k大小,大容量的flash每页是2k大小(这是以103来说的)。你的IAP程序和APP程序在你新建工程后可以在工程管理面板设置你的程序代码存放处,至于备份区域你只要预留出多余的flash空间后,使用flash函数库直接读写操作就好了。
    • 发布于2018-04-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 完全可以实现的,只是你的程序不可以太大了,要满足STM32的Flash大小的分配。boot可能会比较小,但是其他两个区的大小 应该是一样大的。
    • 发布于2018-04-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个方式真的是很妙啊。很受启发。

    关键应该是要选择flash很大的芯片,不可太小,否则存不下这三段的程序

    • 发布于2018-04-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 将地址进行分区处理,使用不同的地址存放不同的升级数据,升级的时候进行校验,校验没有问题的话直接指针跳转运行
    • 发布于2018-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种方法比较合理,注意空间大小要分配正确
    • 发布于2018-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以的,在bootloader那里加一个跳转就行,不过要注意程序不要写越界
    • 发布于2018-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 理论上可行,修改BOOTloader增加跳转信息就好了,但实际上ST的芯片中的FLASH有专门一段数据是给系统调用的,用户绝对不能修改,否则芯片会坏。

    • 发布于2018-04-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 你需要制作适合你自己的bootload就可以实现
    • 发布于2018-04-30
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32如何将flash分为三个区用来做在线升级?