Можно ли обновить загрузчик Arduino (Nano) через себя и Arduino IDE или требуется ISP?

Я столкнулся со следующей ошибкой в последней версии Arduino IDE (1.8.9) при попытке загрузки в клон «Arduino Nano» (ATmega328P):

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x18
...
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x18
Problem uploading to board.  See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

Проблему можно решить, выбрав "ATmega328P (Старый загрузчик)" в качестве Процессор в меню Инструмент - как мне было предложено и решено в При загрузке Arduino Nano возникает ошибка: avrdude: stk500_recv(): программатор не отвечает.

Изменение было внесено в августе 2018 г. в выпуске Arduino IDE 1.8.6: https:// github.com/arduino/Arduino/releases/tag/1.8.6

Подробнее о различных загрузчиках см. Разница в загрузчике Arduino Nano ATmega328P.

Похоже, что для полноценного использования нового меньшего загрузчика необходимо заменить предохранители, поэтому в любом случае придется использовать ISP.

Но может ли загрузчик обновляться сам (через Инструменты > Записать загрузчик) или доступен промежуточный «скетч обновления загрузчика»?

, 👍1


1 ответ


Лучший ответ:

2

На ATmega328p и аналогичных микроконтроллерах ATmega с поддержкой загрузчика приложению не разрешено выполнять запись во флэш-память. Только код, работающий в области загрузчика флэш-памяти, может записываться во флэш-память. Область загрузчика находится в конце прошивки, а начало установлено фьюзами BOOTSZ.

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

Для написания загрузчика необходим программатор ISP. Или другой Arduino со скетчем «Arduino as ISP».

*примечание: область чтения во время записи в конце флэш-памяти имеет размер максимально возможной области загрузчика и не определяется BOOTSZ.

,

Я думаю, вы МОЖЕТЕ писать в загрузчик из Sketch, если вы можете убедиться, что метод записи находится в разделе No-Read-While-Write флэш-памяти приложения. Это намного проще, если вы не используете Arduino IDE. (Также это невозможно, если загрузчик занимает весь раздел NRWW, что не относится к OptiBoot, используемому Arduino.), @Kwasmich

@Kwasmich, граница выполнения SPM - предохранитель BOOTSZ, @Juraj