STM32 Flash masivo de IAP

1

Puede ser una pregunta tonta, pero no puedo averiguar en qué casos es relevante el borrado masivo instantáneo de la programación dentro de la aplicación (IAP), ya que también borraría el código de usuario.

Para dispositivos STM32, ST proporciona código de ejemplo en manuales de referencia como this :

A.2.4 Ejemplo de código de secuencia de borrado masivo

/* (1) Set the MER bit in the FLASH_CR register to enable mass erasing */
/* (2) Set the STRT bit in the FLASH_CR register to start the erasing */
/* (3) Wait until the BSY bit is reset in the FLASH_SR register */
/* (4) Check the EOP flag in the FLASH_SR register */
/* (5) Clear EOP flag by software by writing EOP at 1 */
/* (6) Reset the PER Bit to disable the mass erase */
FLASH->CR |= FLASH_CR_MER; /* (1) */
FLASH->CR |= FLASH_CR_STRT; /* (2) */
while ((FLASH->SR & FLASH_SR_BSY) != 0) /* (3) */
{
 /* For robust implementation, add here time-out management */
}
if ((FLASH->SR & FLASH_SR_EOP) != 0) /* (4)*/
{
 FLASH->SR = FLASH_SR_EOP; /* (5) */
}
else
{
 /* Manage the error cases */
}
FLASH->CR &= ~FLASH_CR_MER; /* (6) */

No entiendo cómo la CPU puede llegar a las instrucciones de (3) a (6).

¿No deberían ser borrados ya?

    
pregunta Motla

1 respuesta

6

Es posible que el programa no se esté ejecutando desde flash. El STM32 puede ejecutar código desde SRAM o memoria externa (a través de FMC); el código que se ejecuta desde estas ubicaciones podría * borrar de forma segura la memoria flash.

Algunas partes del STM32 también tienen dos bancos de memoria flash. El código podría estar ejecutándose desde un banco y borrando el otro banco.

*: Bueno, en su mayoría de forma segura. Un fallo de alimentación durante un ciclo de borrado / programa dejaría la parte en blanco.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas