Bootloader与OTA
OTA :OTA 是 Over-the-Air (空中下载技术 )的缩写,指通过 无线网络 (Wi‑Fi、4G/5G、蓝牙等)远程 为电子设备推送 软件 / 固件更新,无需物理连接电脑或到店维修即可完成升级。
Bootloader :Bootloader(引导加载程序) 是设备上电或复位后,CPU 执行的第一段软件代码 ,是连接硬件与操作系统(或主应用程序)的桥梁。它的核心任务是初始化硬件、加载并启动系统内核 ,为 OTA 升级提供底层支持。
APP:实际需要运行的主要业务逻辑


需要将flash空间进行划分
//boot_config.h
/* ==================== Flash 分区宏定义 ==================== */
#define FLASH_BASE 0x08000000UL // STM32 Flash 起始地址
/* 分区起始地址 */
#define BOOTLOADER_ADDR FLASH_BASE // Bootloader 起始:0x08000000
#define BOOTLOADER_SIZE 0x00004000UL // Bootloader 大小 = 16KB一般以页为单位划分
#define APP_ADDR (BOOTLOADER_ADDR + BOOTLOADER_SIZE ) // APP 起始:0x08004000
#define APP_SIZE 0x0000B000UL // APP 大小 = 44KB
/* 分区结束地址(包含最后一个字节) */
#define APP_ADDR_END (APP_ADDR + APP_SIZE-1) // 0x0800EFFF
#define APP_START_PAGE 8 //APP起始页
#define APP_START_COUNT 22 //APP所占页数
注意:划分空间尽量以页为单位,因为flash读写一般以整页擦除,写入
Bootloader主要逻辑

魔数:自己设置的一个标志位数据,一般是设置为RAM最后四个字节,软复位时不会被清除


OTA核心状态机
三个命令四个状态
升级固件需要的三个操作
OTA_CMD_ERASE () :擦除旧固件
OTA_CMD_WRITE () :写入新固件
OTA_CMD_VERIFY () :合法性效验-->跳转APP
四个状态码
OTA_STATUS_READY :准备好了,发下一条命令
OTA_STATUS_BUSY :正在处理
OTA_STATUS_ERROR :出错
OTA_STATUS_DONE :已完成
状态转换图

完整的升级时序

注意:跳转到APP前应该恢复出厂状态置,假装APP是第一个程序
OTA架构
