STM32L431 Boot Modi Verständnissproblem

Gast #5547120
Lesenswert?

Hallo Forum,

ich versuche das setzen des Boot Modus beim STM32L431 zu verstehen.
Vom STM32F103 sind mir beide Boot Pins (1 und 2) bekannt.
Beim L431 gibt es nur einen.

Ich habe folgende App Note versucht zu verstehen

https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

Ziel ist es, den Bootloader über USART2 zu bedienen.

Hat da jemand Erfahrungen sammeln können und kann mir das Verhalten 
näher bringen ?


Danke und Gruß
Stephan
Gast #5547199
Lesenswert?

Schau lieber in das Referencemanual unter "2.6 Boot configuration", dann 
verstehst Du es eventuell auch.
In der App-Note steht im Prinzip, daß es drei Möglichkeiten gibt den 
internen Bootloader zu aktivieren:
Boot0(pin) = 1, nBoot1(bit) = 1 and nBoot0_SW(bit) = 1
nBoot0(bit) = 0, nBoot1(bit) = 1 and nBoot0_SW(bit) = 0
Boot0(pin) = 0, nBoot0_SW(bit) = 1 and main flash empty
Und was Du dann tun mußt, damit er über UART2 arbeitet (0x7F darüber 
senden).

Es hängt also von nSWBOOT0 (FLASH_OPTR[26]) ab, ob der Pin überhaupt 
eine Rolle spielt oder statt dessen nBOOT0 (FLASH_OPTR[27]) benutzt 
wird. nBOOT1 (FLASH_OPTR[23]) gibt dann im Prinzip an, ob er im 
Bootloader (System memory) oder im SRAM landet.
Gast #5547375
Lesenswert?

Soweit verstanden, danke.
Ich habe nur eine Denkblokade wann ich die Registerwerte schreibe.
Z.B. durch einen Jumper und löse danit einen Interrupt aus, schreibe die 
Registerwerte und führe dann per Software einen Reset aus?

Wenn ja, wie führe ich einen Reset aus, so dass die Registerwerte ihren 
Wert erhalten.
Gast #5547377
Lesenswert?

> Boot0(pin) = 0, nBoot0_SW(bit) = 1 and main flash empty

DAs ist im ueberigen ziemlich doof. Es bedeutet naemlich das ein neu 
gebautes Board auf dem man noch keine Firmware hat voll laeuft und 
entsprechend viel Strom zieht. Damit sollte dann die Hardware klar 
kommen....

Olaf
Gast #5547853
Lesenswert?

Ich fasse mal zusammen was ich mir aus den Datenblättern zusammengelesen 
habe:

Im FLASH_OPTR (Flash Option Register) müssen folgende Bits geschrieben 
werden

- nBOOT1 (FLASH_OPTR[23]) = 1

- nBOOT0 (FLASH_OPTR[27]) = 0

- nSWBOOT0 (FLASH_OPTR[26]) = 0

Dann landet der Controller nach einem Reset im System Memory, d.h. 
Bootloader


Das Ganze scheint im Flash zu liegen. Jetzt muss ich mir überlegen wie 
ich durch setzen eines Jumpers die Bits setzen und auch wieder 
zurücksetze.

Gibt es da einen praktikablen Weg? Wenn der Controller vom System Memory 
bootet und über den boot loader geflasht habe, möchte ich ihn ja 
irgendwie wieder davon überzeugen das Anwenderprogramm zu booten.

Oder kann man das FLASH_OPTR Register temporär beschreiben und danach 
eine Art Softwarereset auslösen bei dem der Status bestehen bleibt bzw. 
bei einem "richtigen" Reset der alte Status wiederhergestellt ist???

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