USBasp USB SPI AVR программатор: полное руководство по подключению и прошивке

Программатор USBasp не определяется системой или утилита AVRDUDE выдаёт ошибку target doesn't answer — в подавляющем большинстве таких случаев виноваты либо неустановленный драйвер libusb, либо неправильная распайка 10-пинового ISP-разъёма. Этот недорогой программатор на базе микроконтроллера ATmega8 остаётся одним из самых популярных инструментов для прошивки AVR-чипов через интерфейс SPI, и практически все проблемы с ним решаются без пайки и замены компонентов.

В статье разберём устройство программатора, назначение перемычек, установку драйверов в Windows, подключение к целевому микроконтроллеру и работу с программным обеспечением. Отдельное внимание уделим типичным ошибкам и способам их диагностики.

Что такое USBasp и как он устроен

USBasp — это открытый программатор для микроконтроллеров семейства AVR (ATmega, ATtiny, классические AT90), разработанный Томасом Фишлем (Thomas Fischl). Схема и прошивка распространяются свободно, поэтому на рынке существует множество клонов — как правило, они полностью совместимы с оригиналом.

В основе устройства лежит микроконтроллер ATmega8 (или ATmega88 в некоторых ревизиях), который эмулирует USB-устройство программно и передаёт данные на целевой чип по протоколу SPI через линии MOSI, MISO, SCK и RESET. Программатор работает в режиме внутрисхемного программирования (ISP — In-System Programming), то есть целевой микроконтроллер не нужно извлекать из платы устройства.

Типовая плата USBasp содержит:

  • 🔌 USB-разъём (тип A или mini/micro-USB в зависимости от клона) для подключения к компьютеру;
  • 📌 10-пиновый или 6-пиновый ISP-разъём для соединения с целевой платой;
  • Перемычку выбора питания — 5 В или 3,3 В (не на всех платах);
  • 🔁 Перемычки JP1–JP3 для сервисных функций и управления скоростью;
  • 💡 Светодиоды индикации питания и процесса передачи данных.

Распиновка ISP-разъёма

Большинство плат USBasp оснащены 10-пиновым разъёмом стандарта KANDA, но встречаются и 6-пиновые версии. Перед подключением обязательно сверьте распиновку с маркировкой на плате — у клонов шелкография иногда отсутствует или нанесена с ошибками.

Пин (10-pin)СигналНазначение
1MOSIДанные от программатора к чипу
2VCCПитание целевой платы (5 В / 3,3 В)
5RESETСброс целевого микроконтроллера
7SCKТактовый сигнал SPI
9MISOДанные от чипа к программатору
4, 6, 8, 10GNDОбщий провод

Если на целевой плате разъём 6-пиновый (AVR ISP), используйте переходник 10→6 pin — он часто идёт в комплекте с программатором. При самостоятельной распайке проводов главное правило: линии MOSI, MISO, SCK и RESET должны доходить до соответствующих выводов целевого чипа, а GND соединяться обязательно — без общей земли связь работать не будет.

⚠️ Внимание: перед подачей питания убедитесь, что перемычка выбора напряжения соответствует питанию целевой платы. Подача 5 В на плату, рассчитанную на 3,3 В, может повредить микроконтроллер или периферию.

Назначение перемычек JP1, JP2, JP3

На классической плате USBasp предусмотрены три перемычки, назначение которых часто вызывает вопросы:

  • 🔧 JP1 (Self-Programming / Firmware Update) — замыкается для перепрошивки самого программатора. В обычной работе должна быть разомкнута.
  • 🐢 JP2 (Slow SCK) — понижает тактовую частоту SPI. Нужна при прошивке чипов, работающих на низкой частоте (например, свежие ATtiny с внутренним RC-генератором 1 МГц). На многих клонах эта перемычка не распаяна, а функция реализована программно через параметр -B в AVRDUDE.
  • JP3 (Power Target / VCC Select) — выбор напряжения питания целевой платы (5 В или 3,3 В) либо отключение питания от программатора, если плата запитана самостоятельно.

Обозначения перемычек у разных производителей клонов могут отличаться — сверяйтесь с шелкографией и документацией конкретной платы. Если маркировки нет, ориентируйтесь по положению перемычки возле стабилизатора напряжения (это выбор питания) и возле чипа ATmega8 (это, как правило, перемычка обновления прошивки).

Установка драйверов в Windows

USBasp использует программную реализацию USB и не имеет собственного VID/PID от производителя ОС, поэтому Windows не ставит драйвер автоматически. Стандартное решение — утилита Zadig, которая подменяет драйвер устройства на libusb-win32 или libusbK.

Порядок действий:

☑️ Установка драйвера USBasp через Zadig

Выполнено: 0 / 6

После установки драйвера программатор готов к работе. В Диспетчере устройств он отображается как устройство libusb, а не как COM-порт — это нормально: USBasp не создаёт виртуальный последовательный порт, в отличие от Arduino-as-ISP.

⚠️ Внимание: Zadig заменяет драйвер выбранного устройства. Перед нажатием кнопки Install убедитесь, что в выпадающем списке выбран именно USBasp, а не мышь, клавиатура или флешка — иначе выбранное устройство перестанет работать до отката драйвера.

📊 Для каких задач вы используете USBasp?
Прошивка ATmega/ATtiny в своих устройствах
Восстановление микроконтроллеров после неудачной прошивки
Прошивка Arduino без загрузчика
Работа с RC-аппаратурой и прошивками регуляторов

Подключение к микроконтроллеру и прошивка через AVRDUDE

