Hallo! Ich habe einen STM32F407 Controller und möchte gern den Ausleseschutz aktivieren (Level 1). Das funktioniert auch wunderbar wie im Reference Manual beschrieben. Mein Problem ist nun, dass mein Bootloader den Flash nicht löschen und neu beschreiben kann. Ich bekomme das Bit WRPRTERR gesetzt, also Write Protection. Laut Reference Manual sollte das Schreiben in den Flash möglich sein, wenn JTAG / SWD nicht aktiv sind (habe den JLINK abgesteckt) und das Programm vom Flash startet und nicht vom RAM. Beides ist der Fall. Hat jemand eine Idee was ich tun kann?
Ein mal hatte ich den Chip mit Level 2 geschützt, dann durfte ich den runter löten und ersetzen. Hingegen mit Level 1 kann ich mittels eigenem Bootloader den Chip beschreiben. Mit dem Bootloader aus der Firmware geht das, glaube ich, nicht mehr, da man mit dem den Flash auslesen könnte.
Ich nutze einen selbst geschriebenen Bootloader. Da dieser aus dem Flash startet, gehe ich davon aus dass ich damit den Flash auch bearbeiten kann. Irgendwie funktioniert das aber nicht.
Ich habe keine "LockBlock" Bits genutzt. Um ein Block zu beschreiben muss der erst mal gelöscht werden. Immer schön das Busy-Bit Abfragen dann schreibe ich immer 16-Bit weise rein. Wenn auf den nächsten Block geschrieben werden soll, dann lösche ich den erst. Anhand dem PC Register erkenne ich den Überschreibschutz vom Bootloader (in welchem Block sich das aktuelle Programm momentan befindet). Im Flash Programing Manual ist alles beschrieben, auch die genauen Abläufe wie das geht. Wenn das nicht tut, dann man in Errata von dem einen Chip schauen, nicht dass da doch noch was in dem Chip ist. Ich habe schon Bootloader für einen F103 und F407 geschrieben.
Naja ohne Ausleseschutz funktioniert der Bootloader ganz wunderbar. Nur wenn der aktiv ist, dann ist seltsamerweise auch die write protection aktiv, und ich kann nicht nachvollziehen warum. Im Errata habe ich nichts passendes gefunden. Und das Flash programming manual kenne ich, allerdings nur für den F1. Für den F4 habe ich sowas nicht gefunden.
Vielen Dank! Hatte eigentlich alles korrekt umgesetzt. Habe nun rausgefunden woran es lag. Habe beim löschen der Readprotectionbits FLASH->OPTCR &= !(FLASH_OPTCR_RDP); statt FLASH->OPTCR &= ~(FLASH_OPTCR_RDP); verwendet.. damit war das ganze Register genullt und damit auch die Write Protection Bits
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.