CH32V208 OTA升级可否实现AB分区方式

目前OTA带库升级,写入后需要跳转到IAP,将备份区域的OTA文件拷贝到APP应用程序区,能否在IAP直接跳转到备份区域,达到AB分区的效果?

可以,需要改一改OTA升级标志、跳转地址。量产时注意启用读保护。


OTA升级标志和LD中的跳转地址都改了,写入后,IAP 正确读取到写入的升级标志,但是,跳转到APP失败。startup.s是否也需要修改?如何处理?


跳转前需要代码运行在机器模式。进入机器模式有两种方式,①跳转代码在中断服务函数中执行,代码跑在中断中自动获得机器模式权限;②修改.s文件,整个工程都以机器模式权限运行。

如果用方式②,可以参考下图

image.png

跳转前还要注意关闭所有中断使能,包括总中断使能、各个中断单独的使能都要关闭。


icon_rar.gifOTA_A.zip

icon_rar.gifOTA_IAP.zip

icon_rar.gifOTA_B.zip


IAP 和APP使用的是 例程中的?BackupUpgrade_IAP 和?BackupUpgrade_OTA 修改。

烧录 IAP和 APP_A,功能正常,通过蓝牙升级将APP_B写入,跳转失败。

IAP跳转地址?0x0003A000,APP_B 地址?FLASH (rx) : ORIGIN = 0x0003A000, LENGTH = 216K,可以启动,但是蓝牙功能异常,手机APP无法搜索到蓝牙。

IAP跳转地址?0x00004000,APP_B 地址?FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 216K,功能正常




1.png


上面的问题是否和蓝牙库的地址有关?


IAP:0x0000 0000 ~ 0x0000 3FFF

APP_A:0x0000 4000 ~ 0x0003 9FFF

APP_B:0x0003 A000 ~ 0x0006 FFFF


蓝牙库地址与 APP_B 有重叠导致被覆盖,所以造成启动后蓝牙功能异常?


只有登录才能回复,可以选择微信账号登录