最近开发了stm32用SD卡进行IAP固件升级用的bootloader,特整理一下笔记:
首先说一下升级原理,固件升级需要有2套程序,1套就是加载引导程序,也就是所谓的bootloader。另一套就是APP程序。
主要的难点就是bootloader程序了。下面讲解如何写基于SD卡的bootloader程序。
编写基于SD卡的固件升级bootloader,需要做一下几项工作:
- 编写移植能驱动SD卡的SDIO驱动bsp
- 移植能读写SD卡的文件系统
- 对flash程序存储区进行分区
- 移植能进行stm32的片内flash读写的驱动
- 从SD卡加载读取APP程序,以及写flash,跳转
- Keil编译出.bin文件
(1) SD卡SDIO驱动 && 文件系统移植
首先,要想能支持从SD卡进行固件升级,首先MCU需要能从SD卡进行读写。操作SD卡对于stm32有集成的硬件SDIO接口,然后还需要移植能读写SD卡的文件系统。说到移植SD卡的文件系统,这里有个小插曲不得不说,一开始我移植的文件系统,发现太大了,编译出来的bootloader足足有180多kB,占据了stm32的flash的半壁江山。后来对文件系统进行了裁剪后之后不到30k了。
1.1 SDIO驱动:
SDIO驱动我也是没时间自己去写,而是直接移植的官方的sdio驱动部分,里面集成了基于SDIO的读写擦操作的API接口,移植好后可以直接调用。说到SDIO驱动,我就再多