Hay algunas cosas que no entiendo sobre el proceso de arranque del microcontrolador STM32F4.
Mi comprensión es la siguiente:
- Los arranques ARM Cortex-M4 esperan el valor de inicialización del puntero de pila y los vectores de interrupción en
0x00000000 + SCB->VTOR
, mientras queSCB->VTOR
se borra al reiniciar. - No hay memoria en esa ubicación. La memoria flash comienza en
0x08000000
, SRAM en0x20000000
. - Para hacer posible el arranque, el µC puede asignar el rango de memoria flash o SRAM a
0x00000000
. El rango de memoria que se debe asignar está definido por el estado de los pines de arranque.
Mis preguntas:
-
¿Por qué el manual de referencia STM32F4 dice en página 69 que
Cuando el dispositivo arranca desde SRAM, en el código de inicialización de la aplicación, debe reubique la tabla vectorial en SRAM utilizando la tabla de excepciones de NVIC y el registro de compensación.
? Desde mi punto de vista, esto no es necesario, ya que la región de la memoria completa tiene un alias de todos modos. Curiosamente, esto no parece ser necesario cuando la región flash se vuelve a asignar a
0x0
space. -
El único uso para arrancar desde SRAM puedo pensar si es reducir los ciclos de escritura en el flash durante el desarrollo. Antes de liberar el µC del reinicio, escribe el programa en la SRAM utilizando el depurador y luego inicia desde allí. Sin embargo, como tiene acceso de depurador, no habría restricciones en cuanto a desde dónde arrancar. Entonces, ¿por qué tener esta característica?
El hecho de que la posición de arranque se derive de los pines indica (al menos en mi opinión) que esta función no se utilizará durante el desarrollo sino en la operación final. Y en la operación final, SRAM es clara en el momento del arranque. Por lo tanto, no tiene sentido arrancar desde SRAM.