STM32 Flash 读写与存储架构详解
在进行 STM32 嵌入式开发时,理解存储架构(Flash、SRAM、CCM RAM)及其访问特性是性能优化的基础。本文以 STM32F407 为例,总结其存储特性。
地址空间映射
STM32F407 拥有 4GB 的线性地址空间,其内部存储器的分配如下表所示:
Flash 等待周期与 ART 加速器
STM32F407 的主频最高可达 168MHz,而内部 Flash 的访问频率通常较低(约 30MHz)。为了匹配 CPU 的高速处理能力,意法半导体引入了 ART 加速器 (Adaptive Real-Time Accelerator)。
1. 等待周期 (Wait States)
在不同的工作频率下,必须配置正确的等待周期(Latency):
2. ART 加速器原理
ART 加速器包含:
- 128位预取队列:每次从 Flash 读取 128 位数据(4 条指令)。
- 指令缓存 (I-Cache):64 行 128 位缓存。
- 数据缓存 (D-Cache):8 行 128 位缓存。
启用建议:在初始化系统时,务必开启加速器。
CCM RAM:被忽视的性能利器
CCM (Core Coupled Memory) 直接连接到 CPU 的 D-Bus,访问延迟极低,非常适合存放:
- 任务栈 (Stack)
- 频繁调用的全局变量
- 关键算法代码 (需从 Flash 拷贝至此运行)
注意陷阱:CCM RAM 不经过总线矩阵,因此 DMA 控制器无法直接访问 CCM RAM。如果你将 DMA 缓冲区设置在 CCM 中,DMA 传输会直接失败。
Flash 读写注意事项
1. 扇区结构 (Sector Layout)
STM32F407 的 Flash 扇区大小不均匀(非对齐):
- Sector 0-3: 16 KB
- Sector 4: 64 KB
- Sector 5-11: 128 KB
这种设计导致在将 Flash 当作 EEPROM 使用时,如果需要擦除 Sector 11,必须一次性擦除 128KB 数据,极其耗时且影响寿命。
2. 写入规则
- 先擦后写:Flash 只能将位从
1变为0。写入前必须执行扇区擦除。 - 对齐要求:F4 系列通常支持 byte (8-bit), half-word (16-bit), word (32-bit), double word (64-bit) 写入,取决于供电电压。