STM32 SD卡 booloader IAP 跳转 APP

STM32 bootloader的意义以及其原理大家可自行去网上搜索,我这里就不多说了,其方式有多种,无非是从外设获取更新数据,然后再下载到相应的地址,程序进行跳转。有串口更新的方式,也可以无线进行更新的方式,多种多样,只需保证更新数据传输的过程当中的稳定性即可,这里采用的是从SD卡获取APP程序编译的bin文件进行更新,我这里使用的是STM32F405RGT芯片,用的STM32cube的库函数。
由于有两段程序,一个是bootloader程序,下载之后不会进行擦除,还有就是APP程序,即我们需要进行更新的程序,那么第一步,就先生成APP程序的bin文件,这里使用的是keil5编译软件。
一.APP程序

  1. 修改flash地址
    打开“option for target-Target,”如下图图中红色区域的地方,原本的地址为0x8000000、0x100000,0x8000000为主存储器的起始地址,0x100000为该芯片当中主存储器的大小,我修改为0x8070000、0x60000,起始地址与大小可根据自己程序的实际大小进行调整。
    STM32 SD卡 booloader IAP 跳转 APP_第1张图片

flash主存储器构成
STM32 SD卡 booloader IAP 跳转 APP_第2张图片

2.生成bin文件
这里不进行赘述,详情请参考一下链接
https://www.cnblogs.com/alanfeng/p/5659253.html
https://blog.csdn.net/zhzht19861011/article/details/5927924
生成bin文件之后,复制到SD卡中。

二. bootloader

1.修改ROM地址,同APP程序操作一样修改相关地址,起始地址为0x800000,大小为0x70000,后续接着为APP的起始地址。芯片得电后,在BOOT1、 BOOT2接地的情况下,即从主存储器启动,是从地址0x8000000启动程序的,故需将bootloader程序放在首地址,是不需要进行擦除的。
STM32 SD卡 booloader IAP 跳转 APP_第3张图片

2.sSD卡bootloader流程
该程序总的流程如下:
1.挂在文件系统
2.是否存在升级文件BIN
3.解锁flash
4.擦除APP地址程序
5.读取文件数据
6.下载文件到APP ROM地址
7.校验APP地址数据
8.锁定flash
9.指定栈指针地址,一般指向APP初始地址,跳转复位向量APPaddr+4

3.相关程序

3.1 读取更新文件“Prj.bin”,查询是否存在
STM32 SD卡 booloader IAP 跳转 APP_第4张图片
3.2解锁flash,进行APP地址程序擦除
STM32 SD卡 booloader IAP 跳转 APP_第5张图片
3.3读取更新文件数据,这里采用的是循环读取,每次读取512字节并下载进APP地址,直至将所有数据读取完成。若采用指针进行动态内存分配,将所有数据一次性读取完成下载也可,不过该方式编程数据类型容易出错,容易导致flsh寄存器SR 当中 PGS、PGP 两位硬件置1错误,导致程序不能进行正确的下载。
STM32 SD卡 booloader IAP 跳转 APP_第6张图片
3.4 地址数据校验
STM32 SD卡 booloader IAP 跳转 APP_第7张图片
3.5 指定栈指针,跳转复位向量。注意:若数据下载过程出错,程序会一直循环跳转至当前程序的入口,会跑飞。
STM32 SD卡 booloader IAP 跳转 APP_第8张图片

至此SD boot更新APP完成。有问题欢迎讨论。

你可能感兴趣的:(STM32F405,STM32,SD,bootloader,IAP跳转,APP)