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