Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR/IAR/Самопрограммирование и "SoftReset"
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Буратино
Устройство имеет бутлоадер, который умеет самопрограммировать флеш память (AVRMega64a).
Бутлоадер расположен в верхних адресах, основная программа - в начале области памяти программ.

Основная программа получает прошивку по некоторому каналу связи и записывает прошивку во внешнюю EEPROM память. Проверяет ее целостность и рестартует процессор watchdog-ом. Управление получает бутлоадер. Он самопрограммирует AVRMega данными из внешней EEPROM. Но к сож. некорректно. Я вычитываю флеш память и вижу несоответствие данных из ЕЕПРОМ и собственно того что у меня в дампе памяти.
В то же самое время если рестартовать процессор аппаратно, то все так как и ожидается: самопрограммирование проходит успешно и все данные точно соответствуют информации в ЕЕПРОМ. Фьюзы настроены, биты совместимости установлены. Если бы не этот момент, то все бы вполне себе устраивало

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

Выслушаю любые соображения на данный счет, спасибо!
Буратино
Разобрался rolleyes.gif
Нужно сначала чистить/стирать флеш память, и только потом писать.
Код
  
for (address = 0; address < FWsize; address += PAGESIZE) {
     _WAIT_FOR_SPM();        
     _PAGE_ERASE(address);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.