news 2026/4/25 16:38:19

# 67_MCU的几大分区

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
# 67_MCU的几大分区

好的,我来按照CSDN Markdown规范扩写这篇关于高性能MCU存储分区的技术文章。


高性能MCU存储分区详解:从Flash到Cache的完整剖析

  • 高性能MCU存储分区详解:从Flash到Cache的完整剖析
    • 前言
    • 一、整体架构概览
    • 二、Flash(程序存储器)分区
      • 2.1 Bootloader区
      • 2.2 中断向量表
      • 2.3 选项字节(Option Bytes)
    • 三、RAM(数据存储器)分区——最复杂的部分
      • 3.1 RAM类型总览
      • 3.2 实际存储映射
      • 3.3 TCM与CCM的区别
      • 3.4 备份SRAM
    • 四、Cache(缓存)体系
      • 4.1 Cache类型
      • 4.2 Cache的一致性陷阱
      • 4.3 TCM的确定性优势
    • 五、MPU(内存保护单元)分区
      • 5.1 典型MPU配置
      • 5.2 为什么需要MPU?
    • 六、外部存储扩展
    • 七、低功耗场景下的存储策略
    • 八、对比总结
    • 九、总结
    • 参考资料

高性能MCU存储分区详解:从Flash到Cache的完整剖析

前言

在嵌入式开发中,8位MCU(如STM8、51系列)的存储结构相对简单——一块Flash放代码,一小块RAM放变量,基本就完事了。然而,当我们把视角拉高,看向高性能MCU(如STM32F4/H7、NXP i.MX RT、TI TMS320等),存储系统立刻变得复杂起来。本文将以STM32F407为例,深入剖析高性能MCU的存储分区体系。

为什么需要关注存储分区?因为性能优化、系统稳定性、功能安全都依赖于对存储系统的深刻理解。把关键代码放在哪里、DMA缓冲区如何分配、Cache如何配置,每一个决策都直接影响系统表现。


一、整体架构概览

高性能MCU的存储系统远比8位机复杂,它不再是简单的“程序存Flash、数据存RAM”,而是一个包含多种存储介质、多层缓存、可编程权限控制的层次化系统。

┌─────────────────────────────────────────────────────────────────┐ │ 芯片内部 │ ├─────────────────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Flash │ │ RAM │ │ Cache │ │ │ │ (代码+常量) │ │ (变量+堆栈) │ │ (加速) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Boot ROM │ │ System │ │ TCM │ │ │ │ (启动固件) │ │ Memory │ │ (紧耦合内存) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────────┘

从上图可以看出,高性能MCU的存储系统至少包含Flash、RAM、Cache、Boot ROM、System Memory、TCM六大模块。每个模块内部又进一步细分,构成了一个精密的存储层次体系。下面我们逐一拆解。


二、Flash(程序存储器)分区

Flash不再是铁板一块。在高性能MCU中,Flash被划分为多个功能明确的区域,每个区域都有自己的使命。

分区用途示例地址(STM32F407)
Bootloader区启动引导、固件升级0x08000000~0x08004000
主程序区应用程序代码0x08004000~0x0807FFFF
中断向量表中断入口地址存放于Flash起始位置
配置字/选项字节读保护、看门狗、BOR等独立区域
EEPROM模拟区用Flash模拟掉电保存数据最后2个扇区
备份寄存器区VBAT供电的小容量存储4KB

2.1 Bootloader区

Bootloader是芯片上电后执行的第一段代码。以STM32为例,系统Bootloader固化在System Memory中(不可擦除),而用户也可以在自己的Flash起始位置放置自定义Bootloader。这部分代码负责:

  • 判断启动模式(从Flash启动、从System Memory启动、从SRAM启动)
  • 固件完整性校验(CRC检查)
  • 在线升级(IAP/OTA)
  • 跳转到应用程序

2.2 中断向量表

中断向量表存放的是各个中断服务函数(ISR)的入口地址。在STM32F4中,向量表默认位于Flash起始地址0x08000000,但可以通过SCB->VTOR寄存器重映射到RAM中,这对于动态更新中断服务函数非常有用。

2.3 选项字节(Option Bytes)

选项字节是Flash中的特殊区域,用于存储芯片配置信息:

配置项功能
RDP(读保护)防止固件被非法读取
WWDG/IWDG硬件看门狗使能控制
BOR(欠压复位)设置欠压复位阈值
NRST复位引脚功能配置

