Ошибка 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 В, и не подключайте питание программатора к плате, у которой уже есть собственный источник, без проверки схемы — возможен конфликт источников питания.
☑️ Проверка перед первой прошивкой
Прошивка микроконтроллера через 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
Если командная строка неудобна, существуют 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 потребует его повторной записи.