Inspirez une puce STM32L4R5 pour corrompre ses informations de vérification des erreurs pour une certaine adresse flash.
Lorsque vous lisez une adresse flash corrompue sur les périphériques STM32 avec Flash ECC, vous obtenez une interruption de détection ECC non masquable. La gestion de cette interruption peut être importante pour certaines applications, par exemple, tout ce qui est potentiellement exposé aux rayonnements, tels que les satellites. Cependant, le test de votre code de manutention sur le matériel est difficile, car vous ne pouvez pas dire directement à la puce de produire intentionnellement une mauvaise entrée flash.
C'est pourquoi cet outil offre un moyen de faire exactement cela: détruire spécifiquement les informations de correction d'erreur à une adresse spécifique. Il le fait en fouillant automatiquement un timing où une réinitialisation interfère avec le processus d'écriture flash.
Ajustez l'adresse en haut du fichier main.rs , branchez votre connecteur de débogage pour une puce STM32L4R5, puis exécutez make flash .
Vous devriez alors voir la LED bleue de la puce clignoter par intervalles qui se raccourcissent. Il s'agit de la recherche binaire qui essaie à quel point il doit attendre que la corruption flash se produise. La lumière deviendra apparemment éteinte pendant quelques secondes (parce que le timing devient si court que la LED a à peine une chance d'être allumée), et ensuite, la LED verte ou rouge se déroulera. Le vert signifie que l'adresse exacte a été touchée, le rouge signifie qu'il a été manqué. En cas de vert, vous pouvez désormais flasher le code que vous souhaitez tester contre l'interruption ECC (assurez-vous de ne pas écraser la page qui contient désormais l'erreur - l'effacement, cela entraînera l'erreur disparaître), et au cas où la LED rouge s'allume, vous devez appuyer sur le bouton de réinitialisation pour réessayer (parfois, un cycle d'alimentation pour réessayer aide également).
Si la LED verte s'allume, le programme a atteint le bon endroit. Pour vérifier l'adresse exacte, vous pouvez également joindre via GDB, puis lire le contenu du registre FLASH_ECCR :
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 La corruption a fonctionné si la première lettre hexagonale est 8 ou 2 . Les 20 derniers bit (ou 5 lettres hexadécimales) sont l'adresse mémoire qui a été corrompue. Dans ce cas, 0x6000 a été donné pour corrompre, et il a été touché exactement.
Dans un shell, courez
st-utilPuis attachez en utilisant GDB:
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorUtilisez cette commande pour afficher le contenu du registre de sauvegarde:
x /32w 0x40002850 Jetez un œil aux commentaires dans main.rs pour plus d'informations sur chaque registre.