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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.