Классическая связка для работы с USBasp — консольная утилита AVRDUDE. Она входит в состав AVR Toolchain, Arduino IDE и доступна отдельно. Общий формат команды чтения флеш-памяти выглядит так:

avrdude -c usbasp -p m328p -U flash:r:dump.hex:i

Здесь -c usbasp указывает тип программатора, -p m328p — модель целевого чипа (в примере ATmega328P), а -U flash:r:dump.hex:i — операцию чтения флеш-памяти в файл формата Intel HEX. Для записи прошивки операция меняется на w:

avrdude -c usbasp -p m328p -U flash:w:firmware.hex:i

Точное имя чипа для параметра -p смотрите в выводе команды avrdude -c usbasp без указания чипа — утилита покажет список поддерживаемых устройств. Если идентификатор чипа не совпадает с указанным, AVRDUDE откажется работать — это защитная мера, и принудительный параметр -F стоит применять только осознанно.

Для тех, кто предпочитает графический интерфейс, существуют оболочки вроде AVRDUDESS или Khazama AVR Programmer — по сути это надстройки над тем же AVRDUDE, где операции выбираются мышью. В среде Arduino IDE USBasp выбирается в меню программаторов и используется через пункт загрузки скетча через программатор.

Про фьюзы (fuse bits) AVR

Фьюзы — это конфигурационные ячейки микроконтроллера, задающие источник тактирования, порог сброса, размер загрузчика и другие аппаратные настройки. Ошибочная запись фьюзов может перевести чип на внешний кварц, которого нет на плате, или отключить RESET — после этого обычный ISP-программатор чип уже не увидит. Перед записью фьюзов рассчитывайте их значения в проверенных онлайн-калькуляторах и сверяйтесь с даташитом конкретной модели.

Типичные ошибки и их решение

Разберём самые частые проблемы при работе с USBasp и способы их устранения.

«Could not find USB device usbasp». Утилита не видит сам программатор. Проверьте, установлен ли драйвер через Zadig, попробуйте другой USB-порт (желательно напрямую, без хаба) и другой кабель. В Диспетчере устройств устройство не должно иметь жёлтого восклицательного знака.

«Target doesn't answer. Initialization failed». Программатор работает, но целевой чип не отвечает. Возможные причины: перепутана распиновка ISP, нет общей земли, целевая плата не запитана, слишком высокая скорость SCK для текущей тактовой частоты чипа (снизьте её параметром -B или перемычкой Slow SCK), либо ранее были записаны фьюзы, отключающие RESET или SPI-программирование.

«Warning: cannot set sck period». Это предупреждение появляется на программаторах со старой прошивкой, не поддерживающей программное изменение скорости. Как правило, оно не мешает работе, но для устранения можно обновить прошивку самого USBasp с помощью второго программатора и перемычки JP1.

⚠️ Внимание: обновление прошивки USBasp требует второго рабочего программатора (или Arduino в режиме ArduinoISP). Неверно залитая прошивка превратит устройство в «кирпич», восстановить который без внешнего программатора не получится.

Ограничения USBasp и когда нужен другой программатор

USBasp поддерживает классические AVR-чипы с ISP-интерфейсом, но у него есть принципиальные ограничения. Новые семейства ATtiny 0/1/2-series и AVR DA/DB прошиваются по протоколу UPDI, который USBasp аппаратно не поддерживает. Микроконтроллеры ATxmega требуют интерфейса PDI — тоже вне возможностей этого устройства.

Для таких чипов понадобятся другие инструменты: Atmel-ICE, AVRISP mkII (для PDI), либо самодельные UPDI-программаторы на базе USB-UART адаптеров. Также USBasp не умеет высоковольтное программирование (HVSP/HVPP), поэтому чип с отключённым фьюзами выводом RESET им не восстановить — нужен высоковольтный программатор вроде специализированных DIY-схем.

Часто задаваемые вопросы

Можно ли прошить USBasp через Arduino IDE?

Да. Выберите в меню программаторов пункт USBasp, плату с нужным чипом (например, ATmega328P) и используйте загрузку через программатор. Удерживать кнопку сброса на целевой плате при этом не требуется — программатор управляет линией RESET самостоятельно.

Почему в Диспетчере устройств нет COM-порта для USBasp?

Это нормально. USBasp не эмулирует последовательный порт — он работает как USB-устройство класса libusb, и программы обращаются к нему напрямую по имени программатора, а не через COM-порт.

Может ли USBasp питать целевую плату?

Да, если перемычка питания установлена в положение 5 В или 3,3 В. Однако ток USB-порта ограничен, поэтому платы с мощной нагрузкой (двигатели, реле, яркие светодиодные матрицы) лучше питать отдельно, а перемычку питания снять, оставив только сигнальные линии и общую землю.

Что делать, если целевой чип не определяется даже на низкой скорости?

Проверьте мультиметром наличие питания на выводах VCC и GND чипа, целостность линий MOSI, MISO, SCK и RESET, а также отсутствие замыканий. Если ранее записывались фьюзы — возможно, чип переведён на внешний кварц (тогда временно подключите кварцевый резонатор) или отключён RESET (тогда поможет только высоковольтный программатор).

Подходит ли USBasp для прошивки микроконтроллеров STM32 или ESP32?

Нет. USBasp предназначен исключительно для AVR-архитектуры. STM32 прошиваются через ST-LINK или UART-загрузчик, ESP32 — через встроенный USB-UART интерфейс. Для этих платформ нужны соответствующие инструменты.