Hallo, ich möchte den internen Flash des STM32 als Datenspeicher nutzen. Damit mein Programm ohne größere Unterbrechung weiterlaufen kann, möchte eine Flashpage mit Hilfe des DMA beschreiben. Weiß jemand ob dies grundsätzlich möglich ist und hat es vielleicht schon gemacht? Im Flash-Programming-Manual (PM0042) heißt es, dass "Memory to Memory" möglich sind, wobei mit "memory" SRAM oder Flash gemeint ist. Es gibt von ST ein Beispiel wie mit dem DMA Daten aus dem Flash in den SRAM kopiert werden. Ich weiß, dass ich während ich eine Flashpage lösche und neu beschreibe nicht auf sie zugreifen darf. Das blockiere ich auch. Gruß und Dank JH
Das wird wahrscheinlich nicht funktionieren, da man nicht gleichzeitig den Flashspeicher beschreiben und lesen kann, sprich Programme ausführen kann. Das gilt nicht nur für die zu programmierende Flash-Page sondern für den gesamten Flash-Speicher. Deshalb muß man generell eine Programmierroutine fürs Flash im RAM ausführen. Und da es ja immer etwas dauert, bis ein Flash geschrieben ist, müßte die DMA selbständig das Ready-Flag abfragen. Das geht also nicht.
Danke für die Antwort. Ich konnte feststellen, dass ich mit dem DMA eine Flashpage ohne weiteres beschreiben kann. Währenddessen werden jedoch alle anderen Zugriffsversuche (Interruptroutinen und das normale Programm) blockiert. Die Lesezugriffe werden nach Beendigung der Flashoperation durchgeführt. D.h. der Controller steht, ohne Busyloop oder Sperren der Interrupts. Schlussendlich ist klar. Durch die Blockade aller Flashzugriffe während einer Schreib/Löschoperation, bringt es nichts den DMA nutzen zu wollen, auch wenn es funktioniert.
Ich kann mir beim besten Willen nicht vorstellen dass es mit DMA überhaupt geht, man kann schließlich nicht direkt ins Flash schreiben wie in ein SRAM sondern muss die Programmierbefehle in den Flash-Control-Registern richtig setzen. Das wird der DMA-Controller wohl kaum selber machen.
Ich habe natürlich zuvor den Programmiermodus ausgewählt. Die Register sind alle vorher so gestellt worden, wie beim Programmieren über den Prozessorkern. Das ungewöhnliche ist doch eher, dass der DMA anscheinend das Busy Flag oder EOP-Flag prüft.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.