STM32-Flash-Massenlöschung von IAP

Es mag eine dumme Frage sein, aber ich kann nicht herausfinden, in welchen Fällen ein Flash-Massenlöschen aus der In-Application-Programmierung (IAP) relevant ist, da es auch den Benutzercode löschen würde?

Für STM32-Geräte stellt ST Beispielcode in Referenzhandbüchern wie diesem bereit :

A.2.4 Beispiel für einen Massenlöschsequenzcode

/* (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) */

Ich verstehe nicht, wie die CPU die Anweisungen von (3) bis (6) erreichen kann.

Sollte man sie nicht schon löschen?

Antworten (1)

Das Programm wird möglicherweise nicht vom Flash ausgeführt. Der STM32 kann Code aus SRAM oder externem Speicher (über FMC) ausführen; Code, der von diesen Speicherorten ausgeführt wird, könnte den Flash-Speicher sicher* löschen.

Einige STM32-Teile haben auch zwei Flash-Speicherbänke. Der Code könnte von einer Bank ausgeführt werden und die andere Bank löschen.

*: Nun, meistens sicher. Ein Stromausfall während eines Lösch-/Programmierzyklus würde das Teil leer lassen.

"Gerät während des Updates nicht ausschalten". Natürlich ist diese Aussage in industriellen Anwendungen teilweise wertlos
Wenn Sie Ihr Systemdesign korrekt durchführen, verfügen Sie über einen integrierten Energiespeicher (Massenkapazität, Batterie usw.), der diesen Anwendungsfall übersteht, wenn dies als gültiger Anwendungsfall erforderlich ist. Industriell oder nicht ... wenn die Anforderungen nicht erfüllt wurden und / oder das System-Engineering nicht durchgeführt wurde, können Sie sicher in eine Situation geraten, in der der Strom während des Updates ausfällt. und in diesem Fall führen Sie keine Massenlöschung durch, sondern teilweise Löschungen und entwerfen die Software so, dass sie weiß, von welchem ​​​​Block sie beim nächsten Start oder zweiten oder dritten Start ausführen soll.