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?
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
hallo lokko, kannst du mal deinen code posten? vielleict kann ich dir dann helfen. gruss gerhard
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));
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.
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.
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
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!
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
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
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.