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 :-)
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
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....
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.