Forum: Mikrocontroller und Digitale Elektronik wie kann man direkt ins flash schreiben?


von Flasher (Gast)


Lesenswert?

Hallo liebes Forum,

ich möchte gerne wärend des Programmablaufs ins Flash schreiben. Hier im 
Forum-Tutorial wird nur erklärt, dass man nur bei der Definition der 
Flash-Variable Wert ins Flash schreiben kann. Im Tutorial wird dann nur 
noch aus dem Flash gelesen.

Ich habe dann auch folgendes Probiert:

________________________________________________
unsigned char value_flash PROGMEM = 0x66;
unsigned char value_ram1, value_ram2;


value_ram1 = 0x12;
memcpy_P(&value_flash,&value_ram1,1);
value_ram2 = pgm_read_byte(&value_flash);
________________________________________________


aber das hat so auch nicht geklappt.

Gibt es keine Möglichkeit direkt im Programmablauf isn Flash zu 
schreiben?

Schönen Abend noch... (",)

von ... (Gast)


Lesenswert?

Über welchen µC reden wir hier eigentlich?
Falls über AVRs, dann such mal nach "Bootloader", da findest Du wie es 
geht.
Ansonsten schau Dir die SPM Assemblerinstruktion an und unter welchen 
Bedingungen die funktioniert. Oder schau nach, was die avr-libc in der 
boot.h zur Verfügung stellt.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Bei den AVRs musst du dazu in die Bootloader-Sektion des Flashes 
springen (nur von dort aus kann man in den Flash schreiben) und von dort 
aus einen SPM-Befehl ausführen (natürlich den Ablauf beachten!). Aber 
Vorsicht: der Flash lässt sich nur 1.000 bis 10.000 Mal beschreiben! Wie 
das bei anderen µCs fuktioniert, kann ich dir nicht sagen.


Gruß
Jonathan

von ... (Gast)


Lesenswert?

Wobei hier die Frage eher lautet: Warum will man unbedingt irgendwelche 
Variablen ins Flash verfrachten? Außer für einen Bootloader macht es 
eigentlich überhaupt keinen Sinn irgendwo im Flash rumschreiben zu 
wollen.

von Purzel H. (hacky)


Lesenswert?

Interessant waeren auch die Detail zur Programmierung des Flash. Wird 
der Code vom Bootloader ausgefuehrt, so sind die Randbedingungen anders 
wie wenn der Code vom Userflash ausgefuehrt wird. Soweit ich mich 
erinnere, geschieht waehrend dem Programmieren, dh 4ms pro byte gar 
nichts. Also wirklich gar nichts.

von Thomas E. (thomase)


Lesenswert?

Flasher schrieb:
> Gibt es keine Möglichkeit direkt im Programmablauf isn Flash zu schreiben?

Ja. Über die Selfprogramming Instructions für den Bootloader Support.

Das ist aber je nach Controller nur aus bestimmten Speicherbereichen 
heraus möglich und setzt voraus, daß immmer eine ganze Page gelöscht 
wird.

Der Flash ist ein ROM und sollte auch als solcher behandelt werden.

Variablen, die auch nach dem Abschalten noch vorhanden sein sollen, legt 
man ins EEPROM. Das ist genau dafür gemacht.

mfg.

von Flasher (Gast)


Lesenswert?

Hallo zusammen,
Danke für Eure Beiträge.
Also ich möchte ins Flash schreiben weil dies ja schneller geht wie in 
das EEPROM. Ich will bei Spannungsausfall noch ein paar Daten 
wegschreiben. Mit dem EEPROM benötigt jeder Schreib-Vorgang etwa 4ms. 
Wenn man ins Flash schreibt, dann benötigt ein ganzer Block ca.8ms.
Außerdem gibt es beim AVR32 ja gar kein EEPROM mehr. Also muss ich mir 
eh mal die Mühe machen es zu verstehen wie das ganze funktioniert.

Für alle die mehr darüber wissen wollen, ich habe eine passende 
Aplication-Note bei Atmel gefunden (AVR106). Die werde ich mir mal zu 
gemühte ziehen :o)

Vielen Dank für eure Hilfe...

Flasher (",)

von ... (Gast)


Lesenswert?

Flasher schrieb:
> beim AVR32

Meinst Du wirklich AVR32? Oder vielleicht doch einen ATmega32. Wenn 
ersteres, dann wird Dir AVR106 nicht viel nützen. Die ist für die 
8-bitter.
AVR32 haben zwar keinen EEPROM, dafür aber eine extra "User page" im 
Flash für genau solche Sachen. Wie man auf die zugreift findest im 
entsprechenden Datenblatt.
Irgendwo im ASF gibs wohl auch ein Beispiel. Ansonsten findet man noch 
sowas:
1
__attribute__((__section__(".userpage")))
2
static <variable type> variable;
3
flashc_memcpy((void *)&variable, (void*)&src, sizeof(<variable type>), TRUE);
Lesen geht wohl direkt.

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.