STM32 - 内存分区与OTA

最近搞MCU,发现它与SOC之间存在诸多差异,不能沿用SOC上一些技术理论。本文以STM L4为例,总结了一些STM32 小白入门指南。

标题MCU没有DDR?

是的。MCU并没有DDR,而是让代码存储在nor flash上,临时变量和栈运行在SRAM上。之所以这么做是因为MCU的cpu频率很低,都是几十MHZ到一二百MHZ,nor flash的读取速度能够满足cpu 的取指需求,但nor flash 的写入速度很慢,所以引入了SRAM 作为临时变量和栈的运行空间。

标题STM32启动方式

STM32提供三种上电后的引导方式:从 flash引导启动,从 system memory引导启动 和 从 SRAM引导启动。

从 flash引导启动就是加载 flash里面的 bin文件,运行用户烧录后的固件程序。

从 system memory启动是去运行MCU出厂自带的一块 ROM程序,该程序可称作为bootloader,提供通过串口、I2C、SPI或者USB去烧录flash,防止flash擦除后变砖,也可以用来实现MCU OTA,但要想用起来还需要遵从通讯协议开发上位机程序。STM32 Cube Programmer应该也是利用这段程序,完成 flash烧录的。

从 SRAM启动,比较难理解,SRAM不是掉电易失吗?怎么还能引导启动?既然SRAM是掉电易失,那就要写入程序后不掉电,直接切换跳转运行,所以该模式主要用来做在线仿真,使用场景比较小众。

这三种启动方式的选择是通过外部的BOOT0 pin或者 nSWBOOT0 option bit配置选择的。

但如果boot配置为flash启动,但flash又为空怎么办?这个ST也已经考虑到了,在这种情况下,检查发现flash为空,cpu转头会去运行system memory程序,所以你会发现即使flash没程序,上电后某些GPIO仍然被配置了,其实这就是内部ROM程序运行导致的后果。详细内容参看官方文档: AN2606。

分析一下内存地址表:

可以发现,CPU上电后是从地址 0开始运行的,但地址0 处存放的是什么代码?取决于BOOT configuration,不同的BOOT configuration会导致不同代码映射到0 地址处。

Flash memory的地址范围是0x08000000 ~ 0x08020000,所以 该MCU所支持挂载的最大flash容量为0x20000 byte,即128KB。flash的烧录地址也只能在这个范围选择。

标题STM32 OTA实现方案

标题方案一:bootloader + AB分区

该方案把flash分为三个区:bootloader、A分区、B分区。

bootloader分区代码不参与升级,只负责引导分区和升级检查。A和B 分区大小需要一致,里面是需要OTA的业务逻辑代码。升级时,将升级固件写入A或B分区,重启之后,bootloader根据A B分区的版本号跳转到最新的版本分区代码运行。这样做的好处是:1、无感升级,不需要进专门的烧录模式,可以在正常业务运行的情况下升级写入flash。2、不会变砖,即使升级写入flash失败,依然存在上一个版本的固件可以使用,安全性高。

缺点:flash容量需求大。

标题方案二:bootloader + A分区

该方案可节省一个分区,对flash压力很小。升级烧录逻辑放在 bootloader,app在接收到升级请求后跳转执行到bootloader代码,bootloader进行数据接收和flash烧录,完成后,跳转执行app程序,升级完成。

该方案适用性好,毕竟很少会因为OTA,而闲置一半的 flash空间。此模式需要MCU处于烧录模式,烧录失败后,无法正常运行,只能重新尝试升级烧录。

标题方案三:直接利用system memory分区进行升级

与方案二的区别就是不用写bootloader代码,直接重启利用boot pin引导进入system memory分区,利用里面的ROM代码进行flash烧写。缺点就是需要配置boot pin重启,风险大,且bootloader是官方固化提供的,无法修改,使用不方便,但也是一条路子。参考文档:AN3155。

相关推荐
可待电子单片机设计定制(论文)1 小时前
【51单片机】基于单片机的智能门禁系统设计
单片机·mongodb·51单片机
蝎蟹居2 小时前
GB/T 4706.1-2024 家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(1)
人工智能·单片机·嵌入式硬件·物联网·安全
Lhj061611 小时前
stm32 can 遥控帧的问题
stm32·单片机·嵌入式硬件
昊虹AI笔记13 小时前
STM32_HAL之程序编写、编译、烧写、上板测试初体验
stm32
三歪爱三玖13 小时前
【蓝桥杯】单片机设计与开发,速成备赛
单片机·职场和发展·蓝桥杯
CHHC188014 小时前
STM32 + keil5 跑马灯
stm32·单片机·嵌入式硬件
Hungry_1114 小时前
SPI通信协议
单片机·嵌入式硬件·spi·嵌入式软件
长安——归故李14 小时前
51单片机彩灯控制与数码管结合
汇编·单片机·嵌入式硬件·青少年编程·c#·51单片机·硬件工程
天天爱吃肉821815 小时前
Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)
单片机·嵌入式硬件·汽车·学习方法
Czzzzlq15 小时前
STM32基础教程——输入捕获模式测量PWM频率
stm32·单片机·嵌入式硬件