三、RAM(数据存储器)分区——最复杂的部分

如果说Flash分区还算直观,那么高性能MCU的RAM分区绝对刷新认知。RAM不是一整块,而是根据性能、功能、供电方式分成了多种类型。这是高性能MCU与8位机最本质的区别之一。

3.1 RAM类型总览

RAM类型特点典型容量用途
DTCM(数据紧耦合内存)CPU直连,零等待,最快64KB实时数据、频繁访问的变量
ITCM(指令紧耦合内存)CPU直连,零等待,最快64KB关键代码、ISR
SRAM1通用,可DMA访问112KB普通数据
SRAM2通用,可DMA访问16KB普通数据
SRAM3通用(部分型号)64KB普通数据
CCM(内核耦合内存)仅CPU访问,DMA不能访问64KB堆栈、关键变量
备份SRAMVBAT供电,掉电保留4KB休眠时保存数据
外设SRAM某些外设专用(Ethernet、USB)DMA缓冲区

3.2 实际存储映射

以STM32F407ZG为例,不同RAM块在地址空间中的分布如下:

0x10000000 - 0x1000FFFF → CCM RAM (64KB,仅CPU可访问) 0x20000000 - 0x2001BFFF → SRAM1 (112KB) 0x2001C000 - 0x2001FFFF → SRAM2 (16KB) 0x20020000 - 0x2002FFFF → SRAM3 (64KB,仅F42x/F43x系列) 0x40024000 - 0x40024FFF → 备份SRAM (4KB)

3.3 TCM与CCM的区别

这是一个经常被混淆的概念,有必要单独说明:

对比维度TCM(紧耦合内存)CCM(内核耦合内存)
访问路径通过AHB总线,绕过Cache直接挂在内核数据总线
DMA访问不支持不支持
典型用途确定性实时数据堆栈、RTOS任务栈
延迟零等待零等待
所属架构ARM Cortex-M7及以上ARM Cortex-M4(STM32专有)

关键记住一点:CCM是STM32F4系列特有的,而TCM是ARM Cortex-M7架构的标准配置。它们的共同点是都不能被DMA访问,因此不要把DMA缓冲区放到这些区域。

3.4 备份SRAM

备份SRAM是一个特殊的存在。它由VBAT引脚独立供电,即使主电源断开,只要VBAT有电(通常接纽扣电池),数据就不会丢失。典型应用场景:

  • 设备异常断电前的状态快照
  • 低功耗休眠模式下的数据保持
  • 实时时钟(RTC)的配套存储

四、Cache(缓存)体系

当CPU主频超过100MHz后,Flash的访问延迟就成为性能瓶颈。以STM32F407为例,CPU跑168MHz,而Flash访问需要等待周期。Cache的出现就是为了弥合这个速度差距。

4.1 Cache类型

类型功能典型大小
I-Cache(指令缓存)缓存Flash中的指令,减少取指延迟16KB
D-Cache(数据缓存)缓存Flash/RAM中的常量数据16KB

4.2 Cache的一致性陷阱

使用Cache时必须注意数据一致性问题。当DMA从外设搬运数据到SRAM时,如果CPU之前缓存了同一地址的旧数据,就会读到过期内容。解决方法:

/** * 功能:DMA接收完成后的Cache清理 * 参数:buf - 缓冲区地址, len - 缓冲区长度 * 返回值:无 **//** * Function: Clean cache after DMA reception completes * Parameters: buf - buffer address, len - buffer length * Return value: None **/voidCleanCacheAfterDMA(void*buf,uint32_tlen){/* CN: 使D-Cache中对应区域失效,强制下次读取从SRAM获取 -- EN: Invalidate the corresponding D-Cache region to force next read from SRAM */SCB_InvalidateDCache_by_Addr(buf,len);}

4.3 TCM的确定性优势

Cache虽然能加速平均访问速度,但命中和未命中的延迟是不确定的。对于实时控制系统(如电机控制、数字电源),这种不确定性是不可接受的。TCM正是为此而生——它绕过Cache,始终以零等待周期访问,保证确定性实时行为


五、MPU(内存保护单元)分区

MPU是高性能MCU的一项重要安全特性。它允许开发者软件定义存储区域的访问权限,实现细粒度的内存保护。

5.1 典型MPU配置

