Hi, es muß ja nicht jeder das Rad neu erfinden. Verwöhnt vom AVRootloader suche ich für den STM32 ähnliches (ohne Crypto). Bei meinen Modellbau Sensoren steige ich gerade auf den STM32 um und vermisse 1. die AVR Bootsektion und 2. die Möglichkeit mit einem USB-Seriell one-wire Adapter Updates einspielen zu können. Der Sensor hat eine serielle one-wire Schnittstelle zum Empfänger, die auch für die Parametrierung mit einem USB-Seriell Adapter benutzt wird. Für Updates den BOOT0 Pin zu schalten, eine getrennte serielle Schnittstelle anzubieten sowie der Zwang einen anderen USB-Adapter zu benutzen ist doch sehr umständlich und ein Rückschritt. Daher suche ich einen one-wire fähigen Bootloader für STM32F05x/F10x, oder als Vorlage eine normale UART Version, die sich auf one-wire Betrieb anpassen lässt. Gruß Ingo
Wieso Seriell? Mit SWD werden doch auch nur 3 Pins benötigt. Und man kann noch debuggen...
>oder als Vorlage eine normale UART Version, die sich auf one-wire
Die betreffende ST Appnote schon studiert?
Man kann auch aus der Applikation in den ST Bootloader springen. Aber wie das geht weiß ich nicht, ich habe es aber schon mal gesehen.
Die Application Nodes zum Bootloader habe ich mir angesehen, die Links zu den Sourc-Codes laufen z.Zt. leider alle auf "404 Server Error". Gruß Ingo
Ich meine, um in den ST eigenen Bootloader zu springen muss man die Adresse dieser Main-Routine in den PC laden. Die Adresse jedoch ist bei den STM32-Chips je nach Größe vom "System Memory" unterschiedlich. Bei den Devices mit 2KB fängt der System-Menory bei 0x1FFFF000 an. Da wird vermutlich die Interrupt-Vecortabelle liegen. Somit macht man einen Call Befehl auf die Adresse die in 0x1FFFF004 gespeichert ist. Somit müsste der im Bootloader landen - ganz ohne Boot-Pin. Ist nur eine Vermutung - Kannst Du das mal testen?
Habe mir neulich nen CAN Bootloader geschrieben. Ist eigentlich relativ Straighforward. Es gibt Appnotes zu Ethernet Bootloader. Die ROM Bootloader Protokolle sind auch relativ gut on den Appnotes berschrieben. Stichwort hier ist "IAP Bootloader"
Ich habe das aus dem Video mal schnell abgetippt:
1 | #include "stm32f10x_rcc.h" |
2 | #include "core_cm3.h" |
3 | |
4 | // Springe in STM32-Bootloader
|
5 | void (*SysMemBootJump) (void); |
6 | void BootLoaderInit(unsigned long BootLoaderStatus); |
7 | |
8 | // Goto STM32 Internal Bootloader
|
9 | void BootLoaderInit(unsigned long BootLoaderStatus) |
10 | {
|
11 | SysMemBootJump = (void (*)(void)) (*((unsigned long *) 0x1fff0004)); // <<< change address for your device!!! |
12 | |
13 | if (BootLoaderStatus == 1) |
14 | {
|
15 | // Shut down any tasks running
|
16 | RCC_DeInit(); |
17 | SysTick->CTRL = 0; // Reset the Systick Timer |
18 | SysTick->LOAD = 0; |
19 | SysTick->VAL = 0; |
20 | |
21 | __set_PRIMASK(1); // Disable Interrupts |
22 | |
23 | __set_MSP(0x20001000); // Set the main stack pointer to its default value |
24 | |
25 | SysMemBootJump(); |
26 | |
27 | while(1); |
28 | }
|
29 | }
|
Danke für die Unterstützung. Der ST Flash Loader Demonstrator sendet nur 2 chars in 60us Abstand (155200Bd) als Anforderung wie ich eben gemessen habe. Ohne Antwort kommt nach einer Weile dann eine Fehlermeldung. Ist als 1. Notlösung schon mal brauchbar um den BOOT0 Pin nicht belegen zu müssen. Ohne eigenen PC-Loader ist es wohl die beste Lösung, einfach das ST Protokoll im eigenen Bootloader zu implementieren. Gruß Ingo
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.