MCU OTA升级流程
本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需要以页为单位进行。
OTA 实现的思路是,代码分为 bootload 、应用代码、OTA数据,三个区域。使用 bootload 代码进行引导,可以通过识别 OTA 标志来决定是直接跳转到应用代码还是搬移OTA数据后跳转(此部分可以自行设计)。应用代码执行期间,如果收到 OTA 数据,要存储到 flash 的 OTA 数据区,并在接收完整个 OTA 数据后,将 OTA 升级标志置位,然后重启 MCU 。重启后,由 bootload 搬运 OTA 数据到 flash 的应用代码区,搬运完成之后跳转到应用代码区。由此实现 OTA 升级。
1. flash分区
可以将 flash 分为 bootload 、应用代码、OTA数据,三个区域。
bootload 代码为最开始要运行的代码,所以此区域的起始地址必须是 0x08000000 。bootload 编译完成后的大小可以作为 bootload 分区大小的依据,一般分为8k就可以了(编译的结果为 2k )。
应用代码和 OTA 数据区的大小需要相等,(64 - 8)/ 2 = 28k,所以应用代码的起始地址是 0x08002000,OTA 数据的起始地址是 0x08009000 。