Forum: Mikrocontroller und Digitale Elektronik STM32 bootloader - write protection


von har (Gast)


Lesenswert?

Liebes Forum,

ich beschäftige mich derzeit mit dem Bootloader des STM32.
Hier habe ich alle Commands programmiert (wie im Datenblatt AN3155 
vorzufinden), um mit einem STM32 einen weiteren programmieren zu können.

Nun habe ich Probleme mit dem "Write Protect Command". Grundsätzlich 
funktioniert dieser Befehl, allerdings kann ich anschließend keine 
weiteren Commands durchführen. Ich muss dann jedes mal den Boot-Mode 
verlassen (Reset) und erst nach einem neuen Boot-Start funktionieren 
alle weiteren Befehle wieder.

Im selben Datenblatt habe ich gesehen, dass nachdem erfolgreich ein 
"Write Protect Command" durchgeführt wurde, ein ACK und anschließend ein 
"Generate system reset" durchgeführt wird.
Ich vermute, dass ich dadurch Probleme bekomme.
Das selbe kommt auch bei folgenden Commands vor: "Write Unprotect", 
"Readout Protect" und "Readout Unprotect"

Hat jemand Erfahrungen mit "Write Protect"? Bzw. hat jemand eine Idee 
was beim "Generate system reset" genau gemacht wird?

Vielen Dank für eure Hilfe!!

von pegel (Gast)


Lesenswert?

Das mit dem Reset nach solchen Aktionen ist nun mal so.
Ist doch eigentlich ein Vorteil das das so ist, daß schließt Fehler aus.
Vermutlich werden interne Flags während des Reset aus dem Flash geladen.

von eagle user (Gast)


Lesenswert?

har schrieb:

> Im selben Datenblatt habe ich gesehen, dass nachdem erfolgreich ein
> "Write Protect Command" durchgeführt wurde, ein ACK und anschließend ein
> "Generate system reset" durchgeführt wird.
> Ich vermute, dass ich dadurch Probleme bekomme.

Warum Probleme? Nach einem Reset ist doch alles in einem wohldefinierten 
Zustand? Vor allem aber:

> um mit einem STM32 einen weiteren programmieren zu können.

dann hast du doch die volle Kontrolle über den weiteren STM32. Wenn du 
weiterhin seinen BOOT-Pin ansteuerst, startet gleich wieder der Boot 
Loader, du musst nur wieder ein connect machen. Und wenn nicht, startet 
das frisch geflashte Programm.

> Hat jemand Erfahrungen mit "Write Protect"?

Der Stress kommt nicht vom Write Protect sondern von den Option Bytes. 
Die können nur nach einem Reset aus dem Flash in die diversen 
Hardware-Module (Reset, Power, Debug, Bus Matrix,...) kopiert werden. 
Aber das stört doch nur, wenn du Write Protect und Readout Protect 
einschalten willst. In dem Fall kannst du einen Reset sparen, indem du 
alle Option Bytes auf einmal schreibst (mit Write Memory).

> Bzw. hat jemand eine Idee was beim "Generate system reset"
> genau gemacht wird?

Das ist wohl geheim. Ich kenne 3½ Möglichkeiten:
 a) alle benutzten Register "von Hand" zurück setzen
 b) per SCB->AIRCR = AIRCR_SYSRESETREQ_MAGIC;
 c) per Watchdog; wahlweise IWDG oder WWDG
Wegen zuviel Aufwand und Risiko scheidet a) wohl aus. Der Ausdruck 
"system reset" ist mir zu schwammig, spricht aber für b).

b) und c) haben praktisch die gleiche Wirkung wie ein externer Reset. 
Was der Boot Loader außer dem Reset noch macht, kann also nur im RAM 
Spuren hinterlassen, weil er nach dem Reset nichts mehr machen kann.

Einzelne Register im RTC-Modul haben ihr eigenes Reset-Signal, das 
müsste der Boot Loader extra ansteuern. Einzelne Register im DEBUG-Modul 
reagieren nur auf Power On Reset, die bleiben also unverändert.

Im RCC->CSR gibt es ca. 8 Bits, mit denen dein Programm feststellen, 
welcher Reset seit dem letzten Power On "betätigt" wurde. Man kann die 
Bits mit RCC->CSR_RMVF = 1; auch von Hand löschen.

Vorsicht: die Feinheiten sind von Chip zu Chip verschieden, teilweise 
schon abhängig vom Gehäuse oder der Speichergröße.

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.