Bootloader与OTA学习记录

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架构

相关推荐
大耳朵-小飞象1 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技2 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++2 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室3 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影4 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙5 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码5 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
生活爱好者!5 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy6 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-6 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops