Engregre un chip STM32L4R5 para que corrompa su información de verificación de errores para una determinada dirección flash.
Al leer una dirección flash dañada en los dispositivos STM32 con Flash ECC, obtiene una interrupción de detección ECC de no más tareas. El manejo de esta interrupción puede ser importante para algunas aplicaciones, por ejemplo, cualquier cosa potencialmente expuesta a la radiación, como los satélites. Sin embargo, en realidad probar su código de manejo en el hardware es difícil, ya que no puede decirle directamente al chip que produzca intencionalmente una entrada flash incorrecta.
Es por eso que esta herramienta ofrece una forma de hacer exactamente eso: destruir específicamente la información de corrección de errores en una dirección específica. Lo hace al buscar automáticamente un momento en que un restablecimiento interfiere con el proceso de escritura Flash.
Ajuste la dirección en la parte superior del archivo main.rs , conecte su conector de depuración para un chip STM32L4R5 y luego ejecute make flash .
Luego debería ver el LED azul del chip parpadeando en intervalos que se acortan. Esa es la búsqueda binaria que prueba cuánto debe esperar a que ocurra la corrupción flash. La luz aparentemente se apagará durante algunos segundos (porque el tiempo se acorta tanto que el LED apenas tiene la oportunidad de estar encendido), y luego, el LED verde o el rojo vendrá. Green significa que la dirección exacta fue golpeada, Red significa que se perdió. En el caso de Green, ahora puede flashear el código que desea probar contra la interrupción del ECC (asegúrese de no sobrescribir la página que ahora contiene el error: borrarlo conducirá a que el error desaparezca), y en caso de que se encienda el LED rojo, debe presionar el botón de reinicio para intentarlo nuevamente (a veces, un ciclo de potencia para volver a rey también ayuda).
Si se enciende el LED verde, el programa ha alcanzado el lugar correcto. Para verificar la dirección exacta, también puede adjuntar a través de GDB y luego leer el contenido del registro FLASH_ECCR :
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 La corrupción funcionó si la primera letra hexadecimal es 8 o 2 . Los últimos 20 bits (o 5 letras hexadecimales) son la dirección de memoria que se corrompió. En este caso, se dio 0x6000 a corrupto, y fue golpeado exactamente.
En un caparazón, corre
st-utilLuego adjunte usando GDB:
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorUse este comando para mostrar contenido de registro de copia de seguridad:
x /32w 0x40002850 Eche un vistazo a los comentarios en main.rs para obtener más información sobre cada registro.