Буратино 0 10 мая, 2017 Опубликовано 10 мая, 2017 · Жалоба Устройство имеет бутлоадер, который умеет самопрограммировать флеш память (AVRMega64a). Бутлоадер расположен в верхних адресах, основная программа - в начале области памяти программ. Основная программа получает прошивку по некоторому каналу связи и записывает прошивку во внешнюю EEPROM память. Проверяет ее целостность и рестартует процессор watchdog-ом. Управление получает бутлоадер. Он самопрограммирует AVRMega данными из внешней EEPROM. Но к сож. некорректно. Я вычитываю флеш память и вижу несоответствие данных из ЕЕПРОМ и собственно того что у меня в дампе памяти. В то же самое время если рестартовать процессор аппаратно, то все так как и ожидается: самопрограммирование проходит успешно и все данные точно соответствуют информации в ЕЕПРОМ. Фьюзы настроены, биты совместимости установлены. Если бы не этот момент, то все бы вполне себе устраивало Я понимаю, что связано это скорее всего с инициализацией периферии, но пока не могу понять в чем моя ошибка. Еще нужно отметить, что в софтрестарт уходит процессор после работы основной программы и соответственно нужно учитывать и ее этапы по работе с периферией.. Выслушаю любые соображения на данный счет, спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Буратино 0 10 мая, 2017 Опубликовано 10 мая, 2017 · Жалоба Разобрался :rolleyes: Нужно сначала чистить/стирать флеш память, и только потом писать. for (address = 0; address < FWsize; address += PAGESIZE) { _WAIT_FOR_SPM(); _PAGE_ERASE(address); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться