Forum: Mikrocontroller und Digitale Elektronik Backup SRAM bei STM32f7 dauerhaft für Variable nutzen?


von Gerald M. (gerald_m17)


Lesenswert?

Hallo,

wenn man nach Beispielen zu dem SRAM sucht, ist es eigentlich immer so, 
dass der Zugriff hierauf nach dem Lesen/Schreiben wieder durch
1
__HAL_RCC_BKPSRAM_CLK_DISABLE()
 und
1
HAL_PWR_DisableBkUpAccess()
 deaktiviert wird.
Mein Gerät ist praktisch dauerhaft an der Steckdose und es soll 
beispielsweise die Position eines Motors bei einem Stromausfall (oder in 
meinem Fall bei reichlich debuggen und Mikrocontroller resetten) 
gespeichert werden, damit ich diesen nicht neu referenzieren muss.
Der Motor bewegt sich auch ständig, so dass sich die Position andauernd 
ändert.
Hierfür habe ich auf der Platine eine Pufferbatterie welche mit VBAT 
verbunden ist.

Spricht etwas dagegen, die Clock und den Zugriff auf den Backup SRAM 
Bereich dauerhaft aktiviert zu lassen und die Position des Motors als 
Zeiger auf einen Bereich in Backup SRAM zu initialisieren?

Muss ich dann etwas beim Stomausfall beachten, wie beispielsweise den 
Zugriff vorher deaktivieren oder die Clock deaktivieren (um vielleicht 
Strom zu sparen), oder passiert das sowieso im Batterie-Notbetrieb und 
alles ist sicher?

von Nop (Gast)


Lesenswert?

Gerald M. schrieb:

> Spricht etwas dagegen, die Clock und den Zugriff auf den Backup SRAM
> Bereich dauerhaft aktiviert zu lassen und die Position des Motors als
> Zeiger auf einen Bereich in Backup SRAM zu initialisieren?

Kann man machen. Der Sinn der Zugriffsverriegelung ist es allerdings, 
daß die Firmware nicht jederzeit da zugreifen kann, damit Softwarefehler 
im normalen Ablauf außerhalb des Ladens und Speicherns einem nicht diese 
Daten zerlegen.

Wobei ich mir jedenfalls beim F4 das Unclocking spare (verbraucht evtl. 
minimal mehr) und nur den Zugriff an- und abschalte.

> oder passiert das sowieso im Batterie-Notbetrieb und
> alles ist sicher?

Das wird einfach mit einem Chip-internen Hardware-Switch gemacht, der 
bei wegbrechender Versorgung diese Bereiche von VBAT aus speist.

von Nop (Gast)


Lesenswert?

Ach ja, eine Falle ist da: was passiert, wenn Dir die Versorgung mitten 
beim Schreiben wegbricht? Entweder hast Du da auf dem Board eine 
Detektierung plus Pufferkondensator, was Dir genug Reaktionszeit 
zwischen Detektion der wegbrechenden Versorgung und endgültig Licht aus 
verschafft, oder das Licht geht unverhofft einfach so aus.

Wenn Du dann was anderes als genau einen 32bit-Int schreibst, z.B. einen 
ganzen Satz von Daten, hast Du u.U. Inkonsistenzen. Jenseits einer 
Powerdow-Detektierung könntest Du aber immer abwechselnd auf zwei Kopien 
schreiben, damit jedenfalls eine mit Sicherheit nicht zermarmelt ist.

von Nop (Gast)


Lesenswert?

Insofern wäre das wieder gegen die Linkerversion und besser mit einer 
dedizierten Speicherfunktion zu machen, die auch das Umschalten besorgt. 
Außerdem würde ich da noch eine CRC32 über die Daten mitspeichern.

Beim Reinladen CRC-Check und auch bei gültiger CRC noch Validierung der 
Daten, ob die Werte überhaupt angehen können. Und irgendwie nen Counter 
oder so, damit Du weißt, welche der Kopien die neuere beim Speichern 
war. Mit Logik für den Überlauf natürlich, also 0 ist dann neuer als 
255.

von Gerald M. (gerald_m17)


Lesenswert?

Alles klar. Falls es mal passieren sollte, dass ich die Daten verhagle, 
ist das nicht so schlimm. Ist wie gesagt nur die Position des Motors, 
welche ich wieder kalibrieren muss. Deshalb habe ich mir auch angewöhnt 
einfach direkt keine Softwarefehler zu machen :D

Denn ich schreibe die Position teilweise mehrere hundert mal pro 
Sekunde, da macht ein locken einfach keinen Sinn.
Was funktionieren würde wäre es die Daten bei Auslösen des 
Brown-Out-Interrrupts wegzuspeichern, doch beim resetten durch den 
Debugger funktioniert das ja nicht.

edit: Jetzt erst die weiteren Kommentare gesehen.

Ich werde den Brownout aktivieren und darin das Backupregister locken. 
Da ich nur 32Bit Werte schreibe, sind diese wenigstens immer komplett. 
Falls ich mehr als nur einen Wert schreibe, sind diese zwar nur 
teilweise aktualisiert, aber aktueller kann ich es ja sowieso nicht 
machen. Irgendwann ist ja fertig mit der Spannung. Wenn es ganz blöde 
läuft, bewegt sich der Motor ja noch etwas wenn er schon keinen Strom 
bekommt.

: Bearbeitet durch User
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.