stm32 iap 远程升级方案讨论

2019-12-27 19:01发布

我想通过GPRS实现STM32的远程升级,想法是把512kflash分成两个应用程序区,平常工作在A区,如果收到升级数据就先写入B区,全部写完后如果校验通过就在某个位置上置标志位然后重启系统。系统在引导区的时候根据标志位来运行A区或B区。有谁能提供个思路呢???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
100条回答
yzhu
2020-01-02 10:07
出个主意,将Flash分为boot、A、B三个区。

方案1:
A区运行代码时,将升级数据写入B区,然后重启系统;
boot代码查看B区有无代码,
        有的话,将B区的代码重写到A区,并擦除B区的代码,然后重启系统;
        没有的话,直接运行A区的代码;
因为Flash擦除后,读出值均为0x0FF,很容易判断是否有无代码。
这样做的好处是工程设置不必改来改去,缺点是没次升级,需要擦除3次Flash。

方案2:
A区运行代码时,将升级数据写入B区,擦除自己区的某块Flash(固定偏移),然后重启系统;
B区运行代码时,将升级数据写入A区,擦除自己区的某块Flash(固定偏移),然后重启系统;

boot代码查看哪个区有有效代码,就运行那个区的代码。
这样做的好处是只擦除1次,缺点是需要更改工程设置,升级前得确认要升级到那个区。

一周热门 更多>