STM32L4R5 칩을 특정 플래시 주소에 대한 오류 확인 정보를 손상시켜 트릭하십시오.
Flash ECC가있는 STM32 장치의 손상된 플래시 주소에서 읽을 때는 미스킹 불가능한 ECC 감지 인터럽트가 나타납니다. 이 인터럽트를 처리하는 것은 일부 응용 분야에서 중요 할 수 있습니다. 그러나 실제로 하드웨어에서 핸들링 코드를 테스트하는 것은 어렵습니다. 칩에 의도적으로 잘못된 플래시 항목을 생성하도록 직접 알릴 수 없기 때문입니다.
그렇기 때문에이 도구는 정확히 수행 할 수있는 방법을 제공합니다. 구체적으로 특정 주소에서 오류 수정 정보를 파괴하십시오. 재설정이 플래시 쓰기 프로세스를 방해하는 타이밍을 자동으로 바이너리 검색하여이를 수행합니다.
main.rs 파일 상단의 주소를 조정하고 STM32L4R5 칩의 디버그 커넥터를 연결 한 다음 make flash 실행하십시오.
그런 다음 칩의 파란색 LED가 더 짧아지는 간격으로 깜박 거리는 것을 볼 수 있습니다. 이것이 바로 플래시 손상이 발생할 때까지 얼마나 기다려야하는지 시도하는 이진 검색입니다. 조명은 몇 초 동안 겉보기에 벗어날 것입니다 (타이밍이 너무 짧아서 LED가 거의 켜질 기회가 없기 때문에), 그 후 녹색 또는 빨간색 LED가 켜집니다. 녹색은 정확한 주소가 맞았고 빨간색은 놓친 것을 의미합니다. 녹색의 경우 이제 ECC 인터럽트에 대해 테스트하려는 코드를 플래시 할 수 있습니다 (이제 오류가 포함 된 페이지를 덮어 쓰지 않아야합니다. 지우는 오류가 사라질 것입니다). 빨간색 LED가 켜지는 경우 재설정 버튼을 눌러 다시 시도해야합니다.
녹색 LED가 켜지면 프로그램이 올바른 지점에 닿았습니다. 정확한 주소를 확인하려면 GDB를 통해 첨부 한 다음 FLASH_ECCR 레지스터의 내용을 읽을 수도 있습니다.
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 첫 번째 16 진 문자가 8 또는 2 인 경우 부패가 효과가있었습니다. 마지막 20 비트 (또는 5 개의 16 진 문자)는 손상된 메모리 주소입니다. 이 경우 0x6000 부패하게되었고 정확히 맞았습니다.
한 껍질에서 달리기
st-util그런 다음 GDB를 사용하여 첨부하십시오.
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptor이 명령을 사용하여 백업 레지스터 컨텐츠를 표시합니다.
x /32w 0x40002850 각 레지스터에 대한 자세한 내용은 main.rs 의 의견을 살펴보십시오.