STM32 flash 内存分布介绍

摘要:

    本文以STM32F103RBT6为例介绍了片上Flash(Embedded Flash)若干问题,包括Flash大小(内存映射)、块大小、页面大小、寄存器。这些知识,有利于写Flash驱动。


一、怎么看Flash大小

 

1.1 通过型号

    型号会印在MCU表面,可以通过观察获得,我的是STM32F103RBT6(以下分析基于这个型号),对照下图的STM32产品命名,可知STM32F103RBT6的Flash是128KB。

 

()

图1 Ordering information scheme

 

1.2 通过数据手册(内存映射)

    也可以通过数据手册得到Flash大小,首先根据型号从官网下得对应的数据手册Datasheet(点这里,输入MCU型号进行检索。STM32F103RB相关的手册都在这:http://www.st.com/internet/mcu/product/164487.jsp),打开找到Memory map这张图,如图2红框所示(图2红框放大即为图3),Flash在内存的映射地址0x0800 0000 ~ 0x0801 FFFF,即大小为128KB。通过该方法也可以了解到片上Flash的内存映射。

图2 Memory map

 

图3 Memory map中的SRAM和Flash

 

二、块大小

    对于系统而言,Flash分为片上Flash(Embedded Flash)和外置Flash。通常说,Flash先分块再分页,擦除是按块进行,这样的说法应该只是对外置Flash而言,对于片上Flash即可以按页擦除也可以整块擦除,英文原文如下[2]:

 

  1. The Flash memory erase operation can be performed at page level or on the whole Flash area (mass-erase). The mass-erase does not affect the information blocks.

 

三、页面大小

    按1.2的方法下得该MCU的参考手册,STM32F103RBT6对应的参考手册为RM0008 Reference manual,定位到Embedded Flash memory章节(也可以通过搜索0x0800 0000来定位)。STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page)、medium-density devices(128KB,1KB/page)、high-density devices(512KB,2KB/page)、connectivity line devices(256KB,2KB/page)、XL-density(devices(1M,2KB/page)。从上面分析可知,STM32F103RBT6的Flash是128KB,可见是medium-density devices,如下图所示:

图4 Flash module organization (medium-density devices)

 

四、Flash相关寄存器

Flash寄存器在内存的映射如下[1]:

图5 Memory map中的Flash Interface

Flash各寄存器具体地址如下[2]:

图6 Flash memory interface registers of medium-density devices

具体到各寄存器功能,位含义,得参考[3],Flash寄存器映射如下:

图7 Flash register map

五、Information block

Flash中Information block在内存映射如下[1]:

图8 Memory map中的System memory

具体的Flash的Information block地址如下:

图9 Information block of medium-density devices

 

    System memory包含一段引导程序(当系统从片上Flash启动会用到),Flash出厂后就不能修改,不晓得我理解得对不对,贴出原文如下[3]:

 

  1. System memory is used to boot the device in System memory boot mode. The area is reserved for use by STMicroelectronics and contains the boot loader which is used to reprogram the Flash memory using the USART1 serial interface. It is programmed by ST when the device is manufactured, and protected against spurious write/erase operations. For further details please refer to AN2606.

 

 

    The option bytes are managed by an embedded Flash Program/Erase Controller (FPEC),详情见[3]。

 

参考资料:

[1] DS5319: Medium-density performance line ARM-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 communication interfaces(数据手册) DS5319.pdf   

[2] RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs(参考手册)  注:文件尺寸太大,上传不了:-(

[3] PM0075:STM32F10xxx Flash memory microcontrollers(Flash编程手册) PM0075.pdf 

### STM32 Flash 内存分配方法 STM32系列微控制器中的Flash存储器通常被划分为多个区域,用于不同的功能需求。对于STM32F107VCT6而言,其内部Flash大小为512KB[^1]。 #### 主要分区描述 - **系统存储区 (System Memory)** 这部分主要用于存放启动代码和一些预编程的功能库函数。这部分通常是只读的,在大多数情况下不会被应用程序覆盖。 - **用户程序区 (User Program Area)** 用户编写的固件代码会被烧录到这一区域内。该区域占据了大部分可用空间,并且可以根据实际应用的需求灵活调整起始地址以及结束位置。 - **数据保存区 (Data Storage Area or EEPROM Emulation)** 尽管STM32本身并不具备真正的EEPROM模块,但是可以通过特定算法将一小片Flash模拟成非易失性的数据储存单元来实现类似EEPROM的功能。这使得即使在掉电之后也能保持某些重要参数不变。 #### 存储布局实例 假设一个典型的STM32项目中: | 地址范围 | 描述 | |--------------|------------------------| | `0x0800_0000` - `0x0800_FFFF` | 系统引导加载程序 | | `0x0801_0000` - `0x080E_FFFF` | 用户自定义的应用程序 | | `0x080F_0000` - `0x080F_FFFF` | 模拟EEPROM的数据保留区 | 这种划分并不是固定的,开发者可以在链接脚本(`.ld`)文件里重新定义各个段的具体位置与长度,从而满足不同项目的特殊要求。 ```c /* 定义闪存基地址 */ #define FLASH_BASE ((uint32_t)0x08000000) /* 获取当前使用的闪存量 */ extern uint32_t __flash_size; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值