Hält die CPU eines ARM Cortex M während der Flash-Selbstprogrammierung an?

8

Die meisten ARM Cortex M-MCUs verfügen nicht über einen EEPROM-Speicher. Stattdessen können persistente Daten in denselben Flash-Speicher geschrieben werden, in dem sich auch das Programm befindet.

  • Wie ist der Zustand der CPU während dieses Lösch- / Schreibvorgangs?
  • Hört es auf? Hält es den normalen Betrieb aufrecht?
  • Hängt das Verhalten der CPU von der verwendeten spezifischen MCU-Familie (z. B. STM32, Kinetis L) ab?

(Für einige Leute könnte dies wie eine dumme Frage aussehen, aber der PIC16 von Microchip hält die CPU während der Flash-Selbstprogrammierung für bis zu 40 ms an.)

Echtzeit
quelle
Haben Sie einen Hinweis auf PIC16 Halt?
Daniel Grillo
@Wouter Welche? Haben Sie es getestet, beispielsweise mit einem Interrupt, der vollständig im RAM ausgeführt wird?
Starblue
2
Im Gegensatz zu dem, was ich vor dem Lesen in den UserManuals kommentiert habe, scheinen die NXP-Chips während der In Application Programming nur die Flash-Schnittstelle zu deaktivieren, sodass während der Flash-Lösch- oder Schreibzeit möglicherweise ein Interrupt möglich ist, der vollständig aus dem RAM ausgeführt wird. Aber dieses weitgehend unerforschte Gebiet könnte ich mir zum Beispiel Zeitprobleme vorstellen, wenn der Interrupt viel Zeit in Anspruch nimmt, mit Konsequenzen für die Flash-Ausdauer.
Wouter van Ooijen
Ja, sie haben kein EEPROM, aber für diese Situation hat ein Cortex-M wie ST32 ein Backup-Register, in dem Sie Ihre Informationen dort und über PIC16 speichern können. Ich denke, das ist eine interessante Sache. Bitte erwähnen Sie Ihre Quelle über PIC16. (Datenblatt?)
Roh
@Wouter Ja, das Timing könnte ein Problem sein. Mit Ausnahme des LPC8xx verwenden die IAP-Befehle "RAM zum Flashen kopieren" die Taktfrequenz als Parameter, daher vermute ich, dass sie eine einfache Verzögerungsschleife verwenden.
Starblue

Antworten:

4

Das Verhalten des Kerns hängt von der Implementierung ab. Der Flash ist nicht Bestandteil des ARM-Kerns und wird daher von jedem Anbieter anders implementiert. Normalerweise wird während des Lösch- / Schreibvorgangs eine Ausführung aus dem RAM ausgeführt, und die Ausführung sollte nicht beeinträchtigt werden.

Ich glaube, auf dem STM32 werden Lesevorgänge vom Flash-Stall ausgeführt, während Lösch- / Schreibzyklen ausgeführt werden. Dies würde dazu führen, dass die Ausführung des Kerns blockiert, bis der Vorgang abgeschlossen ist. Ich glaube, dass Sie bei einigen Flash-Konfigurationen weiterhin Flash ausführen / lesen können und es nur dann blockiert, wenn Sie auf den Teil des Flashs zugreifen, den Sie löschen / programmieren.

Ich habe andere Cortex Ms verwendet, bei denen Sie beim Ändern des Flash-Inhalts aus dem RAM ausführen müssen , da sonst ein Busfehler auftritt (und wahrscheinlich ein Systemabsturz, wenn sich Ihre Busfehler- / Hard-Fehlerbehandlungsroutinen im Flash befinden). Einige Mikros mit großen Flash-Mengen implementieren es als zwei unabhängige Flash-Arrays, die normalerweise den vollständigen Zugriff auf eine Bank ermöglichen, während sie auf der anderen arbeiten.

Sie müssen sich auf die Dokumentation Ihres spezifischen Teils beziehen, um die Einschränkungen der Ausführung beim Ändern des Flash-Inhalts zu erfahren.

rjp
quelle