Разбор ошибок · статья

Произошла ошибка при загрузке скетча: дерево причин

Код собрался, а плата его не берёт: ардуино не прошивается, скетч не загружается, а внизу консоли — «ошибка загрузки скетча», «exit status 1», «programmer is not responding», «not in sync», «can't open device». Идём по дереву причин — от самой частой к самой редкой, с настоящими строками консоли и без советов вслепую.

Сначала развилка: это сборка или загрузка?

Половина потерянного времени уходит на то, что человек чинит не ту беду. Слова exit status 1 стоят в конце и у ошибки компиляции, и у ошибки загрузки — но это два разных мира. Посмотрите на слово перед ними.

Дело не дошло до платы

Ошибка компиляции: exit status 1Compilation error: exit status 1

Ошибка в коде

Плату можно даже не подключать: компилятор не собрал программу. Ищите первую строку со словом error выше по выводу — там файл и номер строки. Вместо exit status 1 здесь часто стоит сам текст ошибки — это то же самое.

Программа собралась, плата не приняла

Не удалась загрузка: ошибка при загрузке: exit status 1Failed uploading: uploading error: exit status 1

Беда со связью

Выше по выводу есть строка «Скетч использует … байт» — значит, код в порядке. Проверять надо порт, модель платы, кабель и драйвер.

Одно и то же окончание exit status 1 стоит и там, и там — различает случаи только слово перед ним.

Если у вас первый случай — вам на страницу разбор ошибок компиляции: там про «expected ;», «was not declared in this scope» и «No such file or directory». Дальше на этой странице — только второй случай, когда программа уже собрана и дело за платой.

Что на самом деле значит exit status 1

Это не код ошибки Arduino и не номер неисправности. Так операционная система сообщает, что запущенная программа завершилась неудачей: ноль — успех, всё остальное — нет. Загрузку выполняет отдельная программа, и среда просто пересказывает её приговор: для плат на AVR это avrdude, для ESP32 и ESP8266 — esptool, для UNO R4 WiFi — bossac, для UNO R4 Minima — dfu-util, для плат на RP2040 — rp2040load или picotool.

Отсюда правило: в самой строке exit status 1 смысла нет. Настоящая причина — на несколько строк выше, там, где говорит программа-загрузчик. И сама цифра зависит от неё, а не от беды: avrdude возвращает 1, esptool на платах ESP — 2, dfu-util на UNO R4 Minima — 74. Видите exit status 2 — ищите точно так же, строкой выше.

Точный текст в вашей версии среды

Формулировки отличаются не только языком, но и версией. Мы свели их в таблицу, чтобы вы узнали свою строку и поняли, что все они про одно и то же.

ГдеЧто написаноПримечание
Arduino IDE 1.8.19Problem uploading to board. See … for suggestions.В русском окне эта строка остаётся английской: адрес справки в программе поменяли, а в файле переводов остался старый — подстановка не сработала.
Arduino IDE 1.8.19, русскаяПроизошла ошибка при загрузке скетчаЭту фразу среда показывает, когда не узнала в выводе avrdude ничего знакомого. Её и запоминают — отсюда популярность запроса.
Arduino IDE 2.3.x, русскаяНе удалась загрузка: ошибка при загрузке: exit status 1Строку выдаёт не сама среда, а arduino-cli внутри неё — поэтому она так не похожа на язык остального окна.
Arduino IDE 2.3.x, английскаяFailed uploading: uploading error: exit status 1Самая частая формулировка в интернете: именно её видят на английской среде.
Arduino IDE 2.0–2.1Error: 13 INTERNAL: Failed uploading: uploading error: exit status 1Цифра 13 — не номер неисправности, а код внутреннего канала между окном среды и arduino-cli. Читайте всё, что стоит после INTERNAL.
Trema IDEРусская карточка над консолью: что случилось и что проверитьСырой вывод остаётся ниже — он нужен, когда дело доходит до поддержки.

