mikrocontroller.net

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


Autor: JH (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Erwin Reuss (er-tronik)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: JH (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Agro_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: JH (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.