Forum: Mikrocontroller und Digitale Elektronik Wie beschreib ich beim AT91SAM7S256 den internen Flash wärend des Betriebes?


von Klaus (Gast)


Lesenswert?

Ich möchte beim booten einen festen Wert an eine Adresse im internen 
Flash schreiben, habs bisher mit memcpy() probiert. Damit krieg ichs 
nicht hin, weil dieser Speicherbereich wohl schreibgeschützt ist.

Kann mir jemand sagen, wie das funktioniert??

von Anonymous (Gast)


Lesenswert?

ich glaube, du kannst nur dann im Flash schreiben, wenn du die 
Flashroutinen im RAM abgelegt hast...

von SAMler (Gast)


Lesenswert?

Du kannst selbstverständlich im Code einzelne Bereiche neu schreiben. 
Dazu musst du jedoch den Embedded Flash-Controller (EFC) zu Hilfe 
nehmen. Du brauchst einen Buffer in der Größe einer Page. Diesen Buffer 
übergibst du an den EFC. Dann kannst du mit einem Read des EFC eine Page 
in den Buffer zurücklesen, kannst an bestimmter Stelle deine Änderung 
machen und dann den Buffer durch den EFC wieder schreiben lassen. 
Wichtig, setze das Flag im EFC dass er die Page vor dem Schreiben selber 
löschen soll, sonst musst du es selbst löschen, indem du dies zuvor 
selbst auslöst.

Achtung!
Vorsicht ist geboten, beim programmieren einer internen Flashpage, da 
der S256 nur ein phys. FlashMemory besitzt. Deshalb, sollte dein 
Programmcode aus dem internen Flash laufen, musst du das Auslösen des 
Pageprogrammieren des EFC und das Warten bis das programmieren beendet 
ist, in einer RAM_Funktion ausführen, denn sonst programmiert der EFC ne 
Flashpage und deine CPU macht den nächsten Code-Fetch ebenfalls aus dem 
Flash --> Crash

Falls du mit IAR entwickelst, die haben dazu en Sample mit an Bord! :-)

von mthomas (Gast)


Lesenswert?

http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4343
-> software package AT91SAM7S-EK -> Beispiel basic internalflash.
vorbereitet für GNU und IAR

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.