2010-08-10 6 views
7

Beim STM32F103 dauert das Löschen einer Flash-Seite 20 ms, währenddessen der Kern für mich stagniert. Es ist nicht klar aus dem ST PM00042 Flash-Programmierhandbuch, ob der Kern immer Stall beim Löschen einer Flash-Seite oder ob es nur weil der Befehlsstrom selbst im Flash-Speicher (in meinem Projekt) und der FPEC (Flash-Speicher-Schnittstelle) ist beschäftigt und kann keine weiteren Anweisungen abrufen.Stoppt der Cortex-M3 STM32F103-Kern beim Löschen einer Flash-Seite, weil der FPEC beschäftigt ist und keine weiteren Anweisungen vom Flash abrufen kann?

Eine andere Möglichkeit, diese Frage zu stellen, ist "würde meinen Flash-Programmiercode aus dem RAM laufen lassen, um das Löschen der Flash-Seite zu verhindern?".

Danke,

Antwort

6

Ich glaube, dass die CPU während der Flash-Programmierung wird abgewürgt jeder versuchter Zugriff auf Flash.

Also, was Sie tun möchten, ist sicherzustellen, dass der kritische Code (möglicherweise Interrupt-Handler, Watchdog Kicker, etc.) während einer Programmoperation aus dem RAM ausgeführt werden kann. Das letzte Mal, als ich den STM32 benutzt habe (wahrscheinlich vor 2 Jahren), habe ich genau das gemacht.

Also einfach klar zu sein, die Frage am Ende Ihres Beitrags zu beantworten:

Ein anderer Weg, diese Frage zu stellen ist „würde meine Flash-Programmierung Code aus RAM vermeiden, dass die Flash-Seite läuft Löschstand? ".

Ich glaube, die Antwort ist "Nein". Es spielt keine Rolle, wo sich der Flash-Programmiertreiber befindet, was wichtig ist, ist, was Ihr Code macht während der Lösch-/Programmiervorgang läuft. Wenn die CPU versucht, während einer Operation auf Flash zuzugreifen, sogar um Anweisungen für Ihr Programm zu lesen oder eine Tabelle mit Konstanten zu lesen, glaube ich, dass sie stehen bleiben wird.

Ich weiß in der Tat, dass das ist, wie der NXP-Blitz auf ihren ARM-uCs funktioniert, aber ich wollte Kapitel & Vers für das STM32 auch erwähnen. Aus irgendeinem Grunde scheint das Flash-Programmierhandbuch im Augenblick nicht verfügbar zu sein, aber ich fand die folgende Sprache in einem ähnlichen Dokument (PM0068, glaube ich):

Eine laufende Flash-Speicher-Operation wird nicht blockiert die CPU so lange da die CPU nicht auf den Flash-Speicher zugreift.

und

Wenn eine Lese-/Schreiboperation [zu flash] während der Programmierung initiiert wird, (BSY-Bit gesetzt), die CPU an, bis die laufenden Haupt Flash-Speicherprogrammierung ist vorbei.

+0

Ehrfürchtig, danke. Im Moment versuche ich, den fehlerhaften Code in den RAM zu laden, um das auszuprobieren. Ich werde dich wissen lassen, wie es mir geht. Ich wünschte nur, PM00042 wäre so klar wie die PM Sie zitieren ... –

+0

PM00042 ist verschwunden - versuchen Sie auf der Suche nach PM0056 oder PM0063. Sie können auch auf die ST-Website gehen, den STM32-Abschnitt finden und nach der "Programming Manual" -Dokumentation suchen. –