Forum: Mikrocontroller und Digitale Elektronik Microchip: PIC32MX Harmony USB Bootloader MSD


von Master S. (snowman)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Mein PIC32MX450F256H würde ich gerne mit einem MemoryStick bootloaden 
können. Mit "Generate 16-bit code" kompiliert alles gut und auch die 
Zielapplikation funktioniert mit diesem Bootloader, jedoch ist diese 
Option nur 60 Tage(?) gültig :-) ...Diese Option habe ich nun nicht 
mehr. Wenn ich das richtig interpretiere, wird ohne diese Option der 
Code grösser als ins BootFlash rein passt (siehe Bild).
Leider bin ich absolut nicht bewandert, wie/was man beim Linker 
einstellen muss, dass 1. der Bootloader kompilliert, und 2. was ich dann 
beim Linker für die "Ziel-Firmware" ebenfalls anpassen muss.

Ich hätte erwartet, dass jemand schon vor dem selben Problem stand, 
einen USB-MemoryStick-Bootloader für den PIC32MX zu machen... Leider 
finde ich keine Hilfe im Internet: Ist es zu trivial resp. ich bin zu 
blöd?

Im Beitrag Beitrag "PIC32MX Bootloader MSB" wird auf ein 
Forumsbeitrag bei Microchip verwiesen, wo einiges hin und her kopiert 
und editiert wird etc. Ich blicke da nicht durch, zumal am Schluss ja 
die Applikation reproduzierbar abstürzt.

www.microchip.com/mymicrochip/filehandler.aspx?ddocname=en573735 gibt's 
Hinweise, wie man das Linkerskript anpassen muss, nachdem der 
Bootloader kompilliert. Soweit bin ich aber nichtmal. Kann mir jemand 
sagen, wo ich was bei den Linkerscripts anpassen muss? Wieso gibt's kein 
Tutorial?

Vielen Dank




ps: Langsam geht mir das Harmony/XC32 auf den Sack. Wenn alles 
klickibuntimässig auf Anhieb funktionier, ist ja gut. Wenn es aber nicht 
geht, muss man bei Microchip richtig mühsehlig suchen und manuell 
irgendwas wursteln. Angefangen bei Portpins setzen über Funktionen, die 
im XC-Compiler mit neuen Versionen einfach deaktiviert werden etc.

von Mmhm (Gast)


Lesenswert?

Master S. schrieb:
> ps: Langsam geht mir das Harmony/XC32 auf den Sack. Wenn alles
> klickibuntimässig auf Anhieb funktionier, ist ja gut. Wenn es aber nicht
> geht, muss man bei Microchip richtig mühsehlig suchen und manuell
> irgendwas wursteln. Angefangen bei Portpins setzen über Funktionen, die
> im XC-Compiler mit neuen Versionen einfach deaktiviert werden etc.

Hmm, das Problem kenne ich. Ich habe auf der PLIB (der Vorgänger 
sozusagen) basierende Projekte umgesetzt, die PLIB wurde fallengelassen. 
Jetzt darf man umständlich die PLIB wieder einfrickeln, um die alten 
Projekte überhaupt noch bauen zu können.
Schlimmer noch: In der PLIB sind Fehler, die finden ist in der 
Macrohölle ein absoluter Wahnsinn.
Noch schlimmer: Beispiele in der Hilfe basieren noch auf der PLIB.

Darum habe ich alle meine PIC32 Projekte auf eine selbergeschriebene 
Basis getellt. Die ist (realtiv) unabhängig von der Compilerversion. 
Natürlich ist das kein Option für USB...

Das ist eine neue Mode mit diesen Frameworks, und hat so seine 
Nachteile...

Das Problem gibts auch bei STM32 und CUBEMX. Derselbe Mist. Bei uns in 
der Arbeit haben sie begonnen, auf von der Peripheral Lib Cube 
umzustellen, aber dann schnell einen dreifachen Salto rückwärts gemacht, 
wegen "toller" "Fundstücke" im Cube-Code.

@Topic:
Schau dir mal den M-Stack an:
http://www.signal11.us/oss/m-stack/
Ich habe den für CDC verwendet, das ging einigermaßen (verglichen mit 
dem von Microchip...). Es gibt auch Beispiele für Mass-Storage, daraus 
einen Bootloader basteln sollte möglich sein.
Eines muss klar sein: Ich habs nicht ausprobiert, über die Güte der 
Sache kann ich also nichts sagen!

USB ist sowieso ein mühsames Gewürge auf Microcontrollern, zumindest aus 
meiner Sicht...

von Jim M. (turboj)


Lesenswert?

Master S. schrieb:
> ch hätte erwartet, dass jemand schon vor dem selben Problem stand,
> einen USB-MemoryStick-Bootloader für den PIC32MX zu machen... Leider
> finde ich keine Hilfe im Internet: Ist es zu trivial resp. ich bin zu
> blöd?

Üblicherweise nimmt man (Micro-)SD Karten, die sind eine Größenordnung 
einfacher anzusteuern als USB-Sticks.

Das Problem ist das Du dafür den dicken USB Host Stack (plus etwas SCSI) 
brauchst, 42kB sind schon recht klein dafür.

Zum Vergleich: Auf Cortex-M3 hatte ich einen SDHC Bootloader (SPI) in 
eine 4KB Page unterbringen können.

Du hast IMHO nur die 2 Alternativen:
 - Redesign auf (Micro-)SDHC
 - Kauf der USB Host Lizenz

von Master S. (snowman)


Lesenswert?

Danke für eure Beiträge. Ich habe ja einen USB-Bootloader noch mit der 
16bit-Option kompiliert und der passt komplett ins Boot-Flash (eine 
Kopie des hex-Files habe ich schön gesichert), nur würde ich gerne in 
Zukunft den Bootloader ggf. anzupassen können.

Die Option mit SD-Karte kommt für mich nicht in Frage. Danke aber 
trotzdem für den Gedanken.

Ja, die lieben PLIB! Auch das neue Harmony v2.x generiert Source-Files 
mit PLIB, Memcopy und/oder ähnlichem. und motzt dann anschliessend beim 
compilieren, dass es diese Befehle nicht mehr unterstützt... Ich für 
mich: Ich bleibe bei Harmony v1.x und XC32 v1.40 - sollte ich das nicht 
mehr brauchen können, schaue ich über den Tellerrand, was es sonst noch 
an Mikrokontrollern von anderen Herstellern gibt.

ps: Wenn man in Harmony v2.x das USB-Bootloader-Linker-File für die 
Zielapplikation generiert, aber den Bootloader in Hamony v1.x erstellt 
hat, funktioniert's nicht, weil in v.2.x andere Adressen verwendet 
werden - typisch Harmony :-(

: Bearbeitet durch User
von Andreas G. (beastyk)


Lesenswert?

Moin,
den ganzen Harmony-Mist haben die doch nur gemacht damit Lisa Müller aus 
Lüdenscheidt auch einen Microchip Controller programmieren kann, wozu 
sich auch mit Datasheets rumschlagen!
Aber wehe man muß der bunten Klickerwelt unter die Motorhaube 
gucken...die Vorredner haben sowas von recht.
Die Plib checken war mit dem Datasheet zusammen schon einfacher zu 
überblicken.

Gruß
Beast

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
Noch kein Account? Hier anmelden.