tutorial programación programacion microcontroladores microcontrolador español ejemplos desarrollo curso cortex arm embedded cortex-m3 stm32

programación - programacion de microcontroladores arm



¿Cómo funciona la programación en aplicaciones para ARM(Cortex M3)? (3)

Estoy trabajando en un dispositivo personalizado Cortex-M3 y necesito implementar un mecanismo de programación en la aplicación (IAP) para que sea posible actualizar el firmware del dispositivo sin JTAG (usaremos TFTP o HTTP en su lugar). Si bien los ejemplos de código relacionados con IAP disponibles en ST Microelectronics son lo suficientemente claros para mí, realmente no entiendo cómo funciona el re-flashing.

Por lo que yo entiendo, la CPU extrae las instrucciones del Flash a través del bus ICode (y el bloque de captación previa, por supuesto). Entonces, aquí está mi pregunta bastante tonta: ¿por qué el programa en ejecución no se corrompe mientras se vuelve a flashear a sí mismo (es decir, cambia la memoria Flash desde la que se está ejecutando)?


Hoy en día muchos microcontroladores que soportan IAP, que es posible programar su memoria flash durante la ejecución del programa en el mismo flash.

Para IAP, la memoria del programa en el flash se puede dividir en 2 partes, un ejecutable y otras partes de respaldo.

En general, programamos la memoria flash en una ubicación (digamos, parte 1) a través de JTAG, cuya versión de firmware es 0.01. Para IAP, es decir, programar el flash en otra parte (parte 2) mientras se está ejecutando el código, las API correspondientes deben proporcionarse en la versión de firmware 0.01, lo que ayuda a programar la parte 2 del flash. Una vez finalizada la programación, la versión de firmware será exitosa. actualizado como 0.02. Cuando el procesador se reinicia, la ejecución del programa salta al último firmware comprobando la versión de firmware en la inicialización.

La parte donde se ejecuta el firmware se llama parte ejecutable, y otra es copia de seguridad. por qué se llama media de respaldo, suponga que si existe algún daño en el firmware durante la programación, la versión de firmware no se actualizará y luego del reinicio, el control del programa saltará automáticamente al firmware de respaldo después de verificar el número de versión.


No estoy familiarizado con la implementación de STM, pero en los chips NXP, las rutinas IAP se almacenan en un área de ROM reservada y separada que no puede ser borrada por el código de usuario.

Si está implementando el código de escritura flash mediante el uso de registros HW directamente, debe asegurarse de que no toque los sectores desde los que se ejecuta o que se ejecuta desde la memoria RAM.


Una solución común es tener un área pequeña reservada en el flash, donde se almacena el programa actual de flasheo. Cuando se haya descargado un nuevo firmware, solo haga un salto al código en esta área.

Por supuesto, esta pequeña área no se sobrescribe al actualizar el firmware, solo se puede hacer por otros medios (como JTAG). Así que asegúrese de que este programa de flasheo funcione bien para empezar. :)