Trick einen STM32L4R5 -Chip dazu, seine Fehlerprüfung für eine bestimmte Flash -Adresse zu überprüfen.
Beim Lesen einer beschädigten Flash-Adresse auf STM32-Geräten mit Flash ECC erhalten Sie einen nicht maskierbaren ECC-Erkennungs-Interrupt. Die Behandlung dieses Interrupts kann für einige Anwendungen wichtig sein, z. B. alles, was möglicherweise Strahlung ausgesetzt ist, wie z. B. Satelliten. Das Testen Ihres Handhabungscodes auf der Hardware ist jedoch schwierig, da Sie den Chip nicht direkt angeben können, absichtlich einen falschen Flash -Eintrag zu erstellen.
Aus diesem Grund bietet dieses Tool eine Möglichkeit, genau das zu tun: speziell die Fehlerkorrekturinformationen an einer bestimmten Adresse zu zerstören. Dies geschieht durch automatisch binäre Suche nach einem Timing, bei dem ein Reset den Blitzschreibprozess beeinträchtigt.
Passen Sie die Adresse oben in der main.rs -Datei an, stecken Sie Ihren Debug -Anschluss für einen STM32L4R5 -Chip an und rennen Sie dann make flash .
Sie sollten dann die blaue LED des Chips in Intervallen blinken sehen, die kürzer werden. Das ist die binäre Suche, die ausprobiert, wie viel es muss, bis die Flash -Korruption stattfindet. Das Licht wird einige Sekunden lang scheinbar ausgeschaltet werden (weil das Timing so kurz wird, dass die LED kaum die Chance hat), und danach wird entweder die grüne oder rote LED auftreten. Grün bedeutet, dass die genaue Adresse getroffen wurde, rot bedeutet, dass sie übersehen wurde. Bei Grün können Sie jetzt den Code, den Sie anhand des ECC -Interrupts testen möchten, flashen (stellen Sie sicher, dass Sie die Seite, die jetzt den Fehler enthält, nicht überschreiben. Wenn Sie ihn löschen, wird der Fehler verschwunden), und für den Fall, dass die rote LED eingeht, müssen Sie die RESET -Taste erneut drücken, um es erneut zu versuchen (manchmal auch ein Stromzyklus, um erneut zu hilft).
Wenn die grüne LED eingeschaltet wird, hat das Programm den richtigen Ort erreicht. Um die genaue Adresse zu überprüfen, können Sie auch über GDB anhängen und dann den Inhalt des Registers FLASH_ECCR lesen:
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 Korruption funktionierte, wenn der erste Hex -Brief 8 oder 2 ist. Die letzten 20 -Bit (oder 5 Hex -Buchstaben) sind die Speicheradresse, die beschädigt wurde. In diesem Fall wurde 0x6000 korrupten und genau getroffen.
In einer Schale rennen
st-utilDann mit GDB anbringen:
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorVerwenden Sie diesen Befehl, um Backup -Registerinhalte anzuzeigen:
x /32w 0x40002850 Schauen Sie sich die Kommentare in main.rs an, um weitere Informationen zu jedem Register zu erhalten.