Как заменить загрузчик на ATMEGA88 - PullRequest
1 голос
/ 07 марта 2011

У меня есть плата с чипом ATMEGA88, которая имеет загрузчик по адресу 0x1800 и прошивку по адресу 0x0000. Оба имеют доступ к USB. Загрузчик может написать новую прошивку, но теперь мне нужно написать новый загрузчик.

Конечно, это не проблема при использовании программатора AVR, но возможно ли это сделать через USB? Моя идея была прошить специальную прошивку через старый загрузчик, который затем может написать новый загрузчик. Это возможно? Если да, то как?

Мои текущие попытки не увенчались успехом. Все команды (boot_page_erase, boot_page_fill и boot_page_write) выполняются успешно так же, как это делает загрузчик (с той лишь разницей, что он начинает запись с индекса 0x1800, а не 0x0000), но когда я перезагружаю устройство, старый загрузчик все еще там, так что на самом деле ничего не было записано на флэш-память.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Память ATmega88 разделена на две секции: «Чтение при записи» (RWW) и «Чтение при записи» (NRWW).Только из секции NRWW можно выполнить команду SPM (если она выполняется из секции RWW, она молча дает сбой).См. Раздел 2.2 (стр. 6) таблицы.Раздел NRWW эквивалентен максимально возможному разделу загрузчика.

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

0 голосов
/ 07 марта 2011

Прошло много времени с тех пор, как я играл с AtMega, но мне было бы логично, если бы загрузчик не поддерживал замену загрузчика (вопрос благоразумия) или касался памяти вокруг этого, то вы бы не смогли geflash загрузчик через загрузчик.

Затем вам придется написать прошивку, которая (очень похоже на загрузчик) перезаписывает флэш-память.

...