Hallo hat schon jemand den Bootloader hier zum Laufen gekriegt? http://www.recherche.enac.fr/paparazzi/wiki/index.php/DevGuide/USBDownload hab das ganz mal für winarm portiert. allerdings habe ich probleme damit, die ram-version zu erzeugen... hat das schon jemand gemacht? den firmware-upgrader von tnkernel kenne ich zwar, allerdings ist er so in den kernel eingebunden, dass mir schwer fällt, ihn ohne das os zu benutzen... vielleicht gibts ja auch noch weitere alternativen?
Ich hab mir beim tnkernel bootloader das Prinzip abgeschaut, und ein eigenes Kommunikations- und Update-Protokoll draufgesetzt. Ganz ohne tnkernel Kram. Ist im nicht so wild. Die IAP Routinen und die Exception-Vektor-Verbiegerei sind schon das Wesentliche. Oder solls auch über USB sein?
usb läuft bei mir schon unabhängig davon. veröffentlichst du die source? dann könnt ich mir bei dir vielleicht ja was abschauen...
Hallo, ich brauche das *.hex file von dem tnkernel bootloader. Wer hat es? Gruß Wulf
@Wulf: Hab ich nicht zur Hand, aber was soll dir das Hex-File dann helfen?
Was ich damit sagen wollte... warum compilierst du ihn dir denn nicht selbst? Sonst kannst du damit doch eh nichts anfangen, wenn die Applikation, die du noch schreiben willst nicht dazu "paßt". Einsprungadresssen, etc.
Ich bin gerade dabei mir meinen eingenen Bootloader zusamemn zu stricken: Die IAP funktionen konnte ich alle erfolgreich integerieren. Der Bootloader befindet sich in den Sektoren 1-2. Zum Testen habe ich folgendes versucht: Ab 0x3000 wird eine Bsp.-Applikation in den Flash geschrieben. (Startup-file, linker-file aus winarm => beginnt bei Adresse 0; keine Interrupts verwendet). Nun springe ich über die Vectortabelle am Anfang des Codes (0x3020). -> Folge: der LPC bleibt hängen. Wenn nich auf Adresse 0x3000 springe, wo der ResetHandler (0x0000) steht, wird ein Reset ausgelöst; funktioniert also. Die Daten werden korrekt im Flash abgelegt (extra mit pointern auf die entsprechenden Adressen) ausgelesen. Muss ich das Linkerfile/den Startupcode auch anpassen, wenn ich in der Applikation keine Interrupts verwende. (Die restlcihen Sprünge/Verzeigungen müssten doch alle relativ, bezogen auf den pc sein; oder?) Was muss ich denn alles verändern (für die Nutzung von Interrupts)? Vektortabelle mit Offsets (=Startadresse der Appliaktion) sowie im Linkerfile für den ROM-Bereich die StartAdresse für die Applikation?
z.B. so: 1. Abschnitt Memory im Linker-Script der mittles Bootloader zu übertragenen Anwendung so anpassen, dass Origin für Flash/ROM die erste Addresse ist, die vom Bootloader veschrieben wird. Length um diesen Offset verringern für die Prüfung auf Größenüberschreitung. 2. Ebenfalls im Abschnitt Memory für RAM die Origin so anpassen, dass diese hinter dem 'remappbaren' Speicherbereich liegt. Anzahl Bytes steht im Manual (wenn richtig erinnert 0x40). Length entsprechend verringern. Also in der Art (nicht getestet!):
1 | MEMORY |
2 | { |
3 | ROM (rx) : ORIGIN = 0x00000000+0x3000, LENGTH = 500k-0x3000 |
4 | RAM (rw) : ORIGIN = 0x40000000+0x40, LENGTH = 32k-0x40 |
5 | } |
3. Code an den ersten Speicherstellen des Anwenderprogramms für Vektoren weiter im üblichen verschiebbare Aufbau mit LDR von PC für die Core Vectoraddressen gefolgt von den eigentliche Sprungzielen als Konstanten (.word). 4. Startup um eine Kopierroutine ergänzen, die 0x40 Bytes vom Start des Anwendungsprogramms (0x3000) an den Start des RAMs kopiert (0x40000000). Dann Remapping aktivieren. Das Ganze kann man auch etwas anders angehen ("vectors"-section), das wäre mglw. etwas eleganter aber die beschriebene Vorgehensweise sollte funktionieren. Martin Thomas
Hi Martin, dickes Dankeschön. Mit ein paar Stichwörtern (re-mappen) übersieht man dann die wichtigen Teile im Datenblatt nicht mehr... ;-) Ich findes das eigentlich schon recht elegant: exception vector an den Anfang vom RAM kopieren und dann die Vektoren auf das RAM zu mappen. (lagst übrigens mit 0x40 richtig) Gruß Andreas
Anbei mal hex-file des bootloaders, ner bl-applikation und ner pc-software passend für das olimex-board. das ganze befindet sich noch in ner frühen beta-phase; muss im code erst mal aufräumen, bevor ich's in der codesammlung präsentier ;-) trotzdem können eigene programme damit auch geladen werden. (einfach linker-file aus dem bl-applikations-ordner verwenden bzw. die linker-einstellungen, die martin thomas erläutert hat selbst einstellen) beide taster müssen bei einem reset gedrückt werden, damit in den bootloader gesprungen wird, andernfalls wird die applikation angesprungen.
Hallo Nachdem hier das Thema Bootloader aktuell ist. Ich habe ein Olimex-Board mit dem LPC2148, hier vom Shop. In dieser Kombination eine Frage: Kennt jemand von Euch einen Bootloader, mit dem man dem späteren Benutzer die Möglichkeit geben kann, Firmware-Updates selbst aufzuspielen, andererseits, die Software aber schützen kann, damit sie nur auf eigenen LPC-Boards läuft. Der Bootloader dürfte auch was kosten Freundliche Grüsse Klaus
Hallo Klaus Das ist eigentlich gar nicht so kompliziert. Lege im Bootloader und in der Firmware einen Bereich, Linkerscript, an zb 4Byte die einen definierten Inhalt haben müssen. Dann Vergleicht der Bootloader diese beiden Felder, und nur wenn beide identisch sind oder in einem von dir zu definierenden Verhältnis stehen, wird die Firmware vom Bootloader gestartet.
Hallo Ralph und Andreas Zuerst mal vielen Dank für Eure rasche Rückmeldung! @Ralph: Den Ansatz verstehe ich nicht ganz. Wenn jemand z.B. meine Firmware downloadet und auf sein Board spielt (also nicht eines von mir), dann gibt es ja keinen Bootloader, welcher die Prüfung der 4 Bytes durchführt und das Programm startet. Müsste es nicht eher umgekehrt sein, dass die "neue" Firmware in einem gesschützten Speicherbereich die 4 Bytes ausliest und dann erkennt ob es sich um ein Original-Board von mir handelt...? @Andreas: Ich habe den Code von dir heruntergeladen. Vielen Dank. Ich kann den Code von int USBHwEPRead(U8 bEP, U8 *pbBuf, int iMaxLen) nicht finden. Gibt es dafür einen Grund? Wenn ich IAP-Bootloader.exe ohne Parameter starte, dann erhalte ich von Windows einen Error-Dialog mit Exeption P9: system.io.filenotfoundexception. Vielleicht kommt der Fehler auch von der USB-Library weil im Fehlerdialog das USB-Symbol gezeigt wird. Mache ich da etwas falsch? Eine kurze Beschreibung der Nutzung wäre sehr hilfreich. Vielen Dank und beste Grüsse Klaus
Hallo Klaus Bootloader und Firmware prüfen gegenseitig. und nur wenn es in beiden Richtungen stimmt, läuft die Software.
Hi Klaus, int USBHwEPRead(U8 bEP, U8 *pbBuf, int iMaxLen): schau mal in die usbhw_lpc rein... hast du .Net 2 installiert? Brauchst du.
Hallo zusammen @Ralph: Ach so, verstehe. Was passiert aber, wenn jemand den bootloader ausliest? @Andreas: Im entpackten rar-file habe ich nichts gefunden. S.w. verwendest du aber den USB-Stack von Betrik Sikken - stimmts:)? Freundliche Grüsse Klaus
Hallo Klaus 1. gibt es in vielen µC die Möglichkeit das Auslesen zu verhindern. Protection 2. ohne zu Wissen wo und was im Bootloader stehen muss, hat da kaum einer eine Chance die Stelle zu finden. ==> das heißt das du das Linkerfile auf keinen Fall rausgeben darfst, weil darin die Position deiner Schutzbytes steht. Garantiert verhindern kannst du es nicht. Aber du kannst es so schwer machen, dass der Auswand für denjenigen zu groß wird.
LPC2148_-_IAP_-_upload\LPC2148 - IAP\Firmware_BL\LPC_USB_STACK\usbhw_lpc.c also viel genauer kann ich dir nicht sagen wo's steht...
Hallo zusammen @Andreas: Vielen Dank, beim Entpacken hat bei mir etwas nicht geklappt. Deshalb hat dat Verzeichnis mit den entsprechenden Dateien gefehlt:), Danke. .net2 habe ich nun installiert und siehe da, das Programm lässt sich nun starten. muss nun noch Winarm installieren:) @Ralph: Ok, kann das nachvollziehen. Ich hätte versucht, die Variable direkt im C-Code zu definieren. Ich habe nun etwas recherchiert und diese Artikel gefunden. Vielleicht sind sie für den Einen oder Anderen interessant http://water.cse.unsw.edu.au/esdk/ http://www.koders.com/noncode/fid96F9BDDD9E7BD89E2F155E052A80EDD542344038.aspx Freundliche Grüsse Klaus
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.