区域权限设置用途
Region 0只读,特权模式代码区保护,防止意外篡改
Region 1读写,用户模式正常数据区
Region 2不可执行防止缓冲区溢出攻击(XN)
Region 3设备内存类型外设寄存器,禁止Cache

5.2 为什么需要MPU?

在RTOS环境中,多个任务共享同一块物理内存。如果没有MPU保护:

  • 任务A的野指针可能破坏任务B的数据
  • 栈溢出可能悄无声息地覆盖关键变量
  • 缓冲区溢出攻击可以执行注入的恶意代码

MPU通过硬件检测,在违规访问发生的瞬间触发MemManage异常,将问题扼杀在摇篮里。


六、外部存储扩展

高性能MCU通常还支持通过外部总线扩展存储。以STM32F4的FSMC/FMC控制器为例:

可扩展存储类型典型容量用途
SRAM256KB ~ 2MB高速数据缓冲
SDRAM8MB ~ 64MB大容量数据存储、显示帧缓冲
NOR Flash4MB ~ 64MB代码存储、资源文件
NAND Flash128MB ~ 4GB海量数据记录

SDRAM虽然容量大,但需要定期刷新,且访问延迟不稳定。通常用作帧缓冲区或日志存储,而不适合存放实时性要求高的数据。


七、低功耗场景下的存储策略

高性能MCU通常支持多种低功耗模式,不同模式下存储器的供电策略也不同:

低功耗模式SRAM保持备份SRAM保持唤醒时间
Sleep微秒级
Stop毫秒级
Standby是(VBAT)相当于复位

设计低功耗产品时,需要在进入Standby模式前,将关键数据保存到备份SRAM中,唤醒后从中恢复。


八、对比总结

最后,我们用一个总表来对比8位MCU与高性能MCU的存储系统差异:

分区类型JSC8P012(8位机)STM32F4(高性能MCU)
Flash2KB,不分区1MB,可分多个扇区
RAM112B,3个Bank192KB+,6种以上类型
CacheI-Cache + D-Cache(16KB+16KB)
TCM/CCM64KB零等待
备份RAM4KB VBAT供电
Boot ROM内置Bootloader
MPU8~16个可编程区域
外部存储控制器FSMC/FMC

九、总结

高性能MCU的存储分区是一个立体化的多层次系统。它不仅包含物理分区(Flash扇区、SRAM块),还涉及性能分区(TCM vs 普通SRAM vs Cache)、权限分区(MPU)和生命周期分区(备份域、Option Bytes)。

在8位机上,“分区”就是一个简单的地址划分;到了高性能MCU,分区可以是物理的、逻辑的、权限的、性能分级的——这是一个巨大的思维跃迁。

如果你正从8位平台迁移到ARM Cortex-M系列,建议先从存储映射图入手,理解每个地址段对应的物理特性和访问限制。这是写好高性能嵌入式软件的基石。


参考资料

[1] STM32F407 Reference Manual (RM0090), STMicroelectronics
[2] ARM Cortex-M4 Devices Generic User Guide
[3] ARM Cortex-M7 Technical Reference Manual
[4] Mermaid语法说明

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 16:37:19

实测5款维普降AI率工具,2026年4月嘎嘎降AI实测3.2%

实测5款维普降AI率工具,2026年4月嘎嘎降AI实测3.2% 维普AI率检测越来越严,2026年4月维普检测算法再次升级,很多同学把初稿交上去,AI率动辄飙到50%以上,学校却要求降到20%以内。面对这个问题,光靠手工改写已…

作者头像 李华
网站建设 2026/4/25 16:36:27

wxauto:Windows微信客户端的自动化革命

wxauto:Windows微信客户端的自动化革命 【免费下载链接】wxauto Windows版本微信客户端(非网页版)自动化,可实现简单的发送、接收微信消息,简单微信机器人 项目地址: https://gitcode.com/gh_mirrors/wx/wxauto …

作者头像 李华
网站建设 2026/4/25 16:31:23

老设备不用换!Profinet 转 Profibus DP 主站网关,工控改造省钱神器

做工控现场、产线升级的朋友,大概率都遇到过这种世纪难题:新上了 S7‑1200/1500/200Smart,清一色 Profinet 主控现场一堆 Profibus DP 老设备:编码器、流量计、LED 屏、变频器、远程 IO……全换掉?成本高、停产久、项目…

作者头像 李华