Hallo, bevor mich dieser Controller noch vollends in die Klappe bringt, hoffe ich das ihr mir hier helfen könnt :-) Folgendes Problem: Ich möchte es ermöglichen über die serielle Schnittstelle ein Update aufzuspielen. Damit ich den Controller flashen kann, muss ich das entsprechende Stückchen Code aus dem Speicher laufen lassen. Was zumindest lt. Handbuch der Controller auch beherrscht. Nur leider verrät das Handbuch nicht wie das funktionieren soll. Über das Scatter-Loading File habe ich versucht den entsprechenden Code im RAM zu positionieren, was auch (zumindest lt. dem Mapping-File) funktioniert. Und wenn ich das Handbuch richtig verstanden habe, sollte der Prozessor beim starten dann dafür sorgen, dass der Code an die entsprechende Stelle im RAM kopiert wird. Sobald ich den Code dann in den Emulator lade stelle ich fest, dass an der Adresse im RAM nur Init-werte stehen. Kann mir jmd. sagen, ob das auf diesem Wege überhaupt möglich ist, bzw. wie ich es anstelle den Code aus dem RAM laufen zu lassen? Wäre klasse, wenn Ihr mir helfen könntet. Noch ein paar technische Details, ich verwende: - Philips LPC2294 - den Compiler von Arm (Realview DS) Besten Dank im vorraus Uwe Heinrich
schuss ins Blaue: MAPMEM ? Warum eigentlich die Updatefunktion selbst basteln? Kenne nur den 2106 aber hat der 2294 nicht auch einen integrierten "uart-bootloader" ab Werk vorinstalliert?. Falls das Teil ueber IAP verfuegt (muesste es, wenn der bootloader drin ist) kann man auch die update-routinen in eine hohes flash segment schreiben (also nicht im RAM) und diese dann aus der Hauptapplikation anspringen.
Hi Ich kann leider keinen Hinweis geben, aber ich will mich in nächster Zeit auch mit den Philips LPC22xx (wahrscheinlich LPC2214) beschäftigen. Du hast in deinem Beitrag des öfteren von "Handbuch" gesprochen. Was hast du da für ein Handbuch, oder meintest du das Datenblatt. Hast du ein Development Board für den LPC?? Wenn ja, würd ich noch gerne wissen woher! mfg Andreas
Hi, erstmal Danke für eure Hilfe. Ich hab inzwischen nen Ansatz gefunden und werd das heute mal ausprobieren :-) Wenn das funzt schreib ich Euch mal meine Lösung hier rein :-) Andreas, ich hab mit Handbuch das User Manuel von Phillips bzw. die Manuals gemeint, die mein Compiler Hersteller (ARM) mir mitgeliefert hat. Das von Philips findest Du unter: http://www.semiconductors.philips.com/acrobat/usermanuals/UM_LPC21XX_LPC22XX_2.pdf mthomas, ich möchte den gesamten Flash-Bereich flashen können und somit auch die Routine zur Not überschreiben können, für den Fall das sich dort ein Fehler eingeschlichen hat, kann man diesen auf recht einfachem Wege beheben :-) mfg Uwe
Hi, also wie versprochen hier meine Lösung: - über das Scatter-File die entsprechenden Zeilen im RAM platzieren, hierzu eine Section anlegen. Das Scatter-File sieht dann in etwa so aus: MEM_REGION 0x00000000 0x4000 { ... FLASH_BURN 0x20000000 0x200 { name_der_c_datei.obj (+RO) } ... } Die Adressen sind natürlich an den jeweiligen Prozessor anzupassen. Das veranlasst den Compiler, den Code so zu compilieren, dass dieser aus dem RAM lauffähig ist. Der Linker erstellt beim linken Symbole, die einem verraten wo im ROM der Code liegt, damit man ihm vor dem ausführen nur noch an die entsprechende Stelle (hier ab: 0x2000000) kopieren muss. Bevor man den Code kopieren kann muss man im entsprechendem C-File die Symbole wie folgt noch als extern-Deklarationen einfügen extern unsigned int Image$$FLASH_BURN$$Base extern unsigned int Load$$FLASH-BURN$$Base Nun kann man den Code aus dem ROM ins RAM kopieren. Mit &Load$$FLASH-BURN$$Base erhält man einen Zeiger auf den Code im ROM und mit &Image$$FLASH_BURN$$Base einen Zeiger auf die Stelle wo der Code stehen muss. Den ganzen kram einfach umkopieren und die Funktion die dort im Code liegt einfach aufrufen. Und das wars auch schon :-) Den kram aus den Handbüchern heraus zu filtern hat mich immerhin 2 Tage gekostet... aber zum Glück tuts nun :-) mfg Uwe
Danke Uwe fuer die Information was zu tun ist. Habe versucht herauszufinden, wie die Vorgehensweise fuer eine solche Aufgabe bei der gcc-toolchain ist. Scheint deutlich anders als beim ARM compiler. Hinweise ("google futter") wie man Code fuer die Ausfuehrung an einer anderen Adresse mit der gcc-Toolchain erzeugt sind willkommen. Martin
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.