«Возникла» и «Произошла» — это разные беды. В файле переводов Arduino IDE стоит «Произошла ошибка при загрузке скетча» — вот это про плату, и вы на нужной странице. А «Возникла ошибка при загрузке…» — перевод совсем другой строки, про скачивание файла: так среда жалуется, когда не смогла загрузить пакет плат или библиотеку. Если после этих слов стоит адрес или имя файла, вам сюда: почему не качаются платы и библиотеки.

Почему советы из интернета не совпадают с вашей консолью

Частая причина растерянности: человек ищет «stk500_getsync not in sync», а такого слова в его консоли нет вовсе. Дело не в поисковике — дело в версии программы, которая заливает прошивку.

avrdude 6.3 — ядро AVR 1.8.1–1.8.6
avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x38 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x38
avrdude 8.0 — ядро AVR 1.8.7 и 1.8.8
Error: programmer is not responding Warning: attempt 1 of 10: not in sync: resp=0x00 Error: programmer is not responding Warning: attempt 2 of 10: not in sync: resp=0x00 … Error: unable to open port COM1 for programmer arduino
Беда одна — загрузчик не отозвался, — а слова разные. Слева то, что ищут в поисковиках; справа то, что видит человек на свежей среде. А вот число после resp= ответом платы не является: в avrdude 8.0 0x00 значит «ответа не пришло», а avrdude 6.3 в том же случае печатает случайный байт из памяти — у нас на пустом COM1 выходили 0x38, 0xe7 и 0xff. Сравнивайте не числа, а слова.

Сам avrdude 8.0 вышел в августе 2024 года, но в ядро Arduino AVR попал только с версией 1.8.7 — в январе 2026 года (следом, в мае, вышла 1.8.8). До этого во всех ядрах жил avrdude 6.3, и жил долго: предыдущая версия ядра, 1.8.6, вышла ещё в ноябре 2022-го. Отсюда и разнобой: почти весь интернет написан старыми словами, а свежая среда после обновления плат говорит новыми. Arduino IDE 1.8.19 везёт с собой ядро 1.8.3 — значит, старые слова.

Изменились в основном приставки: пропали имена внутренних функций (stk500_recv, stk500_getsync, ser_open), вместо них появились Error: и Warning:. Сам текст жалоб почти тот же — поэтому ищите не имя функции, а суть: «programmer is not responding», «not in sync», «cannot open port».

Старая строка (avrdude 6.3)Новая строка (avrdude 8.0)Что это значит
avrdude: stk500_recv(): programmer is not respondingError: programmer is not respondingЗагрузчик не отозвался: не тот порт, не та плата или платы на порту нет
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00Warning: attempt 1 of 10: not in sync: resp=0x00Та же беда, вид сбоку: десять попыток подряд и ни одного ответа
avrdude: ser_open(): can't open device …: Отказано в доступе.Error: cannot open port …: Отказано в доступе.Порт занят другой программой — обычно монитором порта
avrdude: ser_open(): can't open device …: Не удается найти указанный файл.Error: cannot open port …: Не удается найти указанный файл.Такого порта в системе нет: плату вынули или драйвер не встал
avrdude done. Thank you.Avrdude done. Thank you.Программа закончила работу — вежливо, но это не значит, что успешно

Есть и ловушка наоборот: последняя строка Error: unable to open port COM7 for programmer arduino в avrdude 8.0 появляется даже тогда, когда порт прекрасно открылся, а плата просто промолчала. Не гоняйтесь за словом open — смотрите строки выше.

Важное предупреждение про число после resp=

По интернету ходит красивое правило: «resp=0x00 — не тот порт, а другое число — не та плата». Мы попробовали его проверить и опровергли. На системном COM1, к которому не подключено вообще ничего, avrdude 6.3 в шести запусках подряд выдал resp=0x38, 0x57, 0x87, 0xe7, 0xf4, 0xfc — каждый раз другое число. Это не ответ платы, а содержимое неочищенного буфера внутри самой программы. Новый avrdude 8.0 на том же порту честно пишет 0x00.

