www.mikrocontroller.net

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


Autor: guro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich verwende diesen code: 
http://hubbard.engr.scu.edu/embedded/arm/armlib/do...
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 :-)

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: guro (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: guro (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.