Uso de CCM (memoria acoplada al núcleo) en STM32F4xx

Los microcontroladores STM32F4xx tienen 128 KB de SRAM + 64 KB de CCM SRAM. CMM SRAM está conectado al bus de datos, por lo que es imposible usarlo con DMA.

  • ¿Cuál es la razón para agregar SRAM adicional como CCM?
  • ¿Aumenta el rendimiento y si ese es el caso por qué es así?

Respuestas (2)

Déjame señalarte la nota AN4296 (para STM32F3). Habla de CCM en detalle. Hace la distinción entre las configuraciones de Harvard y Von Neumann .

El CCM está diseñado exactamente para ejecutar código a la máxima velocidad. Eso puede ser controladores de interrupción, pero también funciones ordinarias.

Hay una matriz de bus . Tanto el CCM como la SRAM ordinaria tienen conexiones a buses de datos e instrucciones. El CCM no tiene conexión con DMA porque está diseñado para el código, que se supone que nunca debe ser manejado por DMA. También cuenta con protección contra escritura por página.

La idea es que el núcleo puede obtener código de CCM mientras obtiene datos de la otra SRAM al mismo tiempo. Se utilizan diferentes "buses" en paralelo, brindándole el mejor rendimiento. Si obtiene código y datos de la misma memoria (cualquiera), será más lento debido a la contención.

Algunos STM32 tienen algo llamado Acelerador adaptable en tiempo real (ART) . Eso es un caché en la parte superior de la memoria flash para que pueda ejecutar "desde la memoria Flash, con estados de espera 0".

Incluso el STM32 (F7) más reciente tiene caché L1 real además de eso .

¿Cuál es la razón para agregar SRAM adicional como CCM?

Los núcleos Cortex M3 y M4 tienen 3 buses separados: Instrucción, Datos y "Sistema". Una transacción en un bus no molestará a otros buses a menos que se acceda al mismo periférico.

Ya mencionaste DMA. El controlador DMA solo puede acceder a una RAM cuando no hay acceso simultáneo desde el núcleo M4, y es posible que el núcleo deba esperar a que finalice una transferencia DMA en curso. Por lo tanto, la RAM de CCM puede ayudar tanto a aumentar el rendimiento como a reducir la latencia.

No es que el código se pueda ejecutar también desde SRAM (pero no CCM SRAM). Luego, satura el AHB solo con obtener instrucciones Thumb2 de 32 bits. En este caso, el CCM puede soportar algo de estrés del bus; de lo contrario, la captación previa tendría que esperar a que se transfieran los datos.