USBasp: как пользоваться программатором для микроконтроллеров AVR

Ошибка could not find USB device USBasp при первом запуске avrdude почти всегда означает, что драйвер программатора в Windows не установлен или установлен некорректно — само устройство при этом может быть полностью исправно. USBasp не создаёт виртуальный COM-порт, поэтому стандартные способы проверки через Диспетчер устройств здесь работают иначе, чем с Arduino.

В этой статье разберём полный цикл работы с USBasp: от установки драйвера и подключения к микроконтроллеру до прошивки через avrdude и графические оболочки. Отдельно рассмотрим типичные ошибки и способы их диагностики.

Что такое USBasp и для чего он нужен

USBasp — это недорогой ISP-программатор для микроконтроллеров семейства AVR (ATmega, ATtiny), построенный на чипе ATmega8. Он подключается к компьютеру по USB и прошивает целевой контроллер через интерфейс ISP по линиям MOSI, MISO, SCK и RESET.

Типичные задачи, для которых используют USBasp:

  • 🔧 Запись прошивки в «голый» микроконтроллер ATmega или ATtiny без платы Arduino.
  • ⚙️ Загрузка или восстановление bootloader на платах Arduino.
  • 💾 Чтение и запись Flash- и EEPROM-памяти, установка конфигурационных fuse-битов.
  • 🔄 Перепрошивка самого USBasp при обновлении его внутреннего ПО.

Важно понимать ограничение: USBasp работает через интерфейс ISP, поэтому он не подходит для микроконтроллеров других архитектур (например, STM32 или ESP8266), если только не используется со специальной альтернативной прошивкой — это уже нестандартный сценарий.

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

Главный этап, на котором спотыкается большинство пользователей. Windows не имеет встроенного драйвера для USBasp, поэтому устройство в Диспетчере устройств может отображаться с восклицательным знаком или как неизвестное USB-устройство.

Наиболее простой способ — утилита Zadig, которая ставит драйвер libusb без ручного поиска inf-файлов. Порядок действий:

  • 🖥️ Подключите USBasp к USB-порту компьютера напрямую, без хабов.
  • 📥 Запустите Zadig от имени администратора.
  • 🔍 В меню Options включите пункт List All Devices и выберите в списке USBasp.
  • ✅ Убедитесь, что в поле драйвера выбран libusbK или libusb-win32, и нажмите Install Driver.
⚠️ Внимание: в Zadig критично выбрать именно USBasp, а не другое USB-устройство. Установка libusb-драйвера на мышь или клавиатуру приведёт к тому, что они перестанут работать до отката драйвера.

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

Подключение USBasp к микроконтроллеру

Программатор имеет 10-пиновый (реже 6-пиновый) разъём ISP. Для прошивки нужно соединить пять сигнальных линий и питание. Распиновка стандартного 10-пинового разъёма ISP:

СигналНазначениеКуда подключается на МК
MOSIДанные к контроллеруВывод MOSI целевого чипа
MISOДанные от контроллераВывод MISO целевого чипа
SCKТактовый сигналВывод SCK целевого чипа
RESETСброс, вход в режим программированияВывод RESET
VCC / GNDПитание целевой схемыПитание и земля платы

На многих платах USBasp есть перемычка выбора напряжения питания целевой схемы — обычно 5 В или 3,3 В. Установите её в соответствии с питанием вашего микроконтроллера. Если целевая плата запитана отдельно, линию VCC от программатора можно не подключать, но GND общий обязателен.

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

☑️ Проверка перед первой прошивкой

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

Прошивка микроконтроллера через avrdude

Классический инструмент для работы с USBasp — консольная утилита avrdude. Она входит в состав Arduino IDE и распространяется отдельно. Базовая команда записи hex-файла во Flash выглядит так:

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

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

Если чип не определяется, сначала выполните диагностическую команду без операций записи — она только считает сигнатуру микроконтроллера:

avrdude -c usbasp -p m328p

Успешный ответ содержит строку с сигнатурой устройства. Если вместо неё появляется target doesn't answer, проблема в подключении, питании или состоянии самого чипа, а не в драйвере.

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