И наоборот: Arduino Nano со старым загрузчиком, если заливать в неё на скорости 115 200, отвечает resp=0x00 — при неверной скорости плата не отвечает «не то», она просто молчит. Так что число после resp= в диагнозе не участвует. Дальше мы им не пользуемся ни разу — идём по проверкам.

Дерево причин: шесть проверок по порядку

Порядок не случайный: сверху то, что встречается чаще и проверяется за секунды, снизу — редкое и долгое. Идите сверху вниз и остановитесь, как только загрузка прошла.

  1. 1Не тот портдесять строк «attempt N of 10» подряд — ответа нет20 секунд
  2. 2Порт занят другой программой«can't open device», «cannot open port», «Отказано в доступе»10 секунд
  3. 3Порта нет вовсе: нет драйвера или кабель без данных«Не удается найти указанный файл», порт пропал из спискаминута
  4. 4Выбрана не та плата или не тот загрузчикте же десять попыток, но порт вы уже проверили — он вашполминуты
  5. 5К выводам 0 и 1 что-то подключеноте же десять попыток; отключили модуль — заработаломинута
  6. 6Загрузчика в плате нет или он стёртмолчит на всех скоростях, светодиод L не мигает после RESETполчаса и программатор
Порядок не случайный: сверху то, что встречается чаще и проверяется быстрее. Шестой пункт — самый редкий, до него доходят единицы.

1. Не тот порт — самая частая причина

Сначала отличите две похожие беды. Если в консоли написано Failed uploading: no upload port provided (по-русски — «порт для загрузки не указан»), то порт не выбран вообще: avrdude даже не запускался, строк про попытки вы не увидите. Откройте меню портов и выберите порт; если список пуст — вам сразу в пункт 3.

А вот десять строк attempt N of 10 подряд означают другое: порт открылся, avrdude десять раз позвал загрузчик и не дождался ответа. Чаще всего на том конце провода просто не плата.

  1. Проверка, которая не врёт. Откройте список портов, запомните его, выньте кабель платы, откройте список снова. Пропавший порт — ваш. Вставьте кабель обратно и выберите именно его.
  2. COM1 и COM2 — чаще всего не платы. На стационарных компьютерах эти номера занимает сам компьютер: порт на материнской плате и служебные устройства. Мы специально запустили загрузку на такой COM1 — получили ровно десять попыток и приговор. Но правило не железное: на ноутбуках старых портов нет, и первый свободный номер Windows может отдать вашей плате.
  3. Bluetooth тоже создаёт COM-порты. Наушники и колонка могут висеть на COM4 и COM5 и выглядеть в списке как обычные порты.

Не пугайтесь подписи «Неизвестно». Среда подписывает порт названием платы, только если пара опознавательных кодов USB совпала с записью в файле описания плат. У моста CH340 такие коды есть — 1A86:7523, — но за платами Arduino они не закреплены: строка 1a86 в файле описания плат не встречается ни разу, мы проверили. Поэтому клон честно работает, но остаётся безымянным. Больше того: у фирменного Nano в этом файле кодов нет вовсе, так что и он не подписывается.

2. Порт занят: can't open device и «Отказано в доступе»

COM-порт умеет разговаривать только с одной программой за раз. Признак — слова Отказано в доступе (в английской системе Access is denied) внутри строки про открытие порта.

  • Открыт монитор порта — в этой же среде или в другой;
  • открыт плоттер по последовательному соединению;
  • запущена вторая копия среды, или прошлая осталась висеть процессом;
  • порт держит сторонняя программа: терминал, программа станка, утилита от продавца платы.

Лечится закрытием той программы. Расхожий совет «подождите, Windows отпускает порт не сразу» мы тоже проверили — и он не подтвердился: двадцать циклов «открыть — закрыть — открыть снова» прошли без единого отказа, самая долгая задержка составила 16 миллисекунд, а запущенный сразу после закрытия avrdude открыл порт с первой попытки. Так что если «Отказано в доступе» осталось — порт всё ещё кто-то держит, ищите кто. Подробнее — в базе знаний: порт занят.

