1. BootLoader知识
1.1 概述及其作用
BootLoader
可以理解成是引导程序
, 它的作用是启动正式的App应用程序
.。换言之,BootLoader是一个程序
,App也是一个程序
,BootLoader
程序是用于启动App
程序的.
2. IAP知识
2.1 概述
IAP
(In-Application Programming
)即在线应用编程,也就是说用户可以使用自己的程序对单片机的user flash区域进行烧写。目的是为了在产品发布后可以方便地通过预留的通信接口对产品进行功能升级或者程序上的修复。只要保留预先的通信接口即可(USART, 网口等),避免了要进行拆机使用下载器进行烧录。
3. OTA知识
3.1 概述
- OTA升级(firmware update
Over The Air
)是模组必备的功能,OTA升级
就是通过GPRS
、3G
、无线网络
下载升级补丁升级
,不用通过有线连接来下载升级,直接通过无线环境下载、升级,比较方便。一般OTA升级不会清楚个人数据,除非是大更新可能会清除数据。ota固件升级其实就是IAP(In ApplicationProgramming)
应用编程,一般包含两个程序:Bootloader
程序和APP
程序。
4. STM32启动方式
4.1 STM32 FLASH空间划分
- 以
STM32F103RC
为例,可知其FLASH
大小每页2K
字节,内部FLASH的首地址从0x08000000
开始程序在此地址开始写入。 - 存在IAP升级的flash存储分布图
- RAM存储分布图
2.1.2 无IAP功能时Flash分布图
bootloader
的的起始地址0x08000000(M3),size的大小,然后分配好APP的起始地址,size大小,注意分配的不要去重叠两个的空间
*
- 首先我们对
FLASH
写操作过程要清楚一下几点:☆※
★ 字=32位=4个字节;半字=16位=2个字节
★ 每次写入必须是两个字节
★ 写入之前是必须先擦除的
★ FLASH地址为空的时候0xffff
★ 擦除: 页擦除
FLASH写入过程
1.解锁
2.擦除扇区
3.写数据到指定位置
4.上锁
IAP时FLASH地址空间具体划分如下
2.2 STM32的启动过程
无论是Keil MDK还是IAR EWARM开发环境 ST公司都已经帮你写好了cortex内核的启动程序,你只需要进行引用就好 大大降低了开发难度。传统的ARM架构总是从地址为0处开始执行第一条指令,而Cortex-M3内核却不相同 有三种启动方式
1.通过boot引脚设置可以将中断向量表定位于SRAM区 即起始位置0x2000000 复位后PC指针0x2000000
2.通过boot引脚设置可以将中断向量表定位于FLASH区 即起始位置0x8000000 复位后PC指针0x800000(最常用的方式)
3.本文暂时不对这种情况论述
1)没有IAP 只有APP程序的正常流程
STM32的FLASH地址起始于0x08000000, 程序从此地址开始写入
根据上图分析启动和执行流程
1.STM32在复位后,从0x08000004地址处取得复位中断向量起始地址,并跳转到复位中断程序入口
2.在执行完复位中断程序后,会跳转到main函数
3.由于main函数一般数一个while(1)的循环体,在程序执行过程中发生中断时,PC指针会被强制指回中断向量表
4.根据中断源进入相应中断服务程序
5.执行完中断服务程序后 返回main函数
- 加入IAP后流程
同理对流程进行分析
1.STM32复位后,从0x08000004地址处取得复位中断向量地址,随后跳转到复位中断程序入口,并执行完复位中断程序 最后跳转到IAP的main函数入口(这里将原先的步骤1和2进行合并)
2.在执行完IAP后(固件升级后),会跳转到APP的复位中断向量起始位置 即复位向量表处
3.取复位中断向量地址后,跳转到新的复位中断程序入口 并执行新的复位中断程序 最后进入APP的main函数
4.APP的main函数是一个while(1)循环体,在程序执行过程中发生中断后 (此时有两个中断向量表)先将PC指向0x08000004,再根据相应中断源进入中断函数
5.执行完中断函数后再回到APP的main函数
————————————————
版权声明:本文为CSDN博主「嵌入式之大杂烩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lyf_9705/article/details/124061548
OTA升级就是通过GPRS、3G、无线网络下载升级补丁升级,不用通过有线连接来下载升级,直接通过无线环境在手机上下载、升级,比较方便。一般OTA升级不会清楚个人数据,除非是大更新可能会清除数据