Перейти к содержанию

Почему Arduino Nano не прошивается и когда выбирать «Old Bootloader»?

Обновлено Редакция GAW

Скетч на Arduino Nano загружается не программатором, а загрузчиком внутри ATmega328P: после сброса он несколько мгновений слушает UART и, если пришла прошивка, записывает её. Скорость, на которой он слушает, у старого и нового загрузчиков разная, а среда разработки шлёт данные на той, что записана в описании платы.

Два варианта в boards.txt

Пункт меню ProcessorСкорость загрузкиЗагрузчик
ATmega328P115200 бит/сOptiboot (optiboot_atmega328.hex)
ATmega328P (Old Bootloader)57600 бит/сстарый (ATmegaBOOT_168_atmega328.hex)
ATmega16819200 бит/сдля плат на ATmega168

Если скорости не совпадают, avrdude отправляет запрос синхронизации, не получает внятного ответа и после нескольких попыток сообщает, что плата не отвечает. Сам порт при этом виден, светодиод на плате мигает при сбросе — всё выглядит исправным.

Наш расчёт: у обоих пунктов допустимый размер скетча одинаков — 30720 байт, то есть 32 768 − 30 720 = 2048 байт оставлены под загрузчик; это совпадает с 2 КБ в описании Nano от Arduino.

Что делать

  1. Выберите Tools → Processor → ATmega328P (Old Bootloader) и загрузите снова.
  2. Не помогло — переключитесь обратно и проверьте порт и драйвер: разбор в ответе «Компьютер не видит Arduino Nano на CH340».
  3. Чтобы плата работала с обычным пунктом, запишите новый загрузчик — как это сделать, разобрано в ответе «Как записать загрузчик в ATmega328P».

Сообщения avrdude и их причины описаны в статье «avrdude», а что такое загрузчик, — в словаре.

Похожие вопросы

Как понять, какой загрузчик стоит, не открывая плату?

Проще всего попробовать оба пункта меню: тот, с которым загрузка проходит, и есть ваш. Если не проходит ни один, дело не в загрузчике — проверьте порт, драйвер USB–UART и кабель с линиями данных.

Стоит ли обновлять загрузчик?

Если плата одна и работает с пунктом Old Bootloader — необязательно. Обновление через программатор ISP записывает Optiboot, и потом подходит обычный пункт ATmega328P, как для всех новых плат. Нужен программатор или второй Arduino в роли ISP.

Почему пункт ATmega168 тоже есть в меню Nano?

Первые Nano выпускались на ATmega168. Для него в boards.txt своя скорость загрузки — 19200 бит/с — и свой файл загрузчика, поэтому с платой на ATmega328P этот пункт не сработает.

Источники

  1. Arduino. ArduinoCore-avr, файл boards.txt (ветка master) — nano.menu.cpu.atmega328 «ATmega328P»: upload.speed=115200, загрузчик optiboot/optiboot_atmega328.hex; nano.menu.cpu.atmega328old «ATmega328P (Old Bootloader)»: upload.speed=57600, загрузчик atmega/ATmegaBOOT_168_atmega328.hex; оба — upload.maximum_size=30720, fuse high 0xDA, low 0xFF, extended 0xFD; ATmega168 — 19200 бит/с
  2. Arduino. Arduino Nano Product Reference Manual (SKU A000005, modified 30/10/2026) — ATmega328 на 16 МГц, 32 КБ флеш-памяти, из них 2 КБ занимает загрузчик; питание через USB или вывод VIN 7–15 В
  3. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P datasheet, DS40002061B — разд. 27, табл. 27-13: размер загрузочной области задают фьюзы BOOTSZ

Нашли ошибку?