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?
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.
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.
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.
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.
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.