Arduino: avrdude stk500_recv и not in sync — как исправить
Порядок проверки Arduino Uno и классического Nano, если скетч собрался, но не загружается: выбираем плату, порт и Processor, тестируем Blink и разбираем ограничения CH340.
Скетч скомпилировался, но Arduino IDE повторяет avrdude: stk500_recv(): programmer is not responding и stk500_getsync(): not in sync. На этапе загрузки программа не получила ожидаемого ответа. Переписывать скетч обычно рано: сначала проверяют выбранную плату, порт, процессор классического Nano и соединение с загрузчиком.
Этот порядок рассчитан прежде всего на классические Arduino Uno, Nano и Mega с AVR. Uno R4, Nano Every, Nano ESP32 и другие платы используют другую аппаратную платформу и могут иметь иной механизм загрузки. Похожее название платы не означает совместимость её настроек в IDE.
Что означает stk500_recv и not in sync
Arduino IDE сначала компилирует программу для выбранной платы, затем запускает инструмент записи прошивки. В рассматриваемом случае это avrdude. Название stk500 относится к протоколу обмена; оно само по себе не требует покупки отдельного программатора.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
Последняя строка exit status 1 только сообщает о неуспехе операции. Причину ищите выше. Значение resp=0x00 не является диагнозом «сгорел микроконтроллер»: тот же результат может появиться при неверной плате, неподходящем загрузчике, помехах на UART и других сбоях обмена.
| Сообщение | Направление проверки |
|---|---|
| stk500_recv / stk500_getsync | Плата, процессор Nano, порт, сброс, UART и загрузчик |
| ser_open: access is denied / resource busy | Программа, занявшая порт, и права доступа |
| can't set com-state | Настройка COM-порта Windows и совместимость драйвера |
| No such file or directory | Выбранный порт исчез или изменился |
| Ошибка компиляции | Исходник, библиотека и пакет платформы до загрузки |
Для can't set com-state есть отдельная инструкция по COM-порту и драйверу CH340. Не переносите её действия на любое сообщение avrdude: ошибка выбора загрузчика и ошибка настройки драйвера возникают на разных этапах.
Шаг 1. Оставьте плату и USB-кабель
Отключите питание, снимите подключённые модули и shield, затем подключите одну плату к компьютеру. Особенно важны выводы D0/RX и D1/TX: внешнее устройство на этих линиях может мешать обмену при загрузке. Верните модули после успешного теста.
Возьмите USB-кабель с передачей данных, подключите плату напрямую, без сомнительного удлинителя или концентратора. Свечение индикатора питания подтверждает питание, но не исправность сигнальных проводов USB. При возможности повторите проверку с другим заведомо рабочим кабелем.
Минимальный стенд разделяет причины. Если Blink загружается на пустой плате, а после подключения модулей появляется ошибка, искать нужно в подключениях, питании или занятых линиях. Новая установка IDE в этом случае вряд ли поможет.
Шаг 2. Выберите реальный порт и точную модель
Посмотрите список портов в IDE, отключите плату, запомните исчезнувший порт и подключите её снова. Выберите появившийся порт. В Windows это обычно COM-имя, в Linux или macOS — путь устройства. Не копируйте COM-номер с чужого скриншота: он зависит от вашего компьютера и подключения.
Выберите точную модель в меню платы. Для классического Uno нужен соответствующий Uno из пакета Arduino AVR Boards. Для классического Nano выберите Arduino Nano, а не Nano Every. Для Mega проверьте модель и процессор своей платы. Автоматическое определение неизвестного USB-UART не всегда способно выбрать правильную плату за вас.
Если порт вообще не появляется, диагностика stk500 пока вторична. Сначала проверьте кабель и обнаружение устройства операционной системой. Если IDE показывает порт Bluetooth или другого оборудования, его выбор не создаст соединение с Arduino.
Шаг 3. Для классического Nano проверьте Processor
В меню Tools → Processor для классического Nano есть несколько вариантов. Оригинальные Nano, продаваемые с 2018 года, получили обновлённый загрузчик. У более старых плат и части совместимых плат применяется другой вариант; некоторые платы используют ATmega168 вместо ATmega328P.
- Выберите Arduino Nano из Arduino AVR Boards.
- Для платы с ATmega328P попробуйте
ATmega328Pи загрузите Blink. - Если связи нет, выберите
ATmega328P (Old Bootloader)и повторите загрузку. - Вариант
ATmega168применяйте, когда он соответствует микроконтроллеру платы.
Переключение Processor меняет параметры, которыми IDE пытается связаться с установленным загрузчиком. Оно не перепрошивает загрузчик само по себе. Надпись CH340 описывает USB-UART, а не версию загрузчика ATmega328P: наличие этого чипа не позволяет выбрать Processor по одному признаку.
Когда рабочий вариант найден, зафиксируйте его вместе с моделью платы. На следующем запуске IDE проверьте настройки перед загрузкой. Это особенно полезно, если вы чередуете несколько Nano и Uno на одном компьютере.
Шаг 4. Загрузите стандартный Blink
Откройте встроенный пример File → Examples → 01.Basics → Blink. Этот тест убирает зависимость от библиотек вашего проекта и показывает, может ли IDE загрузить простую программу при выбранных параметрах. Не добавляйте код датчиков до завершения проверки.
Закройте другие экземпляры IDE, внешние терминалы и программы мониторинга COM-порта. При занятости порта часто появляется отдельное сообщение ser_open, но проверка всё равно полезна. Нажмите обычную кнопку Upload. Команда Upload Using Programmer предназначена для другого способа записи и не является исправлением обычной загрузки через USB.
Если Blink загрузился, верните свой скетч без подключённых модулей. Если загружается и он, подключайте периферию по одному устройству. Сохраните состояние, при котором ошибка возвращается: оно даст конкретную точку для проверки схемы.
Шаг 5. Посмотрите подробный журнал загрузки
В настройках IDE включите подробный вывод для загрузки. Название пункта зависит от языка интерфейса. Повторите одну попытку и сохраните журнал целиком: выбранный порт, параметры запуска avrdude и первую ошибку. Сравнивать только последнюю строку двух разных ошибок бесполезно.
Для диагностики запишите модель платы, маркировку микроконтроллера и USB-UART, версию IDE и пакета Arduino AVR Boards, ОС, выбранный Processor, порт и результат Blink. Пути к домашней папке и другие личные данные перед публичной отправкой журнала можно убрать.
Если stk500 сменился на ser_open, это изменение этапа сбоя. Вернитесь к доступности порта, а не продолжайте выбирать загрузчик. Если Blink проходит только с определённым кабелем, зафиксируйте результат проверки USB-соединения.
Сброс, loopback и загрузчик: когда они нужны
Попробуйте штатный RESET на своей плате и повторите загрузку. Автоматический сброс обычно должен переводить классическую AVR-плату в загрузчик перед записью. Если ручной сброс меняет поведение, запишите наблюдение: оно полезно для проверки цепи сброса, но не доказывает её неисправность.
Arduino предлагает loopback-тест для ряда классических Uno, Mega и Nano. Он проверяет часть пути через последовательный адаптер, а не весь микроконтроллер. Выполнять соединения нужно по официальной инструкции для своей платы, предварительно отключив питание.
Ограничение для CH340: официальная инструкция Arduino указывает, что этот loopback-тест всегда завершится неуспехом на некоторых производных платах с USB-UART CH340. Такой результат нельзя использовать как универсальное доказательство поломки этих плат.
Перезапись загрузчика через ISP рассматривается после проверок модели, Processor, кабеля, порта и периферии. Для неё нужны правильная схема подключения, совместимый программатор или другая Arduino и параметры целевой платы. Операция может затронуть существующий скетч. Не начинайте с неё только из-за resp=0x00.
Частые вопросы
Нужно ли менять Programmer в меню IDE?
Для обычной загрузки через USB на классический Uno или Nano произвольная смена Programmer обычно не решает эту ошибку. Сначала используйте обычную Upload и правильные Board, Processor и Port. Настройка внешнего программатора относится к записи через ISP и загрузчику.
Поможет ли проверить скетч онлайн?
Онлайн-проверка скетча Arduino помогает с исходником в пределах возможностей сервиса, но не проверяет физический кабель, выбранный COM-порт и ответ загрузчика. Если ошибка появилась после успешной компиляции, связь проверяют на компьютере с платой.
Почему ошибка возвращается после подключения датчика?
Сравните назначение выводов и питание. Периферия на D0/D1 может пересекаться с UART, а исполнительное устройство способно создавать просадку питания. Для планирования подключений классических AVR-плат пригодится конструктор Arduino с проверкой конфликтов GPIO; электрические параметры модуля проверяются отдельно.
Проверка результата
Рабочий результат — завершённая загрузка и выполнение программы. Загрузите Blink, убедитесь в ожидаемом поведении платы, отключите и снова подключите USB, проверьте выбранный порт и повторите Upload. После этого верните периферию и свой скетч.
Если проблема остаётся на минимальном стенде, журнал и результаты последовательных проверок помогут решить, нужен ли ремонт цепи сброса, восстановление загрузчика или проверка на другом компьютере. Для первых шагов с IDE есть руководство по первому скетчу Arduino.
Первичные источники: справочник ошибок avrdude, выбор Processor у Nano, loopback и ограничение CH340, подробный журнал IDE.
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.