Forum: Mikrocontroller und Digitale Elektronik Custom Bootloader für Stm32


von Joe M. (Firma: JME) (joem)


Lesenswert?

Ich benötige für 'nen Stm32F4 einen Bootloader mit ein paar besonderen 
Eigenschaften.

Um nicht absolut bei 0 anfangen zu müssen, würde ich dazu gerne auf 
einen bestehenden Bootloader aufsetzen.

Im Beitrag "Custom Bootloader für den STM32??" habe ich u.a. gelesen:
> Wenn richtig erinnert, ist auch im Code ("ZIP") zur Application Note
> "STM32 Flash Programming" ein serieller Bootloader drin ...

Auf www.st.com konnte ich diese Application Note leider nicht finden 
(vielleicht hab' ich ja auch falsch gesucht?).

Immerhin habe ich das Programming Manual gefunden:
http://www.st.com/web/en/resource/technical/document/programming_manual/CD00233952.pdf

Der im o.g. Beitrag enthaltene Link (I²C Bootloader?):
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00251611.pdf
ist tot, aber ich denke ich habe das betreffende Pdf hier gefunden:
http://www.icbase.com/Promotion/download/AN3078.pdf
Leider enthält dies aber auch kein Beispielcode.

Ich bin also auf der Suche nach Bootloader Beispielcode (z.B. via Uart), 
möglichst kompilierbar (am besten mit gcc) inkl. Makefile, Startup Code 
und Linkerskript. Hat jemand eine Idee ob/wo ich fündig werden könnte?

von Bernardo F. (bernardo)


Lesenswert?

Hallo Joe,

ein unter GPL lizensierter Bootloader (auch) für die STM32 ist der 
OpenBLT von Feaser: http://feaser.com/openblt/doku.php?id=homepage

Viele Grüße
bernardo

von ..,- (Gast)


Lesenswert?


von Joe M. (Firma: JME) (joem)


Lesenswert?

Danke für eure Antworten.

Mit dem entscheidenden Suchbegiff »in-application programming« fand ich 
nun diese Übersicht:
    http://www.st.com/stonline/stappl/resourceSelector/app?page=fullResourceSelector&doctype=application_note&SeriesID=1743
und letztlich auch die Application Note AN3965
    http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF257903
    »STM32F4 in-application programming (IAP) using the USART (AN3965)«
inkl. Sourcen (hab noch nicht kompiliert, hmm, es gibt offenbar kein 
vorgefertigtes Setup für gcc, schade eigentlich).

von Tobias (Gast)


Lesenswert?

Hallo,

ich versuche grade den OpenBLT von Feaser zum laufen zu bekommen.

Hardware STM32F103C8T6  UART1  TX PA9 / RX PA10, 12Mhz Quarz

Leider nutzt das Beispiel Olimex STM32P103 GCC die UART2.

Kann mir da evtl jemand weiter helfen?

Ich habe zwar bereits versucht die Init zu ändern, aber ich bekomme
keinen Kontakt von der IDE zum STM32.

Gruß Tobias

von Bernardo F. (bernardo)


Lesenswert?

Hallo Tobias,

für UART1 muss vor dem Kompilieren in blt_conf.h der Kanal-Index auf 
Null (=UART1) gesetzt werden:

...
#define BOOT_COM_UART_CHANNEL_INDEX     (0)
...

Hier der Link zur Datei für das Olimexboard und gcc, in der der Eintrag 
zu ändern ist: 
http://sourceforge.net/p/openblt/code/HEAD/tree/trunk/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/blt_conf.h#l89

Viele Grüße
bernardo

von Tobias T. (tobiast)


Lesenswert?

Bernardo F. schrieb:
> Hallo Tobias,
>
> für UART1 muss vor dem Kompilieren in blt_conf.h der Kanal-Index auf
> Null (=UART1) gesetzt werden:
>
> ...
> #define BOOT_COM_UART_CHANNEL_INDEX     (0)
> ...
>
> Hier der Link zur Datei für das Olimexboard und gcc, in der der Eintrag
> zu ändern ist:
> 
http://sourceforge.net/p/openblt/code/HEAD/tree/trunk/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/blt_conf.h#l89
>
> Viele Grüße
> bernardo

Hallo.
vielen Dank.
Das hatte ich bereits getan.
Nachdem ich den ganzen Code durchforstet habe, läuft jetzt der 
Bootloader und das Demoprogramm.
Im Bootloader Main müssen noch die Pinne für UART 1 definiert werden 
(ich dachte das ist nur zum loggen gedacht)
Und im Demoprogramm sind mehrere Stellen an der statt UART2 die Uart1 
deklariert und eingestellt werden muss.

Nun läuft der Bootloader zumindest läuft der Bootloader unter der 
Codelite IDE.
Mein eigenes User Programm habe ich in CooCox geschrieben. Da bekomme 
ich es noch nicht hin dass das Programm läuft wenn ich es über den 
Bootloader lade.
Ich habe diese 32Bit am ende der Vectortabelle eingefügt.
Ich habe die Progammstartadresse geändert.
Nur habe ich Probleme den Stackpointer
richtig zu setzen.

Gruß Tobias

von dilo83 (Gast)


Lesenswert?

Hallo,
ich hänge mich hier einfach mal mit ran.

Und zwar habe ich folgendes Problem: Ich möchte die Anwendung, die 
später mal vom Bootloader geflasht und angesprungen wird debuggen.

Die Startadresse im Flash habe ich im Linker-File geändert, auch den 
Offset für die Vektortabelle gesetzt. Nun ist mein Problem, dass der 
Debugger ST-Link V2 über openocd in eclipse immernoch die alte 
Startadresse des Reset_Handlers anspringt, obwohl dieser laut .map file 
an der neuen Adresse steht.

Irgendwo hab ich gelesen, dass der Debugger anhand des .elf files weiß, 
wo er starten muss. Ist das so? Wie kann ich die Anwendung debuggen, 
ohne den Bootloader installiert zu haben? Geht das überhaupt, oder 
braucht der Controller Code an seiner Startadresse z.B. 0x0800000 wenn 
die eigentliche Anwendung bei 0x08004000 beginnt? Wie debuggt man sowas?

von Disco (Gast)


Lesenswert?

Ich habe es so gemacht, das der Bootloader vom Hauptprogramm aufgerufen 
wird. Ich hatte den interresanten Effekt, das der Debugger in meinem 
Fall für den Bootloader automatisch in dem Moment begonnen hat, wenn ich 
vom Hauptprogramm in den Bootloader gesprungen ist. Habe nicht gedacht 
das es dann doch so einfach ist.

von Christian (Gast)


Lesenswert?

Der Debugger wartet darauf, das der MC mit seiner Codeausführung an der 
Einsprungadresse deines Codes vorbeikommt. Wenn du den auf 0x800000 hast 
dann passiert das sofort. Ist der weister hinten dann brauchst du irgend 
ein Programm an 0x800000 das den Sprung an deine neue Einsprungadresse 
ausführt.

von Mathias G. (mgiaco)


Lesenswert?

Hallo Tobias,

Habe jetzt das selbe Problem mit dem openblt und mit meinem eigenen User 
Programm. Hast du hierfür eine Lösung gefunden?

sg
mathias

von Toby (Gast)


Lesenswert?

Hallo.
Nein. Leider nicht.
Gruß Toby

von Mathias G. (mgiaco)


Lesenswert?

Na dann Schreib ich dir sobald ich was habe.

sg
mathias

von Steffen R. (steffen_rose)


Lesenswert?

Debugger, die entsprechendes können, setzen den PC und SP, anstatt nach 
dem Reset loszulaufen.

Ich arbeite nicht mit OpenOCD. Aber kurz die Problematik.
Beim Reset liest der Prozessor SP und PC aus der Vektortabelle. Ist 
diese gelöscht, hängt sich hier der Prozessor auf.
(Lesen von 0xFFFFFFFF, Hard Fault Trap ist nicht definiert ....)

Insofern muß OpenOCD so eingestellt werden, dass dieser keinen Reset 
durchführt und nur die Register setzt.

Leichter ist es meist, den Bootloader so zu flashen, dass dieser immer 
die Applikation anspringt.

von mathias (Gast)


Lesenswert?

Also ich habe das Bootloader Problem gelöst es ist auch ein neues Demo 
im SVN für das Nucleo Board

sg
mathias

von Carsten B. (klommer)


Lesenswert?

Hallo Zusammen,

der Thread ist leider schon etwas älter aber vielleicht gibts dazu ja 
noch eine kleine Hilfe, ich wäre jedenfalls dankbar!

Mein Problem:

Ich nutze einen STM32F334 und möchte via den OpenBlt mit CAN die SW 
flashen. Das Ganze fuznktioniert auch so lange bis ich den Bereich für 
die Checksumme integrieren will, dann stürzt das Programm nach 400 Byte 
(ich vermute die ersten 512 Byte)ab weil es einen programmingerror vom 
Flash gibt. Programmieren tu ich über MicroBoot das vom BLT mitgeliefert 
wird. Mein CAN-Dongle ist ein PCAN-Adapter.

Hat jemand schon mal via CAN mit OpenBlt programmiert?


Wäre dankbar für Anregungen!


Gruß

Carsten

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.