В Trema IDE половину этой войны выигрывают за вас. Перед прошивкой программа сама закрывает свой монитор порта — в том числе открытый в другом окне Trema IDE — и пишет об этом в журнале. А вот порт, который держит чужая программа, она освободить не может: такую придётся закрыть руками, зато в карточке будет прямо сказано, что порт занят. Если же порт освободился с задержкой, программа сама ждёт 1,2 секунды и повторяет загрузку ещё раз.

3. Порта нет вовсе: «Не удается найти указанный файл»

Если в строке стоит Не удается найти указанный файл — порта с таким именем в системе нет. Плата либо отключилась, либо её никогда и не было видно.

  • Кабель только для зарядки. Внешне не отличается, но линий данных внутри нет. Самая обидная причина: плата светится, компьютер её не видит. Возьмите заведомо рабочий кабель — например, от старого телефона с передачей файлов.
  • Нет драйвера моста. Клоны собирают на микросхемах CH340 и CP2102, для них нужен драйвер. В диспетчере устройств такая плата видна как «неизвестное устройство» с жёлтым значком. Инструкция — драйверы CH340 и CP2102.
  • Разветвитель или удлинитель. Подключите плату напрямую к компьютеру и лучше в разъём на задней стенке: там питание стабильнее.

Отдельный случай для Linux: Permission denied

На Linux строка выглядит иначе: can't open device "/dev/ttyUSB0": Permission denied (у плат со встроенным USB — /dev/ttyACM0). Это не занятый порт и не сломанный драйвер: последовательные порты принадлежат группе dialout, а ваш пользователь в неё не входит. Лечится одной командой — добавить себя в группу:

sudo usermod -aG dialout $USER

После команды обязательно выйти из системы и войти снова: группа применяется при входе. Запускать среду через sudo не надо — настройки и проекты уедут в чужую папку.

4. Выбрана не та плата: Nano и старый загрузчик

Если порт вы проверили и он точно ваш, следующий подозреваемый — модель платы в меню. Классика жанра — Arduino Nano с рынка: загрузчик у таких плат старый, он разговаривает на скорости 57 600, а не 115 200. Пункт меню задаёт скорость; не та скорость — не тот разговор, и плата молчит.

Инструменты → Процессор — для платы Arduino Nano

ATmega328P

115 200 бод

Оригиналы и свежие клоны: загрузчик optiboot. Пробуйте первым.

ATmega328P (Old Bootloader)

57 600 бод

Дешёвые клоны с рынка — их большинство. Если первый вариант молчит, ставьте этот.

ATmega168

19 200 бод

Совсем старые платы: памяти вдвое меньше — 14 336 байт вместо 30 720.

Скорости взяты из файла описания плат ядра Arduino AVR 1.8.8: пункт меню задаёт скорость, на которой avrdude пытается разговаривать с загрузчиком. Не совпала скорость — разговора не будет.

Практический совет: если Nano молчит, переключите пункт Processor (в Arduino IDE 1.8.19 он переведён как «Процессор», в 2.3.x название приходит из файла описания плат и остаётся английским) на второй вариант и загрузите снова. Это занимает десять секунд и решает большинство случаев с китайскими платами. Обратное тоже бывает: свежий Nano на «Old Bootloader» точно так же не заведётся.

Осторожно, названия перевёрнуты. Во встроенном списке плат Trema IDE имена приходят из движка PlatformIO, а там они другие: «Arduino Nano ATmega328» — это как раз старый загрузчик на 57 600, а новый называется «Arduino Nano ATmega328 (New Bootloader)». В Arduino IDE наоборот: обычный пункт — новый загрузчик, а старый помечен «(Old Bootloader)». Ориентируйтесь не на слово, а на скорость.

Вторая классическая путаница — Arduino Mega. Она отвечает по другому протоколу: в файле описания плат у Mega 2560 стоит wiring, а у Uno и Nano — arduino. Если в меню выбрана Uno, а подключена Mega, avrdude обращается к плате не тем языком и выдаёт всё то же «programmer is not responding». Переключение процессора тут не поможет — менять надо саму плату в меню.

