Hay algunas cosas que no entiendo sobre el proceso de arranque del microcontrolador STM32F4.
Mi entendimiento es el siguiente:
- El ARM Cortex-M4 espera que el valor de inicialización del puntero de pila y los vectores de interrupción estén en
0x00000000 + SCB->VTOR
, mientras queSCB->VTOR
se borra en el reinicio. - No hay memoria en esa ubicación. La memoria flash comienza en
0x08000000
, la SRAM en0x20000000
. - Para que el arranque sea posible, el µC puede mapear el rango de memoria flash o SRAM a
0x00000000
. El rango de memoria a mapear está definido por el estado de los pines de arranque.
Mis preguntas:
-
¿Por qué el manual de referencia del STM32F4 menciona en página 69 que
Cuando el dispositivo arranca desde la SRAM, en el código de inicialización de la aplicación, debes reubicar la tabla de vectores en la SRAM usando la tabla de excepciones de NVIC y el registro de desplazamiento.
? En mi opinión, esto no es necesario, ya que toda la región de memoria está aliada de todos modos. Curiosamente, esto no parece ser necesario cuando la región flash se remapea al espacio
0x0
. -
El único uso que puedo pensar para arrancar desde la SRAM es reducir los ciclos de escritura en la flash durante el desarrollo. Antes de liberar el µC del reinicio, escribes el programa en la SRAM usando el depurador y luego arrancas desde allí. Sin embargo, como tienes acceso al depurador, no habría restricciones sobre dónde arrancar de todos modos. Entonces, ¿por qué tener esta característica?
Que la posición de arranque se derive de los pines indica (al menos en mi opinión) que esta característica se debe usar no durante el desarrollo sino en la operación final. Y en la operación final, la SRAM está limpia en el momento del arranque. Por lo tanto, no tiene sentido arrancar desde la SRAM.
0 votos
Es posible que desee arrancar desde la RAM para realizar una actualización de firmware. El código de la RAM se ejecuta y vuelve a grabar el contenido de la memoria Flash. Una vez que la actualización esté completa, reinicie y ejecute nuevamente desde la Flash.