Второй Nano приехал из того же магазина, что и первый, лежал рядом на столе и отличался только наклейкой. Первый заливался без вопросов, а второй выдавал одну и ту же простыню: avrdude: stk500_recv(): programmer is not responding, десять попыток синхронизации, отказ. В терминале это выглядит как stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 и далее по номерам до десятого — среда честно стучится десять раз и сдаётся. Я перепробовал всё, что подсказывал поиск: три разных кабеля, другой USB-порт, переустановленный драйвер, даже перезагрузку компьютера. Плата-то живая — светодиод ON горит, L мигает демо-программой с завода. Но IDE упрямо рапортует об ошибке синхронизации, и на плату не попадает ни один байт прошивки.
Разгадка оказалась не в железе и не в драйвере, а в пункте меню, которого у Uno вообще нет: «Инструменты → Процессор». У Nano там два варианта — ATmega328P и ATmega328P (Old Bootloader), и неправильный выбор выглядит ровно так: вменяемая компиляция, десяток попыток синхронизации, ошибка. В этом уроке я разберу, откуда взялись два загрузчика, почему на китайских Nano старый встречается чаще нового, и как за минуту определить, какой из них у вас.
К концу у вас будет алгоритм на случай «не грузится вообще», таблица симптомов и контрольный скетч-пинг для проверки связи. А пока драйвер доустанавливается — виртуальная плата в симуляторе ниже позволяет прогнать весь ритуал: скетч, загрузка, мигание, монитор порта. Общее правило диагностики: двигаемся от дешёвых проверок к дорогим — меню быстрее переустановок, переустановки быстрее паяльника.
Загрузчик: маленькая программа, без которой IDE бессильна
Загрузчик (bootloader) — крошечная программа, живущая в самом конце флеш-памяти чипа. После сброса она первые мгновения слушает UART: если по проводу идёт прошивка — принимает её и записывает поверх старого скетча; если тишина — передаёт управление вашей программе. Именно поэтому плата умеет обновляться по USB без программатора. И именно поэтому сгоревший или отсутствующий загрузчик превращает плату в кирпич для IDE — чип при этом полностью исправен, просто встречать IDE его некому. Размер у него смешной по меркам скетчей: у новой Uno на него уходит полкилобайта из 32, у Nano со старым загрузчиком — два килобайта. Но эти килобайты — аренда: место можно вернуть, перезаписав чип через программатор, чему посвящён конец раздела.
История двух загрузчиков начинается в 2009 году: Uno сменила старый ATmegaBOOT на оптимизированный Optiboot, который уместился в полкилобайта вместо двух и освободил место для скетчей. Nano этой замены не пережила: её продолжали выпускать и продавать с классическим ATmegaBOOT — в народе Old Bootloader — ещё почти десятилетие. Разница для нас измеряется скоростью: старый загрузчик принимает прошивку на 57600 бод, новый — на 115200, вдвое быстрее. IDE шьёт строго на той скорости, которая записана в выбранном «Процессоре»: промахнулись — плата молчит, потому что честно не понимает, что от неё хотят на чужом темпе.
Где какой встречается. Практическое правило, проверенное на добром десятке плат: клоны Nano, купленные примерно до 2018 года, почти всегда со старым загрузчиком; свежие партии с маркетплейсов — с новым. В IDE 1.8.9, вышедшей весной 2019 года, у Nano появился отдельный пункт «Процессор» — до этого среда угадывала сама, и половина форумов была забита именно нашей ошибкой. Как устроена заливка в целом, я подробно расписывал в уроке про загрузку скетча; здесь же важно одно: у Nano этот шаг длиннее на одно меню.
Диагностика за пять минут: от кабеля до «Процессора»
Порядок обхода я держу такой. Сначала физика: светодиод ON горит, кабель передаёт данные (телефон с ним предлагает «передавать файлы»), в Диспетчере устройств — USB-SERIAL CH340 (COM3) или похожая строка. Если до этого места не дошло, вы в соседней истории: возврат к драйверу CH340 и зарядным кабелям разобран в уроке про невидимый порт. Дальше меню: «Инструменты → Плата → Arduino Nano», затем «Процессор». Первая попытка — ATmega328P, если плата свежая, и ATmega328P (Old Bootloader), если это клон из старой партии или учебного набора. С портом, если в системе несколько COM, помогает трюк с переподключением — мы разбирали его в уроке про выбор платы и порта. И не торопитесь с выводами на первой загрузке: свежая IDE первый раз собирает ядро секунд двадцать, и это нормальное поведение, а не зависание.
Порт выбираем трюком из урока о первом подключении: переподключили кабель — в списке появился новый COM, это ваш. Загружаете контрольный скетч и смотрите. Отличный маркер: на правильном «Процессоре» светодиоды TX/RX коротко мигают и следует «Загрузка завершена». На неправильном — TX/RX молчат или дёргаются один раз, и через десять секунд падает stk500_getsync().
Нашли рабочий вариант — пометьте плату маркером с обратной стороны: «old» или «new». Я на этом сэкономил второй вечер, когда через полгода та же Nano снова легла на стол с новой IDE. Мелочь, а работает лучше любой памятки.
| Симптом | Что это чаще всего | Лечение |
|---|---|---|
| stk500_recv(): programmer is not responding | Не тот «Процессор» или не тот COM-порт | Сменить ATmega328P на Old Bootloader или наоборот; проверить порт |
| not in sync: resp=0x00 | IDE стучится не на той скорости | 57600 бод у старого загрузчика, 115200 у нового — это и есть выбор «Процессора» |
| Порт серый, платы в списке нет | Нет драйвера CH340 или кабель без проводов данных | Установить CH341SER, взять кабель с передачей данных |
| Компиляция идёт, TX/RX не мигают | Выбран не тот порт или порт занят монитором | Закрыть Serial Monitor, пересчитать порты |
| Плата отваливается в середине загрузки | Плохой кабель, USB-хаб, гнездо с люфтом | Втыкать напрямую в порт компьютера и менять кабель |
void setup() { Serial.begin(9600); Serial.println("ping=1");} void loop() { digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500);}Практика в симуляторе: ритуал, которому не нужен порт
Пока настоящий Nano едет с маркетплейса или ставится драйвер, весь ритуал первых минут отрабатывается на виртуальной плате: скетч — «загрузка» — светодиод — монитор. В макетке ниже кнопка на D2 переключает скорость мигания светодиода на D12: зажали — паузы укорачиваются вчетверо, отпустили — обратно. Это тот же скетч, который вы зальёте на настоящий Nano первым, только без риска stk500_getsync(). И не переживайте за пины: кнопка на D2 и светодиод на D12 — схема из трёх проводов, на настоящем Nano она собирается за минуту.
Отдельно про путаницу скоростей, которая рождает вторую половину жалоб на Nano. 57600 и 115200 бод — разговор IDE с загрузчиком при заливке; 9600 бод в скетче — разговор с вами через Serial-монитор. Три разных числа в одной цепочке сбивают с толку сильнее, чем сам Old Bootloader: «кракозябры вместо текста в мониторе» лечатся выставлением той же скорости в углу окна монитора, и к загрузчику это отношения не имеет.
- Светодиод ON горит, в Диспетчере устройств виден CH340 — железо в порядке; если нет, вернитесь к драйверу и кабелю.
- «Инструменты → Плата → Arduino Nano», затем «Процессор»: свежая плата — ATmega328P, клон из старой партии — ATmega328P (Old Bootloader).
- Выберите порт по трюку с переподключением кабеля и закройте Serial Monitor: он держит COM и мешает загрузке.
- Загрузите контрольный пинг: TX/RX коротко мигают — связь есть; тишина и stk500_getsync — смените «Процессор» на второй вариант.
- Кракозябры в мониторе — это скорость монитора, а не загрузчика: выставьте в углу окна ту же, что в Serial.begin.
- Нашли рабочий вариант — пометьте плату маркером с обратной стороны: old или new.
Если оба пункта «Процессора» дали одну и ту же ошибку синхронизации, картина серьёзнее: загрузчика, скорее всего, нет вообще. Так бывает после неудачных экспериментов с чужими прошивками, после заливки «через программатор» на чужом железе и просто у чипов из лотка без истории. Симптом тот же stk500_getsync(), но уже при обоих вариантах меню и на заведомо исправном кабеле.
Лечение одно — записать загрузчик заново через вторую плату по методу Arduino as ISP: Uno со стоковым скетчем-программатором, шесть проводов и пункт «Записать загрузчик». Этому посвящён следующий урок раздела, и после него Nano оживает в девяти случаях из десяти; десятый — обрыв дорожек у разъёма, и это уже работа для паяльника.
- Ошибка stk500_getsync/stk500_recv при живом драйвере почти всегда означает не тот «Процессор»: ATmega328P или ATmega328P (Old Bootloader)
- Старый загрузчик шьётся на 57600 бод, новый Optiboot — на 115200; IDE берёт скорость из выбранного «Процессора»
- Клоны Nano до примерно 2018 года — со старым загрузчиком, свежие партии — с новым; проверка занимает минуту сменой пункта меню
- Кракозябры в мониторе — несовпадение скорости монитора и Serial.begin(), к загрузчику отношения не имеет
- Нашли рабочий «Процессор» — пометьте плату: через полгода не придётся вспоминать заново
- 1. IDE пишет stk500_recv(): programmer is not responding, CH340 в Диспетчере устройств виден. С чего начнёте?
- 2. Чем Old Bootloader отличается от нового Optiboot?
- 3. У вас клон Nano из набора, купленного в 2016 году. Какой «Процессор» попробуете первым?
- 4. В мониторе порта вместо текста кракозябры. Что подкрутить?
- 5. Загрузчик — это...
Частые вопросы по теме урока
- IDE пишет stk500_recv(): programmer is not responding, CH340 в Диспетчере устройств виден. С чего начнёте?
- Живой драйвер плюс ошибка синхронизации — классика несовпадения загрузчика: смените ATmega328P на ATmega328P (Old Bootloader) или наоборот. Сменю пункт «Процессор» на второй вариант
- Чем Old Bootloader отличается от нового Optiboot?
- Старый ATmegaBOOT принимает прошивку на 57600 бод, Optiboot — на 115200; IDE шьёт на скорости выбранного «Процессора»; размеры у них тоже разные — полкилобайта против двух. Скоростью приёма прошивки: 57600 бод против 115200
- У вас клон Nano из набора, купленного в 2016 году. Какой «Процессор» попробуете первым?
- Клоны до примерно 2018 года почти всегда со старым загрузчиком — начните с ATmega328P (Old Bootloader); промах лишь потратит десять секунд на повторную загрузку. ATmega328P (Old Bootloader)
- В мониторе порта вместо текста кракозябры. Что подкрутить?
- Кракозябры — несовпадение скорости монитора и Serial.begin(); к загрузчику и прошивке это отношения не имеет. Скорость в углу Serial-монитора — она должна совпадать с Serial.begin()
- Загрузчик — это...
- После сброса загрузчик слушает UART на своей скорости: поймал прошивку — записал; тишина — запустил ваш скетч. Программа в конце флеш-памяти, которая после сброса принимает прошивку по UART