在 ARM Cortex-M7(以及 ARMv7-M/v8-M 架构)中,内存属性(Memory Attributes)如 Cacheable、Bufferable 和 Shareable 用于定义内存区域的访问行为,影响 Cache 策略、总线事务 和 多核一致性。
1. Cacheable(可缓存)
定义
-
如果内存区域标记为 Cacheable,处理器允许将该区域的数据缓存到 L1 Cache(I-Cache 或 D-Cache)。
-
目的:减少访问延迟,提高性能。
行为
-
读操作:如果数据在 Cache 中(Cache Hit),直接从 Cache 读取;否则(Cache Miss),从主存加载并填充 Cache。
-
写操作:取决于 Write Policy(Write-Back 或 Write-Through)。
适用场景
-
频繁访问的代码(如
ITCM配置为 Cacheable)或数据(如数组、变量)。 -
非 Cacheable 示例:外设寄存器(如 GPIO)、DMA 缓冲区(避免 Cache 一致性问题)。
2. Bufferable(可缓冲)
定义
-
如果内存区域标记为 Bufferable,写操作可以缓存在总线写缓冲区(Write Buffer)中,无需等待从设备(Slave)立即完成。
-
目的:提高写操作的吞吐量,减少处理器停顿。
行为
-
Bufferable Write:
处理器写入数据后,总线接口可能先返回成功,实际写入操作由总线异步完成(写缓冲区负责后续写入主存)。 -
Non-Bufferable Write:
处理器必须等待写入完全完成(适合严格顺序的外设访问)。
适用场景
-
Bufferable:普通内存(如 SRAM),允许写合并(Write Merging)优化。
-
Non-Bufferable:外设寄存器(如 UART 数据寄存器),需确保写入立即生效。
3. Shareable(可共享)
定义
-
如果内存区域标记为 Shareable,表示该区域可能被 多个主设备(如多核 CPU、DMA)共享,需要维护一致性。
-
目的:避免多主设备访问同一数据时出现一致性问题。
行为
-
Shareable 内存:
系统会通过 硬件一致性协议(如 Snoop Control Unit, SCU)或软件管理(如 Clean/Invalidate Cache)确保多核/外设看到的数据一致。 -
Non-Shareable 内存:
仅当前处理器核心可见,不保证其他主设备的数据一致性。
适用场景
-
Shareable:
-
多核共享数据(如 Cortex-M7 + Cortex-M4 双核芯片)。
-
DMA 缓冲区(需通过 Cache 维护操作保证一致性)。
-
-
Non-Shareable:
核心私有数据(如栈、局部变量)。
4. 典型组合与示例
常见配置
| 内存类型 | Cacheable | Bufferable | Shareable | 说明 |
|---|---|---|---|---|
| 普通 RAM | Yes | Yes | Optional | 高性能,需维护一致性(如 DMA) |
| 外设寄存器 | No | No | Yes | 严格顺序,禁止缓存 |
| 多核共享数据 | Yes | Yes | Yes | 需硬件/软件一致性机制 |
| TCM 内存 | No | No | No | 紧耦合内存,直接访问 |
5. 对性能与一致性的影响
| 属性 | 优点 | 缺点 |
|---|---|---|
| Cacheable | 减少访问延迟,提高性能 | 需维护 Cache 一致性 |
| Bufferable | 写操作异步完成,减少处理器停顿 | 写入主存的时机不确定 |
| Shareable | 支持多核/DMA 共享数据 | 增加总线监听(Snooping)开销 |
6. 实际应用建议
-
外设寄存器:
-
Non-Cacheable + Non-Bufferable,确保写入立即生效。
-
-
DMA 缓冲区:
-
如果 CPU 和 DMA 共享数据:
-
Cacheable + Shareable,并手动调用
SCB_CleanDCache()(写入 DMA 前)和SCB_InvalidateDCache()(从 DMA 读取后)。
-
-
或直接设为 Non-Cacheable(牺牲性能换简化设计)。
-
-
多核通信数据:
-
Cacheable + Shareable,依赖硬件一致性协议(如 Cortex-M7 的 SCU)。
-
总结
-
Cacheable:是否允许缓存,影响性能。
-
Bufferable:是否允许写缓冲,影响写入延迟。
-
Shareable:是否需多核一致性,影响数据同步。
在 Cortex-M7 中,这些属性需通过 MPU 或默认内存映射配置,合理设置可显著提升系统性能和可靠性。
1928

被折叠的 条评论
为什么被折叠?



