Forum: Projekte & Code [S]STM32 one-wire Bootloader (UART)


von Ingo S. (ingo-s)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Wieso Seriell?
Mit SWD werden doch auch nur 3 Pins benötigt. Und man kann noch 
debuggen...

von Smurf (Gast)


Lesenswert?

>oder als Vorlage eine normale UART Version, die sich auf one-wire

Die betreffende ST Appnote schon studiert?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Ingo S. (ingo-s)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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?

von Kai O. (kaio)


Lesenswert?


von Kai O. (kaio)


Lesenswert?

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"

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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
}

von Ingo S. (ingo-s)


Lesenswert?

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
Noch kein Account? Hier anmelden.