LPC2148 usb bootloader

Gast #608316
Lesenswert?
• ▲
▼
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?
Gast #608322
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?
Gast #765542
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.
(Firma: andreas-weschenfelder.de.vu) Persönliche Seite #766777
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?
Moderator Persönliche Seite #766947
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!):
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
(Firma: andreas-weschenfelder.de.vu) Persönliche Seite #767290
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
(Firma: andreas-weschenfelder.de.vu) Persönliche Seite #772700
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.
Angehängte Dateien:
Gast #776043
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
#776077
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.
Gast #777683
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
Gast #777825
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
#777931
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.
Gast #780669
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/fid96F9BDDD9E7BD89E2F155E052A80EDD542344038.aspx


Freundliche Grüsse

Klaus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren