STM32F101 - Flash mit Hilfe des DMA beschreiben

Gast #1473217
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
#1473752
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.
Gast #1475884
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.
Gast #1476103
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.
Gast #1476281
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren