Можно ли обновить загрузчик 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.
Но может ли загрузчик обновляться сам (через Инструменты > Записать загрузчик) или доступен промежуточный «скетч обновления загрузчика»?
@handle, 👍1
1 ответ
Лучший ответ:
На ATmega328p и аналогичных микроконтроллерах ATmega с поддержкой загрузчика приложению не разрешено выполнять запись во флэш-память. Только код, работающий в области загрузчика флэш-памяти, может записываться во флэш-память. Область загрузчика находится в конце прошивки, а начало установлено фьюзами BOOTSZ.
Запись на страницу флэш-памяти выполняется в два этапа. Первый шаг — удаление содержимого страницы флэш-памяти, второй шаг — запись новых данных на страницу флэш-памяти. В области загрузчика* разрешено сначала подготовить данные для страницы временного буфера, затем удалить флэш-память и записать данные за один шаг. Таким образом, теоретически загрузчик может перезаписать себя функцией, запущенной на последней странице флэш-памяти. Но я не знаю о загрузчике, который бы это сделал.
Для написания загрузчика необходим программатор ISP. Или другой Arduino со скетчем «Arduino as ISP».
*примечание: область чтения во время записи в конце флэш-памяти имеет размер максимально возможной области загрузчика и не определяется BOOTSZ.
- Не могу загрузить скетч после перегрева
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
- Arduino Nano не отвечает, желтый светодиод быстро мигает
- Не могу загрузить скетч в Arduino Nano
- ESP32-CAM первый: 0x8 TG1WDT_SYS_RESET загрузочный цикл
Я думаю, вы МОЖЕТЕ писать в загрузчик из Sketch, если вы можете убедиться, что метод записи находится в разделе No-Read-While-Write флэш-памяти приложения. Это намного проще, если вы не используете Arduino IDE. (Также это невозможно, если загрузчик занимает весь раздел NRWW, что не относится к OptiBoot, используемому Arduino.), @Kwasmich
@Kwasmich, граница выполнения SPM - предохранитель BOOTSZ, @Juraj