Forum: Mikrocontroller und Digitale Elektronik STM32F101 - Flash mit Hilfe des DMA beschreiben


von JH (Gast)


Lesenswert?

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

von Erwin R. (er-tronik)


Lesenswert?

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.

von JH (Gast)


Lesenswert?

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.

von Agro_ (Gast)


Lesenswert?

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.

von JH (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.