Forum: Mikrocontroller und Digitale Elektronik AT91SAM7: flash-bereich vom code aus beschreiben?


von guro (Gast)


Lesenswert?

hallo,
ich verwende diesen code: 
http://hubbard.engr.scu.edu/embedded/arm/armlib/docs/html/at91flash_8c-source.html
mit dem der controller einen bereich seines flash-speichers selbst 
beschreiben soll. mit den ersten paar bytes scheint es auch zu gelingen, 
aber dann stürzt der controller ab mit einer 'abort' exception.
ich schreibe in den bereich ab 0x30000 und habe kein 'remap' aktiviert 
(der code selbst beginnt direkt nach den interrupt-vektoren (ab adresse 
0).
der fehler passiert direkt nach dem befehl in zeile 74 (siehe link).
woran kann das liegen? die quelldaten sind 4-byte aligned. muss ich den 
code im 'system' mode ausführen (aktuell bin ich nur 'supervisor')?
oder kennt jemand von euch einen funktionierenden 'selbstflasher' für 
at91sam7?
danke für jede antwort :-)

von gerhard (Gast)


Lesenswert?

hallo guro,
dein problem liegt darin, daß der beispielcode aus dem flash exekutiert 
wird und dabei ins flash schreibt, was beim at91sam7s aber nicht funkt.
die funktionen zum beschreiben (in deinem fall die funktion 
at91flashWritePage()) müssen aus dem ram exekutiert werden.

gruss
gerhard

von guro (Gast)


Lesenswert?

hallo gerhard, vielen dank für deine antwort.
liegt es wirklich daran? ich habe im at91 datasheet keinen hinweis 
gefunden, dass der code im ram sein muss.
ausserdem beschreibe ich einen anderen bereich, also überschreibe den 
code selber nicht. ich kann den at91sam7 noch dem absturz auch wieder 
starten, d.h. der code wurde nicht überschrieben - und - ich kann sehen, 
dass die ersten ca. 16 bytes, die ich beschreiben wollte, auch 
tatsächlich geschrieben wurden....

von tom (Gast)


Lesenswert?

Hi,

@guro:
Wenn Du in einen Flash schreiben willst, mußt Du zuerst dessen interne 
State-Machine vom Normal-Lesen-Modus in den Wartungs-Schreib-Modus 
umschalten. Daraus resultiert, das Du in dieser Zeit nicht mehr auf 
Deinen normalen Code LESEND zugreifen kannst, weil das, was Du dann von 
einer beliebigen Adresse Deines Flash zurückbekommst nur der Status der 
State-Machine ist! Erst nach einem Reset der State-Machine (logischer 
Weise erst nach erfolgreichem Schreiben) kannst Du wieder normal auf 
Deine Daten zugreifen.

Deshalb also: die Funktionen zum Schreiben in den Flash MÜSSEN im RAM 
sein.

Schönen Tag noch,
Thomas

von gerhard (Gast)


Lesenswert?

hallo guro,
im datasheet steht tatsächlich nirgendwo explizit, daß der code aus dem 
ram exekutiert werden muß. allerdings wird das flash als "single plane" 
beschrieben.

wenn du tatsächlich auf das gleichzeitige schreiben und lesen wert 
legst, dann mußt du eine type mit dual plane (z.b. at91sam7s512) 
einsetzen.

gruss
gerhard

von guro (Gast)


Lesenswert?

hi tom und gerhard, danke für eure antworten.
ja, was ihr schreibt hört sich plausibel an.
ich werde dann mal sehen, dass ich die schreibfunktionen ins RAM 
bekomme...
ihr habt mir sehr geholfen alle daumen hoch
:-)

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.