И ещё одно место, где Uno и Nano расходятся: памяти под скетч у Uno 32 256 байт, а у Nano 30 720. От выбранного загрузчика это не зависит — в файле описания плат 30 720 стоит у обоих вариантов Nano. Дело в настройке самого микроконтроллера: у Nano под загрузчик отведено 2 КБ, у Uno — всего 512 байт. Что это за байты и куда они деваются, разобрано в статье «Память Arduino».

5. К выводам 0 и 1 что-то подключено

Причина, о которой новички не догадываются: выводы 0 (RX) и 1 (TX) — это те самые провода, по которым загрузчик разговаривает с компьютером.

Компьютер
Мост USB↔UARTCH340, CP2102, ATmega16U2
МикроконтроллерATmega328P и его загрузчик
Ваш модуль на 0 и 1Bluetooth HC-05, GPS, вторая плата
Выводы 0 и 1 — не «просто пины»: по ним идёт разговор загрузчика с компьютером. Всё, что подключено к ним, вмешивается в этот разговор.

Если на них висит модуль Bluetooth HC-05, GPS, вторая плата или шилд с ножками в тех же гнёздах — он говорит в ту же линию одновременно с компьютером. Загрузчик слышит мешанину и не узнаёт нужный ответ.

  1. Отключите всё от выводов 0 и 1 на время загрузки;
  2. снимите шилд, если он закрывает эти выводы;
  3. загрузите скетч и верните модуль на место.

Если модуль нужен постоянно, переносите его на «программный» последовательный порт (библиотека SoftwareSerial, любые другие выводы) — тогда загрузка перестанет конфликтовать с ним навсегда.

Оговорка про платы. Всё сказанное относится к платам с отдельным мостом USB↔UART: Uno, Nano, Mega, Pro Mini. У Leonardo, Micro, Pro Micro и UNO R4 Minima прошивка идёт по USB прямо в микроконтроллер, а выводы 0 и 1 — это отдельный порт Serial1, и подключённый к ним модуль загрузке не мешает. У плат ESP32 правило то же, но ножки другие: загрузчик разговаривает по GPIO1 и GPIO3.

6. Загрузчика в плате нет

Редкий, но настоящий случай: плата новая, а внутри пусто — загрузчик не прошит на заводе, или его стёрли неудачным опытом с программатором. Приметы: плата молчит на всех скоростях, а светодиод L после нажатия RESET не мигает ни разу.

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

  1. в плате-доноре откройте пример ArduinoISP (Файл → Примеры → 11.ArduinoISP) и залейте его как обычный скетч;
  2. соедините платы: вывод 10 донора → RESET подопытной, 11 → 11, 12 → 12, 13 → 13, плюс 5V и GND;
  3. в меню выберите подопытную плату, а программатором — Arduino as ISP;
  4. нажмите «Записать загрузчик» и дождитесь конца.
ДОНОРс ArduinoISPПОДОПЫТНАЯбез загрузчика10RESETсброс подопытной1111MOSI — данные туда1212MISO — данные обратно1313SCK — такт5V5VпитаниеGNDGNDобщая земля
Шесть проводов — и одна плата шьёт другую. Выводы 11, 12 и 13 у Uno и Nano — это шина SPI, по которой и работает программатор; вывод 10 донор использует как сброс. Важно: 10 идёт не на 10, а на RESET подопытной платы — это единственное место, где номера не совпадают. На Mega 2560 выводы SPI другие: 50, 51, 52, а сброс всё так же с 10.

Если программатор покупной (USBasp и подобные), учтите вещь, о которой продавцы молчат: у него разъём на 10 контактов, а колодка ICSP на Uno и Nano — на 6, и без переходника шлейф просто некуда воткнуть. В магазине это USBASP V2.0 (артикул 279, 533 ₽) и переходник 10 пин → 6 пин (артикул 496, 267 ₽) — берут их всегда парой.

