Bootloader über bootloader programmieren.

Gast #5556354
Lesenswert?

Hallo zusammen.

Ich wollte prinzipiell fragen, ob es möglich ist, eine Firmware mit 
integriertem Bootloader - code zu programmieren?

Konkret:

Ich habe ein "Mini-M0" Board, welches ich mit dem programmer "mikroProg" 
programmiere.

Wenn ich einen Bootloader - Programm downloade, kann ich anschliessend
über die USB Schnittstelle des Mini-M0 Boards und dem Programm 
"mikroBootloader" eine neue Firmware draufladen, ohne dass ein 
Hardware-Programmer benötigt wird. Das funktioniert super. Leider dauert 
dieser Download über die USB-Schnittstelle sehr lange - im Gegensatz zum 
download mit dem mikroProg-Programmer.

Kann ich auch in die Ziel-Firmware einen Bootloader einbauen, damit ich 
den
schnellen Download verwenden kann (mikroProg-Programmer für 
Massenproduktion unserer Hardware), und der Kunde am Schluss dennoch die 
Möglichkeit hat, die Firmware über USB up-zu-daten (ist halt langsam, 
aber so oft sollte es keine updates geben...)


geht das überhaupt? Das Programm würde sich ja dann während dem 
abarbeiten selbst überschreiben... oder verstehe ich da was falsch?

mfg

Iguan
Gast #5556404
Lesenswert?

Ohne Angabe für welche Platform kann man des nicht mit JA oder Nein 
Beantworten

Bei manchen µC Plattformen geht das, indem man mittels Bootloader zuerst 
einen BootLoaderUpdater als Applikation Flashed, der dann den Bootlader 
austauscht
Gast #5556437
Lesenswert?

Die genaue Funktion des Bootvorganges und die Varianten sind in der 
Dokumentation beschrieben.

Die Speicheraufteilung und Bootkonfigurationen in Übersicht hier: 
https://www.st.com/resource/en/datasheet/stm32f051r8.pdf

Der Ablauf und die Konfigurationen im Detail und in Bezug auf den 
jeweiligen genauen Prozessor, hier: 
https://www.st.com/resource/en/application_note/cd00167594.pdf

Lies Dir das bitte durch und stelle dann, falls nötig, konkrete Fragen.
#5556467
Lesenswert?

Warum so umständlich? Liefere die Geräte doch einfach mit ganz normalem 
Bootloader und Applikation aus, dann braucht der Bootloader sich nicht 
selbst überschreiben. Im Werk flasht Du einfach Bootloader und 
Applikation in einem Rutsch drauf. In der Praxis wird es nämlich so gut 
wie niemals nötig den Bootloader selbst später nochmal zu updaten. Also 
bleibt der drauf bis ans Ende aller Tage.
Persönliche Seite #5556468
Lesenswert?

Iguan schrieb:
> geht das überhaupt? Das Programm würde sich ja dann während dem
> abarbeiten selbst überschreiben... oder verstehe ich da was falsch?

Was genau ist das Problem, machst du nicht schon genau das? Geht es 
darum, wie man Bootloader+Firmware bei der Serienproduktion in einem 
Schritt auf den Controller bekommt?

Der Bootloader überschreibt ja sowieso den Speicher während er läuft, 
das scheint also zu gehen!

Warum überhaupt ist der Bootloader so langsam? USB sollte doch schnell 
genug sein...
#5556637
Lesenswert?

Gerd E. schrieb:
> Iguan schrieb:
>> Der uC ist der "STM32F051..."
>
> Ein STM32F051 hat kein integriertes USB.
>
> Wie ist der denn dann ans USB angeschlossen?

Vielleicht hat er irgend so eine Bitbanging-USB-1 Geschichte am Laufen 
(jemand hat das ja mal aus sportlichem Ehrgeiz auf nem winzigen AVR 
implementiert, es würde mich keinesfalls wundern wenn dieses kleine 
Kunstwerk zwischenzeitlich auch schon auf ARM portiert wurde), das würde 
auch die langsame Übertragung erklären.
Gast #5556650
Lesenswert?

Iguan schrieb:
> Und ohne Bootload-updater geht das nicht? Wegen dem selbst überschreiben
> des Bootloaders während dem abarbeiten des Bootloader codes??

Ja sag mal, bist du blind oder liest du keine µC-Dokumentationen?

Der STM32F051 hat bereits einen fest eingebauten Bootlader, den du auf 
alle Fälle über den ersten UART erreichen kannst. Siehe Bedeutung der 
BOOT0 und BOOT1 Pins der STM32 Controller (bei manchen Typen nur BOOT0).

Für das Programmieren über diesen Bootlader brauchst du nix in deiner 
Firmware zu ändern oder zu berücksichtigen, du mußt bloß die besagten 
BOOT-Pins in deiner Schaltung richtig behandeln. Und du mußt die 
gewaltige Investition tätigen, dir vom freundlichen Chinesen einen 
simplen USB-->serial Konverter mit "TTL"-Pegel (also ohne den V.24 
Pegel) zu kaufen, Kostenpunkt so etwa 2..3 €.

Mein selbstgeschriebenes Brenn-Programm dazu findest du hier im Forum - 
falls du dir nicht was Eigenes zu schreiben gedenkst und auch mit dem 
Zeug von ST oder dem alten ERFOS nicht arbeiten willst. Gewiß gibt's 
auch noch andere Brennprogramme für diesen Zweck.

W.S.
#5556731
Lesenswert?

Iguan schrieb:

> Ich wollte prinzipiell fragen, ob es möglich ist, eine Firmware mit
> integriertem Bootloader - code zu programmieren?

Was für eine dümmliche Frage. Ein Bootloader ist ein Stück Software. 
Sobald du irgendwie Software in dem µC kriegst, kann es natürlich auch 
ein Bootloader sein.

> Konkret:
>
> Wenn ich einen Bootloader - Programm downloade, kann ich anschliessend
> über die USB Schnittstelle des Mini-M0 Boards und dem Programm
> "mikroBootloader" eine neue Firmware draufladen, ohne dass ein
> Hardware-Programmer benötigt wird. Das funktioniert super. Leider dauert
> dieser Download über die USB-Schnittstelle sehr lange - im Gegensatz zum
> download mit dem mikroProg-Programmer.

Kann sein. Ist aber nicht zwingend so. Ich kenne den "mikroBootloader" 
nicht, aber HID hört sich falsch an. Standardprotokoll für 
USB-Bootloader ist DFU. Und warum ist das ein Problem? Und warum 
verwendest du nicht den (im ROM) eingebauten Bootloader? Oder auch 
weiterhin den Download per SWD?

> Kann ich auch in die Ziel-Firmware einen Bootloader einbauen, damit ich
> den schnellen Download verwenden kann

Selbstverständlich kannst (könntest?) du deinen eigenen Bootloader 
schreiben. Ob der dann schneller ist als der ominöse "mikroBootloader", 
bleibt abzuwarten. Einfacher wäre es sicher, wenn du einen der 
unzähligen vorgefertigten (USB DFU) Bootloader verwendest.

> geht das überhaupt? Das Programm würde sich ja dann während dem
> abarbeiten selbst überschreiben... oder verstehe ich da was falsch?

Da verstehst du was falsch. Der Bootloader ist der Teil, der sich gerade 
nicht selber überschreibt. Der Flash ist praktisch zweigeteilt. Am 
Anfang (wo der µC nach dem Reset hinspringt) liegt der Bootloader. Und 
dahinter liegt das eigentliche Programm, das der Bootloader bedarfsweise 
lädt bzw. im Normalfall einfach nur ausführt (weil es früher bereits 
geladen wurde).

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