Графические программы для USBasp

Если командная строка неудобна, существуют GUI-оболочки, которые фактически формируют команды для avrdude за вас. Среди известных — AVRDUDESS и Khazama AVR Programmer. В них вы выбираете программатор, модель чипа и hex-файл через интерфейс, а операции записи и верификации запускаются кнопками.

Также USBasp поддерживается в Arduino IDE: программатор выбирается в меню Инструменты → Программатор → USBasp, после чего доступна загрузка скетча через пункт Скетч → Загрузить через программатор. Это удобный способ записать программу в чип без bootloader.

Что такое fuse-биты и почему с ними осторожно

Fuse-биты задают базовые настройки микроконтроллера: источник тактирования, включение сторожевого таймера, защиту от чтения. Неверная запись fuse (например, выбор внешнего кварца, которого нет на плате) может сделать чип недоступным для обычного ISP-программирования. Перед изменением fuse-битов сверяйтесь с даташитом на конкретный чип и используйте проверенные калькуляторы fuse.

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

Разберём сообщения, которые чаще всего появляются при работе с USBasp, и что проверять в каждом случае.

  • 🔌 could not find USB device USBasp — драйвер не установлен либо устройство обесточено. Проверьте установку через Zadig и попробуйте другой USB-порт.
  • 📡 target doesn't answer — нет связи с чипом: проверьте распиновку MOSI/MISO/SCK/RESET, питание целевой схемы и целостность проводов.
  • 🆔 device signature mismatch — в команде указана неверная модель чипа. Считайте сигнатуру и сверьте её с реальным контроллером.
  • 🐢 Предупреждение cannot set sck period — старая прошивка самого USBasp; на работу обычно не влияет, но при нестабильной связи с «медленными» чипами стоит замкнуть перемычку slow SCK (если она есть на плате).

Отдельный случай — свежий микроконтроллер с завода, тактируемый от внутреннего генератора на низкой частоте. Для него может потребоваться пониженная скорость SCK: либо перемычка на плате программатора, либо параметр -B в avrdude, если прошивка USBasp его поддерживает.

Как обновить прошивку самого USBasp

Иногда программатор требует обновления внутреннего ПО — например, для корректной работы параметра скорости или совместимости с новыми версиями avrdude. Для этого нужен второй ISP-программатор (другой USBasp или Arduino в режиме ArduinoISP): USBasp не может прошить сам себя.

На плате замыкается перемычка самопрограммирования (часто обозначается как JP или self-programming — название зависит от ревизии платы, сверяйтесь с её документацией), после чего второй программатор записывает новую прошивку в ATmega8. Исходники и готовые hex-файлы публикуются автором проекта USBasp.

⚠️ Внимание: перед перепрошивкой USBasp сохраните текущее содержимое его Flash-памяти командой чтения — это даст возможность откатиться, если новая прошивка окажется несовместимой с вашей ревизией платы.

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

Почему USBasp не появляется как COM-порт?

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

Можно ли прошивать USBasp микроконтроллеры ATtiny?

Да, ATtiny с поддержкой ISP (например, ATtiny13, ATtiny85) прошиваются тем же способом — через MOSI, MISO, SCK и RESET. В avrdude указывается соответствующий идентификатор чипа, например -p t85.

Что делать, если avrdude пишет «target doesn't answer»?

Проверьте правильность подключения четырёх сигнальных линий и общего GND, наличие питания на целевом чипе и корректность указанной модели контроллера. Если чип новый, попробуйте снизить скорость SCK перемычкой или параметром -B.

Нужно ли внешнее питание для прошиваемой платы?

Не обязательно: USBasp может питать целевую схему через линию VCC, если потребление платы невелико. Для схем с заметной нагрузкой лучше использовать собственный источник питания платы, а от программатора подключить только сигнальные линии и GND.

Работает ли USBasp с Arduino IDE?

Да. Выберите Инструменты → Программатор → USBasp и загружайте скетч через Скетч → Загрузить через программатор. Учтите: загрузка через ISP стирает bootloader, и обратная заливка по USB потребует его повторной записи.