Объясните чип STM32L4R5, чтобы повредить информацию о проверке ошибок для определенного флэш -адреса.
При чтении с поврежденного адреса вспышки на устройствах STM32 со Flash ECC вы получаете невозметимое прерывание обнаружения ECC. Обработка этого прерывания может быть важной для некоторых приложений, например, все, что может быть подвергнуто радиации, таким как спутники. Тем не менее, на самом деле тестирование вашего кода обработки на оборудовании сложно, так как вы не можете напрямую сообщить чипу преднамеренно создать неправильную вспышку.
Вот почему этот инструмент предлагает способ сделать именно это: конкретно уничтожить информацию о исправлении ошибок на определенном адресе. Это происходит путем автоматического двоичного прохождения времени, когда сброс мешает процессу написания флэш-памяти.
Отрегулируйте адрес в верхней части файла main.rs , подключите разъем отладки для чипа STM32L4R5, а затем запустите make flash .
Затем вы должны увидеть синий светодиод чипа, мигающий с интервалами, которые становятся короче. Это бинарный поиск, пробуя, сколько нужно ждать, пока произойдет коррупция флэш -коррупции. Свет станет, по -видимому, отключен на несколько секунд (потому что время настолько короткое время становится настолько коротким, что у светодиода едва есть шанс быть включенным), а затем наступит либо зеленый, либо красный светодиод. Зеленый означает, что точный адрес был достигнут, красный означает, что он был пропущен. В случае Green вы можете прошить код, который вы хотите проверить с прерыванием ECC (обязательно не перезаписывайте страницу, которая теперь содержит ошибку - стирание, она приведет к исчезновению ошибки), и в случае появления красного светодиода вам нужно нажать кнопку «Сброс», чтобы попробовать еще раз (иногда, мощный цикл, чтобы повторно повторно, также помогает).
Если появится зеленый светодиод, программа достигла правильного места. Чтобы проверить точный адрес, вы также можете прикрепить через GDB, а затем прочитать содержимое регистра FLASH_ECCR :
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 Коррупция работала, если первая шестнадцатеричная буква составляет 8 или 2 . Последние 20 -битные (или 5 шестнадцатеричных букв) - это адрес памяти, который поврежден. В этом случае 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 для получения дополнительной информации о каждом регистре.