После этого плата становится обычной и прошивается по USB как все. Подойдёт и покупной программатор USBasp — порядок тот же, только пункт в меню другой.

Загрузка зависла и не заканчивается

Часто пишут не «ошибка», а «загрузка зависла», «прошивка идёт бесконечно», «таймаут при загрузке». Смотреть надо туда же. Полоса выглядит замершей, потому что avrdude делает десять попыток подряд и печатает приговор только после последней — дождитесь конца, и появится обычное сообщение об ошибке из этой статьи. Если ждать надоело, включите подробный вывод: тогда видно, на каком шаге всё встало.

Отдельно стоит случай, когда зависает не загрузка, а сама среда — окно не отвечает и в консоли пусто. Это уже про запуск и настройки: Arduino IDE не запускается и зависает.

Проверка на всякий случай: жива ли плата

Простой тест, который экономит час, — но он для плат на AVR (Uno, Nano, Mega, Pro Mini): нажмите на плате RESET и посмотрите на светодиод L. У Uno и у Nano с новым загрузчиком он мигнёт три раза, у Nano со старым — один. Подал признаки жизни — микроконтроллер работает и загрузчик на месте, ищите причину в порте и настройках. Не мигает вовсе — смотрите питание, кабель и пункт 6.

У других плат приметы другие: у Leonardo и Micro светодиод не мигает, а плавно разгорается и гаснет секунд восемь, а на ESP32, ESP8266 и Raspberry Pi Pico встроенный светодиод после сброса не подаёт признаков жизни вовсе — там этот тест ничего не доказывает.

ESP32 и ESP8266: у них другие слова

На платах ESP загрузку выполняет не avrdude, а esptool, и текст ошибки другой. Причём две его разновидности означают разное, и это важно:

  • Failed to connect to ESP32: Timed out waiting for packet header — с порта что-то приходит, но это не ответ загрузчика: плата не вошла в режим прошивки;
  • Failed to connect to ESP32: No serial data received — не пришло вообще ничего: почти всегда это кабель без линий данных, не тот порт или неустановленный драйвер моста.

Режим прошивки на ESP включается уровнем на выводе GPIO0 в момент сброса — поэтому просто держать кнопку бесполезно. Правильная последовательность: зажать BOOT (на платах ESP8266 она подписана FLASH), не отпуская, коротко нажать и отпустить RESET (на ESP32 эта кнопка подписана EN), и только после этого запускать загрузку. Отпустить BOOT можно, когда в консоли пойдут строки Writing at 0x….

На плате без кнопки BOOT (ESP-01, голый модуль) то же самое делают проводом: соедините GPIO0 с землёй, подайте питание заново, загрузите скетч и снимите перемычку. Совет про конденсатор между EN и землёй, который часто дают в интернете, к режиму прошивки отношения не имеет — он лечит другое, слишком короткий автосброс на платах, где кнопка и схема автосброса уже есть.

И проверьте модель в меню плат. Для обычных плат на ESP32-WROOM пункт «ESP32 Dev Module» подходит почти всегда и на связь не влияет. А вот если плата на ESP32-S3, S2 или C3, а в меню стоит простой ESP32, esptool так и скажет: This chip is ESP32-S3, not ESP32 — вот тогда пункт менять надо. Подробный разбор для этих плат — ESP32 в среде Arduino, ESP8266, NodeMCU и Wemos D1 mini и частые беды ESP32.

Leonardo, Micro и UNO R4: порт исчезает во время загрузки

У Leonardo, Micro, Pro Micro и UNO R4 Minima разъём USB подключён прямо к микроконтроллеру. Перед прошивкой плата перезагружается в загрузчик, и среда должна поймать этот момент сама.

  • Leonardo и Micro. Плата на секунду появляется под другим номером порта. Если среда не успела, нажмите RESET один раз и сразу запускайте загрузку: загрузчик ждёт восемь секунд, светодиод в это время плавно разгорается и гаснет.
  • Клоны Pro Micro. Одиночный сброс держит загрузчик меньше секунды — здесь и нужен известный приём «нажать RESET два раза подряд»: он даёт те же восемь секунд.
  • UNO R4 Minima. COM-порт в этот момент исчезает совсем: плата становится USB-устройством DFU, и прошивку в неё заливает dfu-util. Пропавший порт — это нормально, другой выбирать не надо.
  • UNO R4 WiFi устроена иначе. Разъём USB там идёт в модуль ESP32-S3, который работает мостом и сам перезагружает главный микроконтроллер, — номер порта во время загрузки не меняется.

