在 STM32F4xx 中使用 CCM(内核耦合存储器)

电器工程 微控制器 stm32 计算机架构 急速
2022-02-01 23:57:30

STM32F4xx 微控制器具有 128KB 的 SRAM + 64KB 的 CCM SRAM。CMM SRAM 硬连线到数据总线,因此不可能将其与 DMA 一起使用。

  • 添加额外 SRAM 作为 CCM 的原因是什么?
  • 它会提高性能吗?如果是这样,为什么会这样?
2个回答

让我指点您注意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 可以从总线承受一些压力——否则预取将不得不等待数据传输。