mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM AT91SAM7 Flash aus Application beschreiben


Autor: Lokko (Gast)
Datum:

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

Autor: Thomas Pototschnig (Gast)
Datum:

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

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo lokko,
kannst du mal deinen code posten?
vielleict kann ich dir dann helfen.

gruss
gerhard

Autor: Lokko (Gast)
Datum:
Angehängte Dateien:

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

Autor: Lokko (Gast)
Datum:

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

Autor: Thomas Pototschnig (pototschnig)
Datum:

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

Autor: gerhard (Gast)
Datum:

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

Autor: Lokko (Gast)
Datum:

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

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo loko,
unter folgendem link findest du einige beispielprogramme:
http://www.at91.com/package_patch_driver/at91sam7s...
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

Autor: Lokko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi! Danke!

Ich werds mal ausprobieren...

Autor: Lokko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI!

Für alle mit Abo hier...

hab nen neuen Thread aufgemacht mit meinen ersten Gehversuchen
bezüglich bootloader...

http://www.mikrocontroller.net/forum/read-1-304592.html

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.