Ошибка avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00 означает, что утилита avrdude отправила плате десять запросов на синхронизацию и не получила ни одного корректного ответа от bootloader микроконтроллера. Прошивка при этом не записывается вообще — обрыв происходит ещё на этапе «рукопожатия» между компьютером и Arduino. Код resp=0x00 указывает, что в ответ пришёл нулевой байт либо линия данных молчит.
Хорошая новость: это одна из самых распространённых ошибок при работе с Arduino Uno, Nano, Mega и их клонами, и в большинстве ситуаций она решается без пайки и замены компонентов. Ниже разберём проверки от самых простых к более глубоким — от выбора порта до восстановления загрузчика.
Что означает ошибка stk500_getsync
При загрузке скетча Arduino IDE вызывает консольную утилиту avrdude, которая общается с микроконтроллером по протоколу STK500 через последовательный порт. Перед записью прошивки avrdude посылает команду синхронизации и ждёт ответа 0x14 0x10 («в синхронизации, всё в порядке»). Если ответа нет, утилита повторяет попытку — всего десять раз, о чём и говорит счётчик attempt 1 of 10 ... 10 of 10.
Значение после resp= показывает, что именно пришло в ответ. Вариант resp=0x00 обычно означает «тишину» или мусор на линии: неверный порт, занятый порт, отсутствующий драйвер, неисправный кабель или «мёртвый» bootloader. Другие значения (например, resp=0xe0 или случайные байты) чаще указывают на неверную скорость обмена или не тот тип программатора.
Шаг 1. Проверка порта, платы и кабеля
Самая частая причина — в Arduino IDE выбран не тот COM-порт или не тот тип платы. Откройте меню Инструменты → Порт и убедитесь, что порт появляется в списке именно при подключении платы и исчезает при её отключении. Затем проверьте Инструменты → Плата: для классической Uno должна быть выбрана Arduino Uno, для Nano — Arduino Nano с соответствующим процессором.
Отдельно стоит проверить USB-кабель. Часть кабелей от зарядных устройств содержит только линии питания и не имеет данных — плата при этом светится, но в системе не определяется. Признак такого кабеля: порт вообще не появляется в диспетчере устройств, даже с ошибкой. Замените кабель на заведомо «дата-кабель» и попробуйте другой USB-порт компьютера, желательно без хабов и удлинителей.
- 🔌 Подключите плату напрямую к USB-порту компьютера, минуя хабы.
- 📟 Убедитесь, что COM-порт появляется и исчезает при подключении/отключении платы.
- 🔁 Попробуйте другой USB-кабель — именно кабель с линиями данных.
- 🧩 Сверьте выбранную плату и процессор в меню
Инструментыс реальной платой.
Шаг 2. Драйверы USB-UART преобразователя
Обмен с микроконтроллером идёт через микросхему-преобразователь USB→UART. На оригинальных Uno это ATmega16U2, на большинстве клонов Nano и Uno — CH340 или CH341, встречаются также CP2102 и FTDI FT232. Если драйвер преобразователя не установлен или слетел, порт либо не появляется, либо работает некорректно — и avrdude получает тишину.
Откройте Диспетчер устройств Windows и посмотрите раздел «Порты (COM и LPT)». Устройство с жёлтым восклицательным знаком или строка «Неизвестное USB-устройство» — прямое указание на проблему с драйвером. Для чипов CH340/CH341 драйвер обычно нужно ставить отдельно: он свободно распространяется производителем чипа, скачивайте его только с официального сайта производителя или из проверенных источников.
⚠️ Внимание: не устанавливайте «драйвер-паки» и автоматические установщики драйверов из непроверенных источников — для USB-UART чипов это частый источник несовместимых версий. Ставьте драйвер конкретно под ваш чип (CH340, CP2102, FTDI) и версию ОС.
Шаг 3. Порт занят другой программой
Последовательный порт в Windows может быть открыт только одним приложением одновременно. Если порт уже захвачен, avrdude не сможет общаться с платой, хотя порт в списке виден. Типичные «захватчики» — открытый монитор порта в самой IDE, терминальные программы, среды визуального программирования, драйверы Bluetooth-модулей, создающие виртуальные COM-порты.
Закройте монитор порта (Инструменты → Монитор порта) перед загрузкой скетча, завершите работу терминалов вроде PuTTY или Termite, а при подозрении на фоновые процессы — просто перезагрузите компьютер и сразу попробуйте прошить плату, не открывая лишнего. Это быстрый и полностью безопасный способ исключить конфликт доступа к порту.
Шаг 4. Настройки платы и сброс перед прошивкой
Для плат на ATmega328P с «старым» загрузчиком в Arduino IDE есть отдельная опция: Инструменты → Процессор → ATmega328P (Old Bootloader). Многие клоны Nano прошиваются только с этой опцией, иначе скорости обмена не совпадают и возникает как раз not in sync. Если у вас Nano — переберите оба варианта процессора, это занимает меньше минуты.
Bootloader активен лишь короткое время после сброса микроконтроллера. Обычно сброс выполняется автоматически через линию DTR, но если автосброс не срабатывает (например, из-за обвязки на пинах 0/1), помогает ручной приём: зажмите кнопку RESET на плате, нажмите «Загрузить» в IDE и отпустите кнопку сразу в момент, когда в консоли появится строка о начале загрузки (после «Компиляция завершена»). Точный момент подбирается за пару попыток.
- 🧠 Для Nano проверьте вариант процессора
ATmega328P (Old Bootloader). - ⏱️ Попробуйте ручной сброс: отпускайте RESET в момент начала загрузки.
- 🚫 Отключите всё от пинов
0 (RX)и1 (TX)— они используются при прошивке. - 🔋 Убедитесь, что плата стабильно питается и светодиод питания не мигает.
☑️ Быстрая диагностика not in sync
Шаг 5. Если ничего не помогло: bootloader и «железо»
Если все программные проверки пройдены, а плата молчит, возможная причина — повреждённый или стёртый bootloader. Такое случается после нештатных экспериментов с прошивкой через ISP или скачков питания. Признак косвенный, но характерный: при подаче питания встроенный светодиод на пине 13 не даёт характерной короткой серии вспышек, которую обычно выдаёт загрузчик при старте.
Загрузчик восстанавливается через интерфейс ICSP с помощью второй платы Arduino, работающей как программатор (скетч ArduinoISP из стандартных примеров), либо отдельного USB-программатора. В IDE для этого есть штатный пункт Инструменты → Записать загрузчик при выбранном программаторе Arduino as ISP. Это уже более глубокая процедура: перед ней сверьтесь с распиновкой ICSP именно вашей платы по официальной документации, так как расположение контактов у разных моделей отличается.
⚠️ Внимание: запись загрузчика через ICSP — обратимая, но чувствительная к ошибкам подключения процедура. Неверное соединение линий или питание неправильного уровня могут повредить микроконтроллер. Подключайте только по схеме для вашей конкретной платы и не подавайте на неё одновременно два источника питания.
Редкий, но встречающийся сценарий — неисправность самого чипа USB-UART или микроконтроллера. Проверить это можно «перекрёстным» способом: прошить другую заведомо рабочую плату тем же кабелем и компьютером. Если вторая плата прошивается, а первая нет при живом загрузчике — вероятна аппаратная неисправность, и дальше имеет смысл ремонт или замена платы.
Таблица: причины и признаки
| Причина | Характерный признак | Что делать |
|---|---|---|
| Неверный порт или плата в IDE | Порт есть, но прошивка сразу падает | Проверить Инструменты → Порт и тип платы |
| Кабель без линий данных | Порт вообще не появляется в системе | Заменить кабель на data-кабель |
| Нет драйвера CH340/CP2102/FTDI | Жёлтый значок в Диспетчере устройств | Установить драйвер под конкретный чип |
| Old Bootloader (Nano) | Ошибка только на клоне Nano | Выбрать ATmega328P (Old Bootloader) |
| Слёт bootloader | Нет вспышек LED 13 при включении | Перепрошить загрузчик через ICSP |
Как понять, что виноват именно bootloader, а не порт
Подключите плату и откройте монитор порта на скорости 9600. Если порт открывается без ошибок и система стабильно видит устройство, значит USB-UART и драйверы работают — проблема с высокой вероятностью на стороне микроконтроллера: загрузчик, автосброс или сам чип. Если же порт не открывается или устройство «отваливается» — ищите причину в кабеле, драйвере или преобразователе.
FAQ: частые вопросы
Ошибка возникает на новой плате, которую ещё ни разу не прошивали. Это брак?
Не обязательно. Чаще всего причина в отсутствующем драйвере USB-UART чипа (для клонов это почти всегда CH340) или в кабеле без линий данных. Сначала проверьте Диспетчер устройств и замените кабель — к браку стоит приходить только после исключения этих факторов.
Плата прошивалась раньше, а теперь выдаёт not in sync. Что изменилось?
Возможные причины: порт стал занят другой программой, обновление ОС заменило драйвер, в схеме появилась обвязка на пинах 0/1, либо предыдущий скетч активно использует Serial и мешает синхронизации. Помогает ручной сброс в момент загрузки и отключение всего от пинов RX/TX.
Чем отличается resp=0x00 от других значений resp?
resp=0x00 обычно означает отсутствие внятного ответа — «тишину» на линии. Ненулевые значения (например, случайные байты) чаще говорят о том, что какой-то обмен идёт, но на неверной скорости или не по тому протоколу — тогда стоит проверять выбор платы, процессора и программатора.
Можно ли прошить плату без bootloader?
Да, через программатор по интерфейсу ICSP (программаторы типа USBasp или вторая Arduino со скетчем ArduinoISP). В этом случае прошивка записывается напрямую в память микроконтроллера, и ошибка stk500_getsync не возникает, потому что синхронизация с загрузчиком не требуется.
Помогает ли смена версии Arduino IDE?
Сама по себе — редко, поскольку ошибка возникает на уровне связи с платой, а не среды разработки. Однако свежая версия IDE может корректнее работать с некоторыми платами и драйверами, поэтому обновление имеет смысл как вспомогательный шаг, но не как основное решение.