【STM32】需要用串口进行IAP更新,串口发送数据直接写入flash,不进行SRAM缓冲

如何实现边收边写,利用xmodem、ymodem等协议,我需要写一个怎样的IAP来实现接收写入flash,最好有源码例子,谢谢了... 如何实现边收边写,利用xmodem、ymodem等协议,我需要写一个怎样的IAP来实现接收写入flash,最好有源码例子,谢谢了 展开
 我来答
一剑出血
高粉答主

推荐于2017-11-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
你说的这种方式风险很大。原本IAP就是个高风险的过程,代码从SRAM刷入Flash的过程要谨防断电、动作越快完成越好;你可倒好,一边低速接收一边慢慢改写Flash的内容,将这个高风险的刷机时间人为延长了N倍。
更可怕的是你对Flash完全没有认知,还想不缓冲直接写Flash?连扇区缓冲都不用?整个扇区你不问青红皂白先一股脑擦掉、再慢悠悠地一个字节一个字节接收写入?
这个思路,做做论文、搞搞研究还行,真用到产品里面会坑死一家厂的。
追问
写入flash时会建立一个2k的缓存,我目前想实现IAP,但是我的SRAM只有120k,可是HEX却有300K左右,您说我该怎样去做这个IAP,分次接收(通过xmodem等协议)?初学者,请多多指教
追答
分次接收是肯定的,在分次接收的同时,建议你看看所用单片机的Flash扇区大小,按照扇区大小来定块。例如扇区为2kB,那么可以建立两个2kB的SRAM缓冲区,当A收满后,通讯部分继续用B接收,A部分则进行扇区擦除>>扇区写入操作。B收满后,通讯部分用A接收,B部分进行扇区擦除>>扇区写入操作。

另外Flash应当合理规划分配。例如在Flash充足的情况下,要通过可靠性不高的链路进行IAP,一般来说Flash映像应当包含这么几个部分:
① 基础模块(包括驱动部分、IAP部分和通用底层)
② 应用模块A
③ 应用模块B
例如出厂时烧好应用模块A,基础模块的跳转向量指向模块A地址。IAP的时候,程序代码逐个烧入应用模块B,待全部烧写完成、并且校验无误(至少得有分块CRC和全映像CRC)后,IAP将跳转向量修改到应用模块B。下次再升级则烧写应用模块A,两部分循环切换、一用一备。
这样的好处是IAP过程再怎么被打断,大不了也只是IAP失败而已,产品还能按照前一版本程序正常运行,并且底层支持版本回滚,如果新版本程序有问题还能回退到前一版本。
把爱邮寄过来
2018-09-02
知道答主
回答量:4
采纳率:0%
帮助的人:2322
展开全部
双buf,交替读写,当然如果你外部SRAM够大就直接写SRAM,完成后读出即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-11-09
展开全部
STM32官方有示例程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式