Verwendung von CCM (Core Coupled Memory) in STM32F4xx

STM32F4xx-Mikrocontroller haben 128 KB SRAM + 64 KB CCM-SRAM. Der CMM-SRAM ist fest mit dem Datenbus verdrahtet, sodass er nicht mit DMA verwendet werden kann.

  • Was ist der Grund, zusätzlichen SRAM als CCM hinzuzufügen?
  • Erhöht es die Leistung und wenn ja, warum ist es so?

Antworten (2)

Lassen Sie mich Sie auf die Appnote AN4296 (für STM32F3) verweisen. Es spricht ausführlich über CCM. Es unterscheidet zwischen Harvard- und Von-Neumann -Konfigurationen.

Der CCM ist genau dafür gedacht, Code mit maximaler Geschwindigkeit auszuführen . Das können Interrupt-Handler sein, aber auch gewöhnliche Funktionen.

Es gibt eine Busmatrix . Sowohl der CCM als auch der gewöhnliche SRAM haben Verbindungen zu Daten- und Befehlsbussen. Das CCM hat keine Verbindung zu DMA, da es für Code gedacht ist, der niemals von DMA verarbeitet werden soll. Es verfügt auch über einen Schreibschutz pro Seite.

Die Überlegung ist, dass der Kern Code von CCM abrufen kann, während er gleichzeitig Daten von dem anderen SRAM abruft. Verschiedene "Busse" werden parallel verwendet, um Ihnen die beste Leistung zu bieten. Wenn Sie Code und Daten aus demselben Speicher abrufen (beides), wird es aufgrund von Konflikten langsamer.

Einige STM32 haben einen sogenannten Adaptive Real-Time (ART) Accelerator . Das ist ein Cache auf dem Flash, sodass Sie "aus dem Flash-Speicher mit 0-Wartezuständen" ausführen können.

Noch neuere STM32 (F7) haben darüber hinaus einen tatsächlichen L1-Cache .

Was ist der Grund, zusätzlichen SRAM als CCM hinzuzufügen?

Die Cortex M3 und M4 Cores haben 3 separate Busse: Instruction, Data und "System". Eine Transaktion auf einem Bus wird andere Busse nicht stören, es sei denn, es wird auf dieselbe Peripherie zugegriffen.

Sie haben DMA bereits erwähnt. Der DMA-Controller kann nur auf einen RAM zugreifen, wenn kein gleichzeitiger Zugriff vom M4-Kern erfolgt – und der Kern muss möglicherweise warten, bis eine laufende DMA-Übertragung abgeschlossen ist. Der CCM-RAM kann also dazu beitragen, sowohl die Leistung zu steigern als auch die Latenz zu verringern.

Nicht, dass Code auch vom SRAM (aber nicht vom CCM-SRAM) ausgeführt werden kann. Dann sättigen Sie den AHB nur mit dem Abrufen von 32-Bit-Thumb2-Anweisungen. Das CCM kann in diesem Fall etwas Stress vom Bus nehmen – das Prefetching müsste ansonsten auf Datenübertragungen warten.