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??
ich glaube, du kannst nur dann im Flash schreiben, wenn du die Flashroutinen im RAM abgelegt hast...
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! :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.