Raspberry Pi Pico и платы на RP2040: порта может не быть совсем

У этих плат прошивка заливается не через COM-порт, а через режим BOOTSEL, в котором плата видна как флешка с именем RPI-RP2. Поэтому здесь не работает ни приём «посмотрите, какой порт пропал», ни строки avrdude. Типичная жалоба выглядит так: No accessible RP2040 devices in BOOTSEL mode were found.

Лечится порядком действий: отключите плату, зажмите кнопку BOOTSEL и, не отпуская, подключите её снова — в системе должен появиться съёмный диск. После этого запускайте загрузку.

Если ничего не помогло: что собрать перед вопросом

Чтобы вам ответили по делу — и на форуме, и в поддержке, — нужны четыре вещи. Без них любой совет будет гаданием.

  1. Точная модель платы и то, что выбрано в меню плат;
  2. весь вывод консоли целиком, а не последняя строка — причина почти всегда выше;
  3. что показывает список портов при вставленной и вынутой плате;
  4. мигает ли светодиод L после нажатия RESET.

В Trema IDE часть этого собирается сама: кнопка «Сообщить о проблеме» отправляет разработчикам ваше описание вместе с архивом диагностики — сведениями о системе и журналом последних сборок и загрузок с концом вывода консоли. Тот же архив можно сохранить отдельно: «Настройки → Если что-то сломалось → Сохранить архив на диск» — и приложить к письму в поддержку. Модель платы и список портов допишите словами.

Как та же ошибка выглядит в Trema IDE

Мы пишем среду для российских школ и кружков, и разбор ошибок загрузки в ней сделан по этому же дереву: программа читает вывод загрузчика и сразу говорит, на какой ветке вы оказались. Проверки по-прежнему делаете вы — сама она освобождает свой порт и один раз повторяет загрузку.

  • Восемь правил вместо одного совета. Программа различает случаи по строкам вывода: порт занят, плата отключилась во время прошивки, плата молчит, плата отвечает не тем, ESP не вошла в режим прошивки, плата ждёт двойного RESET, плата на RP2040 ждёт кнопку BOOTSEL, прошивка записалась с ошибкой при проверке. Для каждого — своя русская карточка с конкретным действием.
  • Сама освобождает свой порт — даже если монитор открыт в другом окне программы — и повторяет загрузку через 1,2 секунды, если порт освободился с задержкой.
  • Читает системные сообщения по-русски. Строку «Отказано в доступе» пишет не avrdude, а Windows — и в своей кодировке, а не в той, которой пользуются программы. Мы знаем это по своим отчётам об ошибках: одно время подсказка приходила мусором вида ╬Єърчрэю т фюёЄєях. Теперь программа разбирает вывод построчно и переводит такие строки обратно в читаемый вид.
  • Ничего не прячет. Сырой вывод avrdude остаётся под карточкой: он нужен, когда доходит до разговора с поддержкой.

Trema IDE открывает те же скетчи и работает с теми же платами, а платы и библиотеки качает с российских серверов — без обходных путей. Скачать можно бесплатно: дома первую неделю без всего, дальше нужна только бесплатная регистрация.

И ещё одно частое смешение: ошибка на этапе сборки с упоминанием файла .h — это не про загрузку, а про недостающую библиотеку. Как её поставить — в отдельной инструкции.

Вопросы

Частые вопросы об ошибке загрузки

Остались вопросы? Напишите нам

Что означает exit status 1 при загрузке скетча?

