Forum: Mikrocontroller und Digitale Elektronik STM32 Default Bootloader ersetzen


von Patrick B. (p51d)


Lesenswert?

Hallo allerseits

Ich habe aktuell ein kleines Problem: Der Speicher von meinem STM32F071 
ist fast komplett gefüllt. Das "Programm" ist in einen Bootloader (ab 
Adresse 0x0800 0000)und eine Applikation (0x0820 0000) aufgeteilt.

Weil der Prozessor in einer grossen Produktpalette vorhanden ist, ist 
ein Wechsel eher mühsam (viele internen Reibereinen).

Nachdem ich mich nun durch viele Datenblätter von ST geplagt habe, habe 
ich vielleicht eine Lösung:
ST schreibt auf die Adresse 0x1FFF C800 eigene Bootloader (SPI, USB, 
UART...) im Information Block, bez. System Memory. Diese werden bei uns 
nicht verwendet (programmiert wird über SWO) und so würde ich immerhin 
wieder 12kByte gewinnen.
Ist es nun möglich, diese zu überschreiben und einen eigenen Bootloader 
dort zu platzieren (über SWO oder über die Applikation)? Leider 
schweigen sich die Datenblätter diesbezüglich aus.
Hat da jemand schon Erfahrungen?

Gruss
Patrick

von Felix F. (wiesel8)


Lesenswert?

Zu deinem Bootloader-Problem kann ich leider nichts sagen, aber ein paar 
andere Anregungen habe ich.
- Code refactored? (Keine Codeverdoppelung, sauber in Funktionen 
gekapselt, Design geprüft?)
- Compileroptimierungen? (Debug Informationen, Geschwindigkeit, Größe)

mfg

von Karl (Gast)


Lesenswert?

Keine Erfahrungen, aber der ST-eigene Bootloader ist eher OTP oder ROM 
als normales Flash. Da sehe ich wenig Chancen. Deine Adressangaben sind 
auch etwas "fishy", wenn ich mich nicht verrechnet habe?

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


Lesenswert?

Patrick B. schrieb:
> Ich habe aktuell ein kleines Problem: Der Speicher von meinem STM32F071
> ist fast komplett gefüllt. Das "Programm" ist in einen Bootloader (ab
> Adresse 0x0800 0000)und eine Applikation (0x0820 0000) aufgeteilt.

Wohl nicht. 0x20000 = 2MB für den Bootloader? Wo der Chip nur max. 128KB 
Flash hat?

> Nachdem ich mich nun durch viele Datenblätter von ST geplagt habe, habe
> ich vielleicht eine Lösung:
> ST schreibt auf die Adresse 0x1FFF C800 eigene Bootloader (SPI, USB,
> UART...) im Information Block, bez. System Memory. Diese werden bei uns
> nicht verwendet (programmiert wird über SWO) und so würde ich immerhin
> wieder 12kByte gewinnen.

Wie kommst du auf die merkwürdige Idee, du könntest den System Memory 
beschreiben? AFAIK ist das ROM. Kein Flash.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Axel S. schrieb:

> Wie kommst du auf die merkwürdige Idee, du könntest den System Memory
> beschreiben? AFAIK ist das ROM. Kein Flash.

Nein, es dürfte sich um Flash handeln:

Aus der STM32F0-Referenz:

"It is programmed by ST when the device is manufactured, and protected 
against spurious write/erase operations."

Allerdings hört sich das auch nicht so an, als gäbe es nochmals die 
Möglichkeit, dort etwas zu verändern. Sieht also eher schlecht aus.

von Patrick B. (p51d)


Lesenswert?

Axel S. schrieb:
> Wohl nicht. 0x20000 = 2MB für den Bootloader? Wo der Chip nur max. 128KB
> Flash hat?

Ups, sollte natürlich 0x2000 = 8kB sein.

> Wie kommst du auf die merkwürdige Idee, du könntest den System Memory
> beschreiben? AFAIK ist das ROM. Kein Flash.

Naja, im RM0091 wird dieser im Flash-Kapitel aufgeführt (und auch in 
jeder Tabelle innerhalb dieses Kapitels).

Werde wohl oder übel einen internen "Firmenkrieg" beginnen müssen, weil 
viel vom Code (~70%) vorgegeben ist und meine Applikation doch recht 
klein ausfällt, oder halt einen Wechsel auf einen anderen Chip.

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


Lesenswert?

Chris D. schrieb:
> Axel S. schrieb:
>
>> Wie kommst du auf die merkwürdige Idee, du könntest den System Memory
>> beschreiben? AFAIK ist das ROM. Kein Flash.
>
> Nein, es dürfte sich um Flash handeln:
>
> Aus der STM32F0-Referenz:
>
> "It is programmed by ST when the device is manufactured, and protected
> against spurious write/erase operations."

Oh, interessant. Da lag ich wohl falsch. Aber egal, beschreibbar ist er 
ja anscheinend trotzdem nicht.

von Sebastian S. (amateur)


Lesenswert?

Wird denn der Bootloader unbedingt benötigt?
Der belegt, auch wenn er nicht unbedingt benötigt wird, doch einige 
KByte an Platz.
Es wäre nicht das erste Mal, dass so ein Teil, auch ohne Not, mit allem 
drum und dran (vor allem mit einem USB-Stecker) im System steckt.
Viele Teile lassen sich auch mit ISP oder Debugger programmieren.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Was macht denn der Bootloader alles? Vielleicht kriegst den noch 
kleiner? Z.B. selbst coden mit CMSIS Headerfile, keine ST Lib benutzen.
Wenn du die FW von einer SD Karte flashen willst, suchst dir ein ganz 
minimalistisches FS. Und nen kleinen crypto bekommt man da auch noch 
unter :-)

Das mit der vorgegebenen FW ist natürlich Mist. Da ist die Argumentation 
aber einfach, denn es gibt nur:
- neu entwickeln
- neue MCU (ggf. Pinkompatibel?)

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

192 kBi wirklich voll?

von W.S. (Gast)


Lesenswert?

Patrick B. schrieb:
> ST schreibt auf die Adresse 0x1FFF C800 eigene Bootloader (SPI, USB,
> UART...) im Information Block, bez. System Memory. Diese werden bei uns
> nicht verwendet (programmiert wird über SWO) und so würde ich immerhin
> wieder 12kByte gewinnen.

Die Bootlader sind bei ST eigentlich IMMER in einem völlig separaten 
Speicherbereich, sind resident und tangieren den normalen Flash 
überhaupt nicht.

Es ist also herzlich zwecklos, bei Speichermangel im eigenen Programm 
über den Bootlader nachzudenken. Eher schon nützt es was, über die 
eigene Firmware nachzudenken, um diese effizienter und damit 
platzsparender zu schreiben.

W.S.

von Bernd K. (prof7bit)


Lesenswert?

Patrick B. schrieb:
> Der Speicher von meinem STM32F071 ist fast komplett gefüllt.

Wenn 120kB zu wenig sind dann werden 128kB (also ungefähr genauso viel) 
ebenfalls zuwenig sein.

von Sebastian K. (sek)


Lesenswert?

Hallo Patrick,

ich entwickel ebenfalls auf STM32 Platformen und habe bereits die 
gleichen Überlegungen angestellt wie du. Der Hauptgrund war bei mir, 
dass ich einen sicheren Bootloader benötige über welchen ich Firmware 
verschlüsselt in das Flash schreiben kann. Das ist mit dem integrierten 
Bootloader nicht möglich.

Der Platz ist bei mir nicht unbedingt das Problem, aber ich verstehe 
deine Intention. Die Aufteilung der Speicher-Pages ist je nach STM32 
Derivat nicht sehr günstig. Selbst wenn der selbst geschriebene 
Bootloader mini ausfällt, sind möglicherweise mindest 4k Flash für die 
erste Page weg. Beim STM32F0 ist man da mit 1kByte Segmentierung sehr 
dankbar.

Daher habe ich mich ebenfalls schon mit dem Thema beschäftigt. Da ST wie 
schon weiter oben geschrieben jedoch angibt, dass der System Bootloader 
bei der Produktion in ein ROM geschrieben wird, dürfte das Ersetzen 
durch einen eigenen Bootloader nicht möglich sein.

von Whynot (Gast)


Lesenswert?

Verwendest du den gcc oder Keil. Mit Keil bekommst du wesentlich
kleinere Firmwaregrößen hin.

von Patrick B. (p51d)


Lesenswert?

Bei mir läuft IAR (ist von der Firma gegeben).
Ich versuche, dass bei uns einen weiteren Controller (STM32F091) 
eingeführt wird. So hätte ich sicher keine Probleme mit der Applikation 
mehr.

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.