STM32F4xx 微控制器具有 128KB 的 SRAM + 64KB 的 CCM SRAM。CMM SRAM 硬连线到数据总线,因此不可能将其与 DMA 一起使用。
- 添加额外 SRAM 作为 CCM 的原因是什么?
- 它会提高性能吗?如果是这样,为什么会这样?
STM32F4xx 微控制器具有 128KB 的 SRAM + 64KB 的 CCM SRAM。CMM SRAM 硬连线到数据总线,因此不可能将其与 DMA 一起使用。
让我指点您注意AN4296(适用于 STM32F3)。它详细讨论了CCM。它区分了哈佛和冯诺依曼配置。
CCM旨在以最大速度执行代码。那可能是中断处理程序,也可能是普通函数。
有一个总线矩阵。CCM 和普通 SRAM 都连接到数据和指令总线。CCM 与 DMA 没有连接,因为它是为代码设计的,而这些代码不应该由 DMA 处理。它还具有逐页写保护功能。
想法是内核可以从 CCM 获取代码,同时从另一个 SRAM 获取数据。并行使用不同的“总线”,为您提供最佳性能。如果您从同一个内存(任一)中获取代码和数据,则会因为争用而变慢。
一些 STM32 有一个叫做Adaptive Real-Time (ART) Accelerator的东西。这是闪存顶部的缓存,因此您可以“从闪存执行,具有 0 等待状态”。
更近的 STM32 (F7)在此之上还有实际的 L1 缓存。
添加额外 SRAM 作为 CCM 的原因是什么?
Cortex M3 和 M4 内核有 3 个独立的总线:指令、数据和“系统”。除非访问相同的外设,否则一条总线上的事务不会干扰其他总线。
您已经提到了 DMA。DMA 控制器只能在没有来自 M4 内核的并发访问时访问 RAM - 并且内核可能需要等待正在进行的 DMA 传输完成。因此,CCM RAM 有助于提高性能和降低延迟。
并不是说代码也可以从 SRAM(但不是 CCM SRAM)执行。然后,您只需获取 32 位 Thumb2 指令即可使 AHB 饱和。在这种情况下,CCM 可以从总线承受一些压力——否则预取将不得不等待数据传输。