Только одно: программа, которая заливает прошивку в плату, завершилась неудачей. Ноль — успех, единица — нет. Номер ошибки в эту цифру не зашит, поэтому искать надо не её, а строки выше: именно там avrdude или esptool объясняют, что случилось.

Чем ошибка загрузки отличается от ошибки компиляции?

Смотрите на слово перед exit status 1. Ошибка компиляции (Compilation error) означает, что программа даже не собралась — плата тут ни при чём, ищите ошибку в коде. Не удалась загрузка (Failed uploading) означает, что код в порядке, а связь с платой не получилась: порт, кабель, драйвер, модель платы.

Почему в консоли нет строки stk500_getsync, о которой пишут в интернете?

Потому что у вас свежее ядро плат. В версиях Arduino AVR Boards 1.8.7 и 1.8.8 работает avrdude 8.0, и он пишет коротко: Error: programmer is not responding и Warning: attempt 1 of 10: not in sync. Старые слова stk500_recv и stk500_getsync остались в avrdude 6.3 — он живёт в ядрах до 1.8.6 и в Arduino IDE 1.8.19. Беда при этом одна и та же.

Что значит not in sync: resp=0x00 и чем это отличается от resp=0x38?

Меньше, чем принято думать. В avrdude 8.0 (ядро 1.8.7 и новее) resp=0x00 значит, что ответа с порта не пришло вовсе. А avrdude 6.3 — он внутри Arduino IDE 1.8.19 и PlatformIO — в этой же ситуации печатает случайный байт из памяти: на пустом COM1 у нас в шести запусках вышли 0x38, 0x57, 0x87, 0xe7, 0xf4 и 0xfc. Nano со старым загрузчиком, залитый на 115 200, наоборот отвечает resp=0x00. Поэтому по числу отличить не тот порт от не той платы нельзя — идите по проверкам: сначала порт, потом модель платы.

Что выбрать для Arduino Nano: обычный вариант или Old Bootloader?

Дешёвые клоны с рынка почти всегда со старым загрузчиком: он разговаривает на скорости 57 600 вместо 115 200. В Arduino IDE это пункт ATmega328P (Old Bootloader) в меню Инструменты → Processor (в версии 1.8.19 пункт переведён как Процессор, в 2.3.x название приходит из файла описания плат и остаётся английским). Не угадали с первого раза — переключите на второй вариант и загрузите снова, это занимает десять секунд.

Почему пишет, что порт занят, хотя монитор закрыт?

Значит, его держит не монитор. Расхожий совет подождать мы проверили: двадцать циклов открыть-закрыть-открыть снова прошли без отказов, самая долгая задержка — 16 миллисекунд. Ищите настоящего владельца: вторая копия среды, плоттер, сторонний терминал, зависший процесс прошлой программы. Trema IDE закрывает свой монитор сама (в том числе в другом окне) и один раз повторяет загрузку через 1,2 секунды.

Почему рядом с портом написано Неизвестный вместо названия платы?

Это нормально и загрузке не мешает. Среда подписывает порт, только если пара опознавательных кодов USB совпала с записью в файле описания плат. У микросхемы CH340 такие коды есть — 1A86:7523, — но за платами Arduino они не закреплены, поэтому клоны остаются безымянными; по той же причине не подписывается и оригинальный Nano. Надёжный способ найти свой порт — вынуть кабель и посмотреть, какой порт исчез из списка.

Загрузка не идёт ни на одну плату — виновата среда?

Проверить просто: нажмите RESET на плате и посмотрите на светодиод L. Мигнул — микроконтроллер и загрузчик живы, дело в порте или настройках. Не мигает ни на одной плате — смотрите кабель и питание. Если же среда вообще не открывается или не может скачать платы, это другие беды: у нас есть отдельные разборы про запуск и про ошибку 403.

Пусть среда сама скажет, что не так

В Trema IDE ошибки загрузки объясняются по-русски и с конкретным действием, а свой порт программа освобождает сама. Дома — бесплатно. Другие разборы: ошибки компиляции, плата не видна, база знаний.