Ошибка avrdude: stk500_recv(): programmer is not responding при загрузке скетча — самый частый симптом, с которым сталкиваются владельцы Arduino Uno, Nano и Mega: компиляция проходит успешно, но на этапе записи плата не отвечает. В подавляющем большинстве случаев проблема не в неисправности микроконтроллера, а в цепочке «драйвер — порт — кабель — загрузчик», и её можно устранить самостоятельно за несколько минут.
Эта статья построена как диагностический маршрут: от самых простых и безопасных проверок к более глубоким. Начните с первого раздела и двигайтесь дальше, если предыдущий шаг не помог. Рискованные действия вроде перезаписи загрузчика оставлены напоследок и снабжены предупреждениями.
Шаг 1. Проверьте кабель и USB-порт
Начинать диагностику нужно с самого банального — кабеля. Значительная часть USB-кабелей в быту предназначена только для зарядки: в них нет линий передачи данных, и плата через такой кабель получит питание, засветит светодиод, но никогда не определится компьютером. Внешне отличить «зарядный» кабель от полноценного невозможно — только заменой.
Возьмите кабель, через который этот компьютер точно передаёт данные (например, от телефона, с которого вы скидываете фото). Дополнительно выполните следующие проверки:
- 🔌 Подключите плату напрямую к порту компьютера, минуя USB-хабы и удлинители.
- 🖥️ Попробуйте другой USB-порт, желательно на задней панели системного блока.
- 💡 Убедитесь, что светодиод питания на плате горит стабильно, без мерцания.
- 🔄 Проверьте плату на другом компьютере, если он доступен.
Шаг 2. Убедитесь, что плата определяется системой
Откройте Диспетчер устройств Windows (Win + X → Диспетчер устройств) и посмотрите на раздел «Порты (COM и LPT)» в момент подключения платы. Здесь возможны три ситуации, и каждая указывает на свою причину.
Если при подключении появляется новый COM-порт — отлично, переходите к следующему разделу. Если появляется «Неизвестное устройство» или устройство с жёлтым восклицательным знаком — проблема в драйвере USB-UART преобразователя. Если система вообще не реагирует на подключение — подозревайте кабель, разъём платы или аппаратную неисправность.
| Поведение системы | Вероятная причина | Что делать |
|---|---|---|
| Появляется COM-порт | Система видит плату | Проверить настройки IDE |
| «Неизвестное USB-устройство» | Нет драйвера CH340/CP2102 | Установить драйвер |
| Устройство с восклицательным знаком | Драйвер установлен некорректно | Удалить и переустановить |
| Никакой реакции | Кабель, разъём, неисправность платы | Сменить кабель и порт |
| Порт появляется и пропадает | Плохой контакт, просадка питания | Другой кабель/порт, проверка пайки |
Шаг 3. Установите драйвер USB-UART преобразователя
Оригинальные Arduino Uno используют отдельный микроконтроллер ATmega16U2 в качестве USB-моста, а большинство недорогих совместимых плат — микросхемы CH340, CP2102 или FTDI. Для CH340 в Windows часто требуется ручная установка драйвера: без него плата физически исправна, но система не может с ней общаться.
Определить чип можно визуально — это небольшая микросхема рядом с USB-разъёмом, маркировка нанесена на корпус. Драйвер скачивайте только с официального сайта производителя микросхемы. После установки перезагрузите компьютер и проверьте, появился ли COM-порт в Диспетчере устройств.
⚠️ Внимание: не устанавливайте «драйвер-паки» и универсальные установщики с сомнительных сайтов — вместе с драйвером можно получить вредоносное ПО. Ищите драйвер конкретно под ваш чип (CH340, CP210x, FTDI) на сайте его производителя.
Шаг 4. Проверьте настройки Arduino IDE
Даже при исправном железе загрузка не пойдёт, если в среде разработки выбраны неверные параметры. Проверьте три вещи: в меню Инструменты → Плата должна быть выбрана именно ваша модель, в Инструменты → Порт — тот COM-порт, который появляется при подключении, а для Arduino Nano дополнительно проверьте пункт Инструменты → Процессор.
Именно с Nano связан частый нюанс: платы выпускаются с двумя вариантами загрузчика, и в IDE для них есть отдельные пункты — ATmega328P и ATmega328P (Old Bootloader). Если скетч не загружается с ошибкой stk500_getsync() или not in sync, переключитесь на вариант Old Bootloader — это одна из самых массовых причин «непрошиваемости» Nano.
☑️ Проверка перед загрузкой скетча
Ещё один тонкий момент: порт может быть занят другой программой. Открытый монитор порта в другом окне IDE, терминальные программы, некоторые среды программирования — всё это блокирует доступ к COM-порту, и загрузка обрывается. Закройте всё лишнее и повторите попытку.
Шаг 5. Используйте ручной сброс и проверьте загрузчик
Загрузчик (bootloader) — небольшая программа в памяти микроконтроллера, которая принимает скетч по UART в первые мгновения после сброса. Если автоматический сброс по линии DTR не срабатывает (бывает на некоторых клонах и при проблемах с конденсатором цепи сброса), помогает ручной приём: зажмите кнопку RESET на плате, нажмите «Загрузить» в IDE и отпустите кнопку в момент, когда компиляция закончилась и началась запись. Момент подбирается опытным путём — обычно сразу после появления строки о размере скетча.
Признаком живого загрузчика на многих платах служит характерное мигание светодиода на пине 13 сразу после подачи питания или сброса. Если светодиод не мигает никогда, а все предыдущие шаги пройдены — возможно, загрузчик стёрт или повреждён. Восстановить его можно через программатор по интерфейсу ICSP (в том числе используя вторую исправную Arduino со скетчем ArduinoISP), но это уже операция для опытных пользователей.
⚠️ Внимание: перезапись загрузчика через ICSP — необратимая в случае ошибки операция: неверно выставленные fuse-биты могут перевести микроконтроллер в состояние, из которого его выведет только высоковольтный программатор. Приступайте к ней, только убедившись, что все программные причины исключены, и строго следуйте документации на вашу плату.
Как понять, что загрузчик повреждён
Плата определяется как COM-порт, драйверы в порядке, настройки IDE верны, но любая загрузка завершается ошибкой sync. Светодиод на пине 13 не мигает после сброса. При этом чип USB-UART исправен — система видит плату. Это косвенные признаки; окончательно подтвердить можно только попыткой записи через ICSP-программатор.
Шаг 6. Аппаратные неисправности и конфликт пинов
Если плата раньше прошивалась, а потом перестала, вспомните, что менялось. Частый сценарий — к пинам 0 (RX) и 1 (TX) подключён модуль (Bluetooth, GPS, дисплей): эти линии задействованы при загрузке, и внешнее устройство мешает обмену данными. Отключите всё от пинов 0 и 1 и повторите загрузку.
Также проверьте плату на предмет физических повреждений: запах гари, потемневшие элементы, следы перегрева стабилизатора, окислы на разъёмах. Короткое замыкание в подключённой схеме могло вывести из строя стабилизатор питания или сам микроконтроллер. Если плата сильно греется сразу после подключения USB без всякой нагрузки — это тревожный признак, дальнейшие эксперименты лучше прекратить.
Частые ошибки avrdude и их расшифровка
Текст ошибки в консоли IDE — ценная подсказка. Вот как читать самые распространённые сообщения:
- ❌
stk500_recv() / not in sync— плата не отвечает: неверный порт, тип платы, загрузчик (Nano Old Bootloader) или заняты пины RX/TX. - ❌
access denied / отказано в доступе— COM-порт занят другой программой. - ❌
the selected serial port does not exist— порт пропал: проверьте кабель и драйвер. - ❌ Ошибки компиляции (
error: ... was not declared) — это не проблема прошивки, а ошибка в коде скетча или отсутствующая библиотека.
Различайте принципиально разные ситуации: ошибка компиляции и ошибка загрузки — разные проблемы. Первая означает, что код не собрался и до платы дело вообще не дошло; вторая — что скетч готов, но не записывается в память. Путать их — значит искать причину не там.
Часто задаваемые вопросы
Arduino Nano определяется, но скетч не загружается. Что делать?
В меню Инструменты → Процессор переключитесь с ATmega328P на ATmega328P (Old Bootloader) или наоборот. Платы Nano выпускаются с двумя версиями загрузчика, и несовпадение выбранного варианта — самая частая причина именно этой ситуации.
Плата работала, а после загрузки своего скетча перестала прошиваться. Почему?
Возможные причины: ваш скетч активно использует Serial и «забивает» линию, либо к пинам 0/1 подключена периферия. Попробуйте приём с ручным сбросом: зажмите RESET, запустите загрузку, отпустите кнопку в начале записи. Также убедитесь, что скетч не выводит платы из строя аппаратно — например, не замыкает пины питания.
Можно ли прошить Arduino без USB, если разъём повреждён?
Да, через интерфейс ICSP с помощью внешнего программатора (например, USBasp) или другой платы Arduino со скетчем ArduinoISP. Учтите, что запись через ICSP по умолчанию стирает загрузчик, и вернуть возможность прошивки по USB придётся отдельной операцией «Записать загрузчик».
Windows пишет «Устройство USB не опознано». Плата сгорела?
Не обязательно. Чаще причина в отсутствующем драйвере CH340/CP2102, неисправном кабеле или повреждении разъёма. Установите драйвер под ваш чип, смените кабель и порт. Если и после этого система не видит устройство ни на одном компьютере — вероятна аппаратная неисправность USB-моста или платы.
Чем отличается ошибка компиляции от ошибки загрузки?
Ошибка компиляции возникает до обращения к плате — в коде есть синтаксические проблемы или не хватает библиотек. Ошибка загрузки означает, что скетч собран, но не записывается в память: проблема в порте, драйвере, загрузчике или железе. Лечатся они совершенно по-разному.