USBasp AVR программатор определяется системой как устройство, но AVRDUDE выдаёт ошибку could not find USB device — чаще всего причина в отсутствующем драйвере libusb, а не в неисправности самого адаптера. Это типичная ситуация при первом подключении к Windows, и решается она за несколько минут без пайки и замены железа.
USBasp — это недорогой внутрисхемный программатор для микроконтроллеров Atmel AVR (ATmega, ATtiny и других), построенный на микросхеме ATmega8 и использующий программную реализацию USB. Он подключается к целевому контроллеру через интерфейс ISP (In-System Programming) и позволяет записывать прошивку, читать память, менять фьюзы прямо на готовой плате — будь то Arduino, самодельное устройство или плата 3D-принтера.
В этой статье разберём распиновку разъёмов, установку драйверов, работу с консольной утилитой и графическими оболочками, а также типовые ошибки и способы их диагностики.
Что такое USBasp и для чего он нужен
Программатор USBasp создан на базе открытого проекта Томаса Фишла (Thomas Fischl) и выпускается множеством производителей в виде готовых плат с разъёмом USB-A или USB Type-B. Внутри стоит ATmega8 (реже — ATmega48/88), а прошивка эмулирует USB-устройство программно, без отдельного USB-чипа вроде FTDI или CH340.
Основное назначение — прошивка микроконтроллеров AVR через шести- или десятипроводной ISP-кабель. Типовые задачи:
- 🔧 Запись загрузчика (bootloader) в чистые чипы ATmega328P для самодельных Arduino-совместимых плат.
- 🔧 Прошивка микроконтроллеров напрямую из
.hex-файлов, минуя загрузчик. - 🔧 Восстановление «залоченных» контроллеров после неверно выставленных фьюзов (частично — см. раздел про ошибки).
- 🔧 Обновление прошивок плат 3D-принтеров, радиолюбительских конструкций, контроллеров ЧПУ.
Важно понимать ограничение: USBasp работает только с линейкой AVR по протоколу ISP. Микроконтроллеры STM32, ESP8266/ESP32, ARM-чипы других семейств он не прошивает — для них нужны свои программаторы (ST-Link, J-Link, встроенные USB-загрузчики).
Распиновка и подключение к целевой плате
Большинство плат USBasp комплектуются 10-пиновым разъёмом IDC (стандарт KANDA), реже встречается 6-пиновый вариант. Сигналы в обоих случаях одинаковые, отличается только разводка. Основные линии ISP:
| Сигнал | Назначение | Куда идёт на AVR |
|---|---|---|
| MOSI | Данные от программатора к МК | Вывод MOSI (например, PB3 у ATmega328P) |
| MISO | Данные от МК к программатору | Вывод MISO (PB4 у ATmega328P) |
| SCK | Тактовый сигнал | Вывод SCK (PB5 у ATmega328P) |
| RESET | Сброс, перевод в режим программирования | Вывод RESET микроконтроллера |
| VCC / GND | Питание целевой платы | Шины питания целевого устройства |
Точные номера выводов MOSI/MISO/SCK зависят от конкретного микроконтроллера — сверяйтесь с даташитом именно вашей модели. У ATtiny85, например, это совсем другие ножки, чем у ATmega328P.
⚠️ Внимание: не подавайте питание на целевую плату одновременно от программатора и от внешнего источника. Если плата уже запитана своим блоком питания, джампер питания на USBasp лучше снять, оставив общий провод GND. Встречное питание может вывести из строя стабилизаторы или порты.
Порядок безопасного подключения: сначала соедините ISP-кабелем программатор и обесточенную целевую плату, проверьте совпадение GND, затем подключайте USB к компьютеру. Отключение — в обратном порядке.
Если шлейф в комплекте 10-пиновый, а на целевой плате 6-пиновый ISP (как у Arduino), удобно использовать переходник 10→6 либо подключиться отдельными проводами Dupont по схеме из даташита.
Джамперы на плате USBasp
На плате обычно расположены две-три перемычки, и их назначение стоит знать до начала работы:
- ⚙️ JP1 (питание) — подаёт +5 В с USB на целевую плату. Удобно для прошивки «голого» чипа на макетке.
- ⚙️ JP2 (slow SCK) — понижает тактовую частоту программирования. Нужен для чипов, работающих на низкой частоте, например свежих контроллеров с заводским внутренним RC-генератором.
- ⚙️ JP3 (self-programming) — переводит сам программатор в режим обновления его собственной прошивки. Для обычной работы не используется.
Разметка джамперов может отличаться у разных производителей клонов — ориентируйтесь на шелкографию конкретной платы. Если маркировка нечитаема, найдите описание именно вашей ревизии.
Самая частая причина ошибки target doesn't answer при прошивке нового чипа — слишком высокая частота SCK, и она лечится именно установкой джампера slow SCK либо ключом -B в AVRDUDE.
Установка драйверов на Windows
На Linux и macOS USBasp обычно работает из коробки благодаря встроенной поддержке libusb. А вот Windows требует ручной установки драйвера — система сама подходящего не находит, и в диспетчере устройств адаптер висит с восклицательным знаком либо вообще не определяется корректно.
Стандартный способ — утилита Zadig, которая подменяет драйвер на libusb:
☑️ Установка драйвера USBasp через Zadig
После установки проверить связь можно командой:
avrdude -c usbasp -p m328p
Если в ответ приходит сигнатура чипа (для ATmega328P это 0x1e950f) — программатор и драйвер работают, целевой контроллер отвечает. Если AVRDUDE сообщает, что не нашёл USB-устройство, вернитесь к Zadig и проверьте, тому ли устройству вы назначили драйвер.
⚠️ Внимание: в Zadig в списке устройств легко перепутать USBasp с мышью, клавиатурой или Bluetooth-адаптером. Установка libusb-драйвера на другое устройство отключит его до отката драйвера в диспетчере устройств. Перед нажатием Install сверьте название и USB ID.
Прошивка микроконтроллера через AVRDUDE
AVRDUDE — основная консольная утилита для работы с AVR-программаторами. Она входит в состав Arduino IDE, поэтому отдельная установка часто не нужна: исполняемый файл лежит в каталоге hardware/tools/avr/bin внутри установки Arduino.
Типовая команда записи прошивки во Flash-память выглядит так:
avrdude -c usbasp -p m328p -U flash:w:firmware.hex:i
Разберём параметры: -c usbasp задаёт тип программатора, -p m328p — модель целевого чипа, -U flash:w:файл:i — операцию записи (w) файла в формате Intel Hex (i) во Flash. Для чтения прошивки вместо w используется r, для верификации — v.
Кому-то удобнее графические оболочки поверх AVRDUDE — например, AVRDUDESS или SinaProg. Там те же операции выполняются через выбор файла и кнопки, без командной строки. Принцип и результат идентичны, поскольку оболочки лишь формируют вызов той же утилиты.
Как прошить фьюзы и зачем это нужно
Фьюзы (fuse bits) задают базовую конфигурацию МК: источник тактирования, размер области загрузчика, порог сброса по питанию. Записываются командами вида avrdude -c usbasp -p m328p -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m. Значения фьюзов строго индивидуальны для каждой модели и задачи — рассчитывайте их по даташиту или через онлайн-калькулятор фьюзов. Ошибочная запись может отключить ISP-интерфейс, поэтому без понимания каждого бита фьюзы лучше не трогать.
Типичные ошибки и их диагностика
Проблемы с USBasp в подавляющем большинстве случаев сводятся к нескольким повторяющимся сценариям. Разберём их по симптомам.
«could not find USB device» — утилита не видит сам программатор. Проверьте драйвер через Zadig, попробуйте другой USB-порт (желательно USB 2.0 напрямую, без хабов), замените кабель. Дешёвые кабели «только для зарядки» без линий данных — частая скрытая причина.
«target doesn't answer» или «initialization failed» — программатор виден, но целевой чип молчит. Здесь вариантов несколько:
- 🔍 Перепутаны или не пропаяны линии MOSI/MISO/SCK/RESET — прозвоните шлейф мультиметром.
- 🔍 Целевая плата обесточена — проверьте наличие питания на выводах VCC микроконтроллера.
- 🔍 Чип тактируется слишком медленно для текущей частоты SCK — поставьте джампер slow SCK или добавьте ключ
-B 10(и выше) в команду. - 🔍 Ранее были записаны фьюзы на внешний кварцевый резонатор, которого на плате нет — чип не стартует без тактирования.
Несовпадение сигнатуры — AVRDUDE ожидал один чип, а прочитал другой. Либо неверно указан параметр -p, либо на плате стоит не та модель (например, ATmega328 вместо ATmega328P — у них разные сигнатуры). Принудительный ключ -F, который советуют на форумах, используйте осознанно: он отключает проверку, и прошивка может лечь «криво».
Диагностику всегда начинайте с простого: драйвер → кабель → питание целевой платы → распиновка ISP → частота SCK. В такой последовательности закрывается почти весь спектр типовых отказов.
Отдельный случай — контроллер, «залоченный» фьюзом RSTDISBL (вывод RESET переназначен в порт ввода-вывода) или прошитый на внешний генератор без кварца. ISP в таком состоянии недоступен, и USBasp тут бессилен: потребуется высоковольтный параллельный программатор (HVPP/HVSP) или специальная «докторская» плата для сброса фьюзов.
Обновление прошивки самого USBasp
Старые клоны USBasp иногда ругаются предупреждением cannot set SCK period — это признак устаревшей прошивки самого программатора. Работать он при этом обычно продолжает, но обновление прошивки устраняет предупреждение и добавляет программное управление частотой SCK.
Для перепрошивки нужен второй ISP-программатор (подойдёт другой USBasp или Arduino, прошитая скетчем ArduinoISP). Порядок общий: установить джампер self-programming, подключить второй программатор к ISP-разъёму прошиваемого USBasp и записать свежий .hex с сайта проекта. Конкретные файлы прошивки и их совместимость с вашей ревизией платы проверяйте на странице проекта Томаса Фишла — для клонов с другими контроллерами (ATmega88 вместо ATmega8) файл может отличаться.
Если второго программатора нет, а предупреждение про SCK не мешает работе — обновление можно отложить. Прошивка целевых чипов от этого предупреждения не страдает.
Альтернативы USBasp
USBasp — не единственный способ прошивать AVR, и в ряде сценариев удобнее другое решение. Плата Arduino Uno/Nano со скетчем ArduinoISP превращается в полноценный ISP-программатор без дополнительных покупок. Программаторы AVRISP mkII и его клоны поддерживаются фирменной средой Microchip Studio. Для отладки, а не только прошивки, существуют инструменты с поддержкой JTAG и debugWIRE.
Тем не менее по соотношению цены и простоты USBasp остаётся рабочей классикой для задач «прошить и забыть»: никакой настройки среды, минимум обвязки, прямая поддержка в AVRDUDE и Arduino IDE.
USBasp — оптимальный выбор для записи прошивок и загрузчиков в AVR. Для отладки кода, работы с ARM/ESP или оживления залоченных фьюзами чипов понадобятся другие инструменты.
Часто задаваемые вопросы
Можно ли прошить Arduino через USBasp?
Да. Подключите USBasp к 6-пиновому ISP-разъёму платы Arduino и используйте AVRDUDE или пункт «Записать загрузчик» в Arduino IDE с выбранным программатором USBasp. Учтите: прошивка через ISP стирает загрузчик, и заливка скетчей по USB после этого станет невозможной, пока загрузчик не будет записан обратно.
Почему AVRDUDE пишет «cannot set SCK period»?
Это предупреждение означает, что прошивка программатора старая и не поддерживает программную смену частоты SCK. Обычно работе оно не мешает. Убрать его можно обновлением прошивки USBasp либо установкой аппаратного джампера slow SCK, если проблема проявляется с медленными чипами.
Работает ли USBasp с ATtiny85?
Да, вся линейка ATtiny с поддержкой ISP прошивается через USBasp. Подключение — по тем же сигналам MOSI/MISO/SCK/RESET/VCC/GND, но номера выводов смотрите в даташите ATtiny85: они отличаются от ATmega. Для новых чипов с заводской тактовой частотой может понадобиться пониженная частота SCK.
USBasp не определяется в Windows 10/11. Что делать?
Установите драйвер через утилиту Zadig, выбрав libusb-win32 или libusbK для устройства USBasp (включив предварительно показ всех устройств в меню Options). Проверьте кабель и порт: кабель должен быть с линиями данных, порт — желательно без промежуточных хабов.
Можно ли восстановить AVR с испорченными фьюзами через USBasp?
Только в лёгких случаях: если чип не стартует из-за фьюзов на внешний кварц, иногда помогает временная подача тактового сигнала на вывод XTAL1 от внешнего генератора. Если же отключён RESET (фьюз RSTDISBL) или запрещено ISP-программирование, потребуется высоковольтный программатор — USBasp здесь не поможет.