Встроенный: доступ к неписаному содержанию адреса ПЗУ

Я работаю над встроенным устройством, которое использует Aurix TC234. Моему (AUTOSAR) программному обеспечению, которое на нем работает, необходимо выполнить некоторые проверки во время запуска в определенном диапазоне адресов ПЗУ.

Данные, которые должны быть проверены, не записываются во время перепрограммирования моего программного шестнадцатеричного файла. Это означает, что диапазон адресов должен быть записан до того, как мое программное обеспечение будет мигать на этом устройстве.

Мой худший сценарий: кто-то забывает прошить этот диапазон адресов. Мое программное обеспечение мигает, и во время запуска доступ к памяти. В этом случае происходит ловушка.

Мой вопрос: есть ли безопасный способ проверки определенного диапазона адресов ПЗУ, если он был записан или нет? Можно ли справиться с такой ловушкой?

2 ответа

Решение

После нескольких проверок поток TC29X с ошибкой ECC для ROM может быть обработан, как показано ниже:

  • включить сигналы тревоги SMU
  • поймать ошибку ECC в ISR от SMU
  • флаг хранения в области памяти без инициализации
  • Сброс SW должен быть вызван (нет выхода из ловушки для ECC)
  • при следующем запуске проверьте значение флага

Надеюсь, что эта помощь и аналогичное решение будет доступно на вашем микро.

Я не знаком с TC234, но я был бы удивлен, если бы доступ к неписанной флэш-памяти на любом встроенном устройстве вызвал ловушку. Единственная разница между записанной и неписанной флэш-памятью должна заключаться в том, что последняя должна иметь все записанные (при условии, что флэш-память начинает стираться). Вы должны быть в состоянии просто проверить свой блок данных для всех байтов, являющихся 0xFF.

На случай, если у вас может быть флэш-память, которая не была стерта изначально, вы можете добавить поле проверки к вашему блоку данных, возможно, содержащее значение CRC для остальной части блока. При запуске проверьте содержимое блоков по отношению к полю CRC.

Изменить: если вы действительно получаете ловушку, я ожидаю, что это связано с тем, что ваш код использует данные в блоке без предварительной проверки, что приводит к чему-то вроде использования недопустимого индекса в массиве или неверного указателя. Ответ отозван. Смотрите комментарии.

Другие вопросы по тегам