本文通过对比F1、F4、L4系列的手册数据,浅谈对Bank、Sector、Page相关概念的理解。
以我们常用的STM32F103C8T6为例:
它具有64K的闪存大小,属于中容量产品。
在STM32中文参考手册_V10
中,是这样描述嵌入式闪存的:
中容量产品主存储块最大为16x64位,每个存储块划分为128个1K字节的页,对应的表3如下:
在手册随后的擦除和编程相关的描述中:
我们就知道了,STM32F1系列最小擦除粒度为页面(1K),最小写入粒度为半字(2byte)。
再以STM32F4系列为例,这里就不看芯片手册,直接看中文参考手册了:最小擦除粒度为扇区(最小的16K),最小写入粒度为字节(1byte)。
再看看STM32L4系列,这里只找到了英文的参考手册:
然后是它的分区结构:
它把存储器分成了2份,所以有页擦除、bank擦除和整体擦除三种擦除方式。最小擦除粒度为页(2Kbyte),因为具有ECC纠错,所以最小写入粒度为64bit。
其实对于bank、sector和page的了解,我觉得需要知道针对我们所使用的MCU,最小写入粒度和最小擦除粒度是什么,具体大小是多少就行了。
系列 | 最小擦除粒度 | 最小写入粒度 |
---|---|---|
STM32F0 | FLASH_TYPEERASE_PAGES | FLASH_TYPEPROGRAM_WORD |
STM32F1 | FLASH_TYPEERASE_PAGES | FLASH_TYPEPROGRAM_WORD |
STM32F2 | FLASH_TYPEERASE_SECTORS | FLASH_TYPEPROGRAM_BYTE |
STM32F4 | FLASH_TYPEERASE_SECTORS | FLASH_TYPEPROGRAM_BYTE |
STM32L4 | FLASH_TYPEERASE_PAGES | FLASH_TYPEPROGRAM_DOUBLEWORD |
STM32F7 | FLASH_TYPEERASE_SECTORS | FLASH_TYPEPROGRAM_BYTE |