好的,你问的是MCU 内部 Flash(闪存)按功能结构划分,这个问题其实涉及到 Flash 在 MCU 中的物理布局与功能分区,不同厂商(STM32、NXP、TI、Microchip 等)的划分思路相似,但命名可能略有不同。
一、按作用结构划分
MCU 内部的 Flash 存储器一般按功能划分为以下几个核心部分:
1. 主存储区(Main Flash Memory / Code Area)
- 作用:存放用户应用程序代码、常量数据(
const
)、查找表等。 - 特点:
- 容量最大,占 Flash 绝大部分空间
- 按扇区(Sector)或页(Page)划分,擦除操作以扇区/页为单位
- 可通过 CPU 直接执行代码(XIP, Execute In Place)
- 访问方式:
- 代码执行:通过指令总线取指
- 内容读取:通过数据总线访问
- 常见名称:
- STM32:Main Flash memory
- NXP Kinetis:Program Flash
- PIC32:Program Flash
2. 系统存储区(System Memory / Boot ROM)
- 作用:存放厂家固化的 Bootloader(系统启动程序)和硬件驱动函数(如 USB DFU、UART ISP、I2C/SPI 编程等)。
- 特点:
- 用户无法修改(出厂已固化)
- 启动时可通过 Boot 引脚或选项字节选择从此区域启动
- 通常容量较小(几 KB ~ 几十 KB)
- 常见名称:
- STM32:System memory
- NXP:ROM / Boot ROM
- TI:System ROM
3. 选项字节区(Option Bytes / Configuration Area)
- 作用:存储 MCU 的调整参数,影响启动行为、安全保护、电源管理等。
- 特点:
- 位置通常在 Flash 最高地址区或单独的配置扇区
- 写/擦除需特殊解锁流程
- 修改后一般需要复位才能生效
- 常见内容:
- 启动模式选择(Flash / SRAM / System Memory)
- 读保护等级(RDP)
- 写保护(WRP)
- BOR(Brown-Out Reset)等级
- 硬件看门狗调整
- 常见名称:
- STM32:Option Bytes
- NXP:FTFA (Flash Configuration Field)
- Microchip:Configuration Words
4. 数据存储区(Data Flash / EEPROM Emulation Area)
- 作用:用于存储用户数据,相当于片内 EEPROM(部分 MCU 没有独立 EEPROM,需用 Flash 模拟)。
- 特点:
- 按页/扇区擦写
- 擦写寿命低于真正的 EEPROM(1万~10万次)
- 可借助软件算法构建资料更新(如“页交换”)
- 常见名称:
- STM32:无专用 Data Flash,需在主 Flash 中划分
- NXP:FlexMemory / Data Flash
- Renesas:Data Flash
5. 其他特殊功能区
- 信息块(Information Block):存放芯片序列号、校准数据(如 ADC 校准值)等
- 安全区(Secure Flash):部分带安全功能的 MCU 用于存放加密密钥、安全代码
- OTA 升级区(Dual Bank):部分 MCU 将主 Flash 分成两个 Bank,支持一边运行一边更新固件
二、功能结构示意图(通用型)
┌───────────────────────────────────────┐
│ Main Flash Memory │ 用户代码区(可分区为 Bank1 / Bank2)
│ (Code, const data, lookup tables...) │
├───────────────────────────────────────┤
│ Data Flash / EEPROM Area │ 数据存储区(可模拟EEPROM)
├───────────────────────────────────────┤
│ System Memory (Boot ROM) │ 出厂Bootloader
├───────────────────────────────────────┤
│ Option Bytes / Config Area │ 启动配置、保护等级等
└───────────────────────────────────────┘
三、访问与控制方式
- 代码执行:从主存储区或系统存储区直接取指执行
- 数据读取:CPU 数据总线访问(哈佛架构 MCU 有 I-Code 和 D-Code 总线)
- 编程/擦除:通过 Flash 控制器寄存器(如 FLASH_CR, FLASH_SR)控制
- 保护机制:通过选项字节设置读/写保护、安全等级
四、总结对比
功能分区 | 主要作用 | 是否可写(用户) | 容量 | 典型位置 |
---|---|---|---|---|
主存储区 | 用户代码、常量 | 可(需解锁) | 最大 | 低地址区 |
系统存储区 | 出厂Bootloader | 否 | 小 | 固定地址 |
选项字节区 | 配置与保护 | 可(特殊流程) | 极小 | 高地址区 |
数据存储区/EEPROM | 用户数据存储 | 可(需解锁) | 小~中 | 主Flash末尾或独立 |
信息块/安全区 | 序列号、密钥、校准数据 | 否/限写 | 极小 | 固定地址 |