Custom Bootloader für Stm32

(Firma: JME) #3620490
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?
(Firma: JME) #3621283
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).
Gast #3837195
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
#3846416
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
#3846712
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
Gast #4136912
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?
Gast #4136932
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.
Gast #4137592
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.
#4212944
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.
#5103087
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

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