ARM AT91SAM7 Flash aus Application beschreiben

Gast #283067
Lesenswert?

Hallo!

Da mit die Programmierung mit SAMBA zu aufwändig ist, Taste hier aus
und einstecken 10s warten... wollte ich mit meinen eigenen Bootloader
schreiben.

Wenn ich den Flash nun beschrieben will macht der ARM nen Reset. WAS
IST DA LOS?!?!?

Der Code liegt im RAM und es wird auf keine Funktion zurückgegriffen,
die im ROM liegt. Programmiert mit WINARM gcc. Alle Interrupts sind
genau wie der Watchdog aus.

Habe mich da an den Beispielcode von IAR gehalten, den ich auf GCC
portieren wollte.

Hat da jemand ne Idee?
Gast #283068
Lesenswert?

Mit dem Flashen kann ich dir leider noch nicht helfen, aber du kannst
mit SAM-BA deinen Code auch ins RAM laden und dort ausführen lassen -
das erspart die ständige Recovery-Prozeudr. Blöd ist es aber, wenn man
den RAM braucht und der eh schon viel zu klein ist. :-(

Aber in meinen Augen scheint das Konzept vom SAM-BA eine komplizierte
Fehlentwicklung zu sein :-(

Bin aber mal auf weitere Antworten gespannt, weil die mir dann auch
helfen könnten.
Deshalb: abo
Gast #283070
Lesenswert?

Hallo! Erstmal danke...

Ich habe mal mein Projekt angehangen.

in flash.c befindet sich das Corpus Delicti. In der Write Page Funktion
an der Stelle wo der Flash geschrieben werden soll macht der AT91 nen
Reset.

->
flash_AT91F_MC_EFC_PerformCmd(AT91C_BASE_MC,FLASH_AT91C_MC_CORRECT_KEY|A 
T91C_MC_FCMD_START_PROG|(pagenum<<8));
Angehängte Dateien:
Gast #283071
Lesenswert?

Hast du ne Idee Gerhard?

Wer beschäftigt sich eigentlich hier mit diesen ARM 's ?

Scheint ja nicht gerade weit verbreitet zu sein hier. Mein Problem ist
leider auch, dass ich die das Debuggen mit der GCC tool chain und dem
Wiggler clone nicht richtig zum laufen bringe. Kann also nicht genau
sagen bei welchem Assemblerbefehl die Kiste abschmiert.

Wenn jemand ein Codebeispiel fürs schreiben vom Flash hat, würde ich
mich darüber sehr freuen. Den von mir angepeilten RS232 bootloader werd
ich dann hier auch mal posten. Inkl. nem kleinen How-To wie die
Applicationssoftware dann gelinkt werden muss usw.
#283072
Lesenswert?

Es könnte sein, dass der Sample-Code von Atmel nicht im Flash sein darf,
sondern nur im RAM ausgeführt werden darf.

Wenn der SAM-BA den Flash flasht kopiert er sich dazu auch ins RAM.
Anders wird es nicht funktionieren.

Ich hab mir jetzt deinen Code nicht angeschaut, aber das könnte ich mir
als Fehlerursache vorstellen.
Gast #283073
Lesenswert?

hallo loko,
habe mir deinen code mal angesehen und mit dem iar beispiel verglichen
und dabei fiel mir auf, daß du den interrupt vor dem schreiben des
flash nicht sperrst.
hat das einen bestimmten grund?

gruss
gerhard
Gast #283074
Lesenswert?

Normalerweise benutzte ich moment noch gar keinen Interrupt. Habe aber
mal jetzt alle Interrupts im Startup Code ausgeschaltet. Es bietet sich
mir immernoch das gleiche Verhalten.

Code liegt im RAM.

Die Unlock Funktion, die ich geschrieben habe hat auch keine Wirkung
:(

Wenn ich eine Page beschreibe, die Bestandteil des Bootloader codes ist
funktioniert die Write routine wohl. jedenfalls Hängt er sich auf und
die entsprechende Page im Flash ist beschrieben (da ich kein jtag hab
gehe ich davon aus, dass die seite beschrieben ist, wenn nach nem reset
das programm nicht mehr läuft)

Im IAR code hab ich keine Funktion gefunden, die die Interrupts
explizit ausschaltet. hast du evtl. ne andere version? Ich hab ne 4.30A
Demo Starter Kit. Falls ja, könntest du bitte den flash code posten, der
in deiner Version vorhanden ist.

Dank euch!
Gast #283075
Lesenswert?

hallo loko,
unter folgendem link findest du einige beispielprogramme:
http://www.at91.com/package_patch_driver/at91sam7s64_iar/at91_sam7s64_iar.zip
im verzeichnis AT91SAM7S64-BasicFlash-IAR4_30A-1_21 gibt es ein
beispielprogramm für die flash behandlung.
im modul flash.c findest die entsprechenden funktionen. vor jedem
zugriff auf das flash wird der interrupt gesperrt
(AT91F_disable_interrupt()) und danach wieder freigegeben
(AT91F_enable_interrupt()).


gruss
gerhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren