OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6329|回复: 1

关于IAP程序接收代码放到BOOT还是APP中的个人理解,欢迎讨论和指正

[复制链接]

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2020-3-12
在线时间
24 小时
发表于 2023-1-13 11:00:21 | 显示全部楼层 |阅读模式
本帖最后由 liyancao001 于 2023-1-13 11:19 编辑

看了些资料,一般新程序的接收代码都是放到APP中,APP接收验证完毕后把新程序存到新程序缓存flash区域,然后软件复位,然后再由boot程序把新程序数据提取到RAM,然后覆盖到正常程序的FALSH区域,然后跳转。。
但是也可以由BOOT直接接收并存储新程序,流程是:APP收到新程序下载申请后写个FLASH标志然后软件复位到boot,boot查询到FALSH更新标志位后发出允许发送程序的握手指令,然后开始接收数据到RAM,接收完毕并校验后直接覆盖到正常程序的FALSH区域,然后跳转。。
由此整理了下两种方式差异:
BOOT接收 APP接收
RAM占用 不占用APP中RAM 需要定义RAM来接收APP数据
FLASH占用 FLASH不需要缓存程序区,节省FLASH 需要把FLASH分为3部分:boot+正常APP区+缓存APP区
允许APP大小 原则上等于整个FLASH区域减去boot大小 小于整个FLASH的一半
接收新程序数据时其他程序能否正常执行 不可以 可以,适合通信线路不稳定、低速等需要大量传输时间的场景
boot程序大小 稍大,包含通讯接口初始化 很小,可以只用到FLASH+时钟等,大概十几K以内
整个流程复杂度 简单,只需要RAM读取,然后写入FLASH 稍复杂,先APP的RAM读取并写入备份FLASH,然后BOOT再RAM读取并写入正常程序FLASH

1)关于RAM,由于我在测试的平台是STM32F767ZGT6,RAM乱七八糟加起来也就500K+,而后面一页flash区域就是256KB,写入时就需要至少256KB的RAM来保存程序数据,如果是放到BOOT问题不大,如果是APP就太占用RAM了,(当然也可以定义个比如10K的全局变量+256K的FLASH存储局部变量,每10K存一次,256K这一页就需要擦写二十多次)
2)关于FLASH,这个一般单片机程序不会太大,我这边感觉100KB以内(bin文件而不是hex)也就差不多了,好像也不必太纠结APP允许大小和FLASH占用等。一般大家限制最大APP大小或者分配的flasl空间是多大呢?
3)应该可以使用dual bank方式把每页flash搞小一点,节省一下ram,这个资料比较少,谁有这方面的资料可以学习呢?或者科普下使用方法和流程?谢谢。
微信图片_20230113111826.png
微信图片_20230113111840.png



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2015-1-7
在线时间
40 小时
发表于 2023-1-14 08:38:58 | 显示全部楼层
APP接收安全可靠,可以验证程序正确才跳转,不容易变砖,但需要双倍空间或外挂Flash芯片;BOOT接收适合Flash空间不大的情况,但搞不好容易变砖。具体模式看项目和应用环境决定,也有2种方式同时兼容的,毕竟BOOT做此模式也占不了多少空间。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 20:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表