Trik chip STM32L4R5 menjadi merusak informasi pemeriksaan kesalahannya untuk alamat flash tertentu.
Saat membaca dari alamat flash yang rusak pada perangkat STM32 dengan Flash ECC, Anda mendapatkan interupsi deteksi ECC yang tidak masker. Penanganan interupsi ini bisa menjadi penting untuk beberapa aplikasi, misalnya apa pun yang berpotensi terpapar radiasi, seperti satelit. Namun, sebenarnya menguji kode penanganan Anda pada perangkat keras itu sulit, karena Anda tidak dapat secara langsung memberi tahu chip untuk secara sengaja menghasilkan entri flash yang salah.
Itu sebabnya alat ini menawarkan cara untuk melakukan hal itu: secara khusus menghancurkan informasi koreksi kesalahan pada alamat tertentu. Ini melakukan ini dengan mencari-pencarian waktu secara otomatis waktu di mana reset mengganggu proses penulisan flash.
Sesuaikan alamat di bagian atas file main.rs , colokkan konektor debug Anda untuk chip STM32L4R5, dan kemudian jalankan make flash .
Anda kemudian harus melihat LED biru chip berkedip dalam interval yang semakin pendek. Itulah pencarian biner yang mencoba berapa banyak yang perlu menunggu korupsi flash terjadi. Cahaya akan menjadi tidak aktif selama beberapa detik (karena waktunya menjadi sangat singkat sehingga LED hampir tidak memiliki kesempatan untuk menyala), dan setelah itu, baik LED hijau atau merah akan menyala. Hijau berarti bahwa alamat yang tepat dipukul, merah berarti itu terlewatkan. Dalam kasus hijau, Anda sekarang dapat mem -flash kode yang ingin Anda uji terhadap interupsi ECC (pastikan untuk tidak menimpa halaman yang sekarang berisi kesalahan - menghapus itu akan menyebabkan kesalahan yang hilang), dan jika LED merah menyala, Anda perlu menekan tombol reset untuk mencoba lagi (kadang -kadang, siklus daya untuk dikembalikan juga membantu).
Jika LED hijau menyala, program telah mencapai tempat yang benar. Untuk memverifikasi alamat yang tepat, Anda juga dapat melampirkan melalui GDB, dan kemudian membaca konten register FLASH_ECCR :
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 Korupsi berhasil jika surat hex pertama adalah 8 atau 2 . 20 bit terakhir (atau 5 huruf hex) adalah alamat memori yang rusak. Dalam hal ini, 0x6000 diberikan kepada korup, dan itu dipukul dengan tepat.
Dalam satu shell, jalankan
st-utilKemudian pasang menggunakan GDB:
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorGunakan perintah ini untuk menampilkan konten register cadangan:
x /32w 0x40002850 Lihatlah komentar di main.rs untuk info lebih lanjut tentang setiap register.