由于嵌入式IAP升级时,制作的Bootloader往往会涉及到Stm32的Flash的一些操作(用于写入App程序),因此这里讲解一下Stm32的Flash相关操作
一、Stm32的Flash
1.1 Flash的基础原理
此处内容可以看该篇博文:嵌入式存储器
1.2 Stm32的Flash特性、操作
- 已知Flash写入前需要擦除的特性
- Nor Flash接口与RAM接口相同,因此往往MCU内部采用Nor Flash;即Stm32的Flash为 Nor Flash
- 因此如果是擦除大块区域时,会相对较慢
- Stm32的Flash使用前后,需要 解锁 、 锁定
- 在实际发布的产品中,在STM32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商即可利用该代码文件山寨产品。
对STM32 内部FLASH进行编程操作,一般需要遵循以下流程:
- Flash解锁
- 清除相关标志位
- 擦除Flash
- 写入Flash
- 锁定Flash
1.3 Flash的底层操作函数(仅限Stm32)
1 | FLASH_Unlock(); //Flash解锁函数 |
1.4 Flash的衍生操作函数
1 | extern void FLASH_If_Init(void); |
二、详细应用实例
具体实际应用:基于Xmodem协议的IAP升级,可以看这篇文章:IAP升级 & Bootloader制作