Forum: Mikrocontroller und Digitale Elektronik STM32L051: Probleme mit Protection


von Mehmet K. (mkmk)


Lesenswert?

Servus allerseits

Zur Zeit arbeite ich mit dem STM32L051.
D.h., eigentlich bin ich mit meiner Arbeit fertig. Nur: es gelingt mir 
nicht, die Protection auf Level-1 (read-out) zu setzen.
Sobald ich diese setze (gleichgültig, ob nun mit dem ST-Link Utility 
oder aus dem Programm heraus) geht nichts mehr.

Unter Errata 2.1.3 steht:

Protection level1 does not work

A mass erase is performed when the protection level is changed from 
level1 to level0. This mass erase consists in the following operations:
- Erasing the data EEPROM and Flash program memory area
- Erasing the protection option byte (RDPROT)
- Programming the targeted level (level0) in RDPROT.
Erase and write operations are not efficient when a mass erase is 
executed. As a result, the complete erasing of the data EEPROM and Flash 
program memory is not guaranteed as well as the programming of RDPROT to 
level0. After several mass erase operations, the RDPROT value is finally 
programmed with level0 but the total erasing of the data EEPROM
and Flash program memoryis still not guaranteed.

Ich verstehe das so, dass das Problem nicht beim Level-1 selbst liegt, 
sondern beim Sprung Level-1 -> Level-0.
Hat jemand eine Idee, warum ich Level-1 nicht setzen kann?

von Gerd E. (robberknight)


Lesenswert?

Mehmet K. schrieb:
> Ich verstehe das so, dass das Problem nicht beim Level-1 selbst liegt,
> sondern beim Sprung Level-1 -> Level-0.

ja, so verstehe ich das auch.

Aber da Du ja als User mit Zugriff auf SWD jederzeit von Level 1 wieder 
auf 0 gehen kannst, schützt der Level 1 Deinen Code jetzt nicht mehr 
wirklich. Denn der gleichzeitige Erase des Flashes ist ja nicht mehr 
garantiert.

Level 1 bringt also nicht das was Du erwartest.

> Hat jemand eine Idee, warum ich Level-1 nicht setzen kann?

Nein.

Was für einen Updatemechanismus im Feld hast Du vorgesehen? Bootloader?

Dann wäre evtl. Level 2 was für Dich, denn dann ist jeglicher Zugriff 
per SWD blockiert. Damit kann man das auch nicht mehr zurücksetzen. Also 
vorsicht wenn Du das ausprobierst, Du kannst die Firmware in dem 
Controller dann nur noch per Bootloader ändern, nicht mehr per SWD. Und 
Debugging geht auch nicht mehr.

von Mehmet K. (mkmk)


Lesenswert?

Ja, ich habe einen Bootloader. Dieser enhaelt eine einfache 
Dekomprimier- und Enschlüsselungs-Funktion.
Deshalb wollte ich nicht gleich auf Level-2 setzen. Denn da gibt es ja 
kein Zurück mehr. Und ich bin mir sicher, dass es nicht schlecht waere, 
zumindest ein paar Wochen einen Notausgang offen zu halten :)

Wobei es ja nicht gesagt ist, dass Level-2 so tut wie es soll. Na ja, 
wenn ich mir sicher bin, dass alles i.O. ist, werde ich mal diesen Level 
ausprobieren und hier berichten.

von Gerd E. (robberknight)


Lesenswert?

Mehmet K. schrieb:
> Deshalb wollte ich nicht gleich auf Level-2 setzen. Denn da gibt es ja
> kein Zurück mehr. Und ich bin mir sicher, dass es nicht schlecht waere,
> zumindest ein paar Wochen einen Notausgang offen zu halten :)

Gibt es doch: nennt sich Heißluftstation ;)

> Wobei es ja nicht gesagt ist, dass Level-2 so tut wie es soll.

klar. Aber ganz ohne SWD gibt es halt viel weniger Möglichkeiten da 
irgendwas von außen zu machen. Level 1 setzt dagegen schon einiges an 
korrekter Implementation im µC voraus.

von Mehmet K. (mkmk)


Lesenswert?

Beim Herumprobieren bin ich über ein weiteres Hindernis gestolpert:
Auch wenn ich keine "Read Out Protection" setzte, sondern nur den 
Bereich des Bootloaders als writeprotected markieren will, geht nichts 
mehr.

Wenn ich die Write-Protection aufhebe: weiterhin tote Hose.
Wenn ich dann einen Memory-Dump mache und es mit dem Orginal vergleiche: 
identisch.
Wenn ich den Bootloader wieder programmiere: alles i.O.

Kopfkratz.

von Mehmet K. (mkmk)


Lesenswert?

"Wer nichts waget, der darf nicht hoffen."
Also Augen zu und Sprung ins kalte Wasser.

Level-2 zusammen mit sektorweise write-protection funktioniert wie es 
soll.

\o/

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.