Forum: Mikrocontroller und Digitale Elektronik Bootloader über bootloader programmieren.


von Iguan (Gast)


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

von CK (Gast)


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

von Iguan (Gast)


Lesenswert?

Verstehst du unter Plattform die IDE?

Die heisst "MikroC Pro for ARM". Der uC ist der "STM32F051..."

Gruss

Iguan

von CK (Gast)


Lesenswert?

Als Plattform meine ich auf welchen Microcontroller dein Board basiert.

In deinem Fall also ein STM32.

Bei denen wäre der oben beschriebene Weg möglich.

von Iguan (Gast)


Lesenswert?

Ok, danke!

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

mfg

Iguan

von Theor (Gast)


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.

von Bernd K. (prof7bit)


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.

von Niklas G. (erlkoenig) Benutzerseite


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...

von Gerd E. (robberknight)


Lesenswert?

Iguan schrieb:
> Der uC ist der "STM32F051..."

Ein STM32F051 hat kein integriertes USB.

Wie ist der denn dann ans USB angeschlossen?

von Bernd K. (prof7bit)


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.

von W.S. (Gast)


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.

von Axel S. (a-za-z0-9)


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).

: Bearbeitet durch User
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.