Forum: Mikrocontroller und Digitale Elektronik STM32 bootloader - write protection


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von har (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.