Traga um chip STM32L4R5 para corromper suas informações de verificação de erros para um determinado endereço flash.
Ao ler a partir de um endereço flash corrompido nos dispositivos STM32 com o Flash ECC, você obtém uma interrupção de detecção de ECC não máscara. O manuseio dessa interrupção pode ser importante para algumas aplicações, por exemplo, qualquer coisa potencialmente exposta à radiação, como satélites. No entanto, é difícil testar seu código de manuseio no hardware, pois você não pode dizer diretamente ao chip para produzir intencionalmente uma entrada flash errada.
É por isso que essa ferramenta oferece uma maneira de fazer exatamente isso: destruir especificamente as informações de correção de erros em um endereço específico. Faz isso, pesquisando automaticamente um momento em que uma redefinição interfere no processo de escrita flash.
Ajuste o endereço na parte superior do arquivo main.rs , conecte seu conector de depuração para um chip STM32L4R5 e, em seguida, execute make flash .
Você deve ver o LED azul do chip piscando em intervalos que ficam mais curtos. Essa é a pesquisa binária tentando quanto precisa esperar a corrupção flash acontecer. A luz ficará aparentemente desanimada por alguns segundos (porque o tempo fica tão curto que o LED mal tem a chance de estar ligado) e depois o LED verde ou vermelho acontecerá. Verde significa que o endereço exato foi atingido, o vermelho significa que foi perdido. No caso do Green, agora você pode piscar o código que deseja testar contra a interrupção do ECC (certifique -se de não substituir a página que agora contém o erro - apagando -o, levará ao erro do erro) e, caso o LED vermelho seja, você precisará pressionar o botão Redefinir para tentar novamente (às vezes, um ciclo de potência também ajuda).
Se o LED verde ocorrer, o programa atingiu o local correto. Para verificar o endereço exato, você também pode anexar via GDB e, em seguida, leia o conteúdo do registro FLASH_ECCR :
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 A corrupção funcionou se a primeira carta hexadecimal for 8 ou 2 . As últimas 20 bits (ou 5 letras hexadecipais) são o endereço de memória que foi corrompido. Nesse caso, 0x6000 foi dado para corromper e foi atingido exatamente.
Em uma concha, corra
st-utilEm seguida, anexe usando o GDB:
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorUse este comando para mostrar conteúdo de registro de backup:
x /32w 0x40002850 Dê uma olhada nos comentários no main.rs para obter mais informações sobre cada registro.