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
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
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?
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.
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.
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.
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.
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.
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?)
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.
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.
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.
Verwendest du den gcc oder Keil. Mit Keil bekommst du wesentlich kleinere Firmwaregrößen hin.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.