www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2148 usb bootloader


Autor: Rupplyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

hat schon jemand den Bootloader hier zum Laufen gekriegt?

http://www.recherche.enac.fr/paparazzi/wiki/index....

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?

Autor: ARM-Fan (Gast)
Datum:

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

Autor: Rupplyn (Gast)
Datum:

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

Autor: Wulf Schlüter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich brauche das *.hex file von dem tnkernel bootloader. Wer hat es?
Gruß Wulf

Autor: Wulf Schlüter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habt Ihr das Hex File von dem TN Loader? Gruß Wulf

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wulf: Hab ich nicht zur Hand, aber was soll dir das Hex-File dann 
helfen?

Autor: Wulf Schlüter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer hat son Bootloader?? mfG W. Schlüter

Autor: ARM-Fan (Gast)
Datum:

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

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:

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

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!):
MEMORY
{
  ROM (rx)    : ORIGIN = 0x00000000+0x3000, LENGTH = 500k-0x3000
  RAM (rw)    : ORIGIN = 0x40000000+0x40,   LENGTH = 32k-0x40
}

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

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:

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

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:
Angehängte Dateien:

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

Autor: Klaus (Gast)
Datum:

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

Autor: Ralph Broeder (ralph-b)
Datum:

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

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Klaus (Gast)
Datum:

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

Autor: Ralph Broeder (ralph-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Klaus

Bootloader und Firmware prüfen gegenseitig. und nur wenn es in beiden 
Richtungen stimmt, läuft die Software.

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Klaus,

int USBHwEPRead(U8 bEP, U8 *pbBuf, int iMaxLen):
schau mal in die usbhw_lpc rein...

hast du .Net 2 installiert? Brauchst du.

Autor: Klaus (Gast)
Datum:

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

Autor: Ralph Broeder (ralph-b)
Datum:

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

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LPC2148_-_IAP_-_upload\LPC2148 - 
IAP\Firmware_BL\LPC_USB_STACK\usbhw_lpc.c

also viel genauer kann ich dir nicht sagen wo's steht...

Autor: Klaus (Gast)
Datum:

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


Freundliche Grüsse

Klaus

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.