Ошибка error: program enable: target doesn't answer при работе с USBasp нередко указывает на устаревшую прошивку программатора, которая не поддерживает нужную скорость SCK или конфликтует с новыми версиями avrdude. Обновление прошивки USBasp — рабочий способ устранить подобные сбои, но процедура требует второго программатора: USBasp не умеет обновлять сам себя.
В этой инструкции разберём, как определить, что обновление действительно нужно, где брать прошивку, как перевести устройство в режим самопрограммирования и какие команды выполнить. Материал подходит для классических клонов USBasp на микроконтроллерах ATmega8 и ATmega88.
Когда нужно обновлять прошивку USBasp
Не каждая проблема с программатором решается перепрошивкой. Сначала убедитесь, что признаки указывают именно на устаревшее ПО устройства, а не на неисправность кабеля или целевой платы.
- 🔧 avrdude выдаёт предупреждение вида
warning: cannot set sck periodи отказывается работать с некоторыми контроллерами. - 🐌 Программатор не может прошить целевой чип на низкой тактовой частоте, а перемычка slow SCK на плате отсутствует или не помогает.
- 📦 В сообщениях avrdude фигурирует устаревшая версия прошивки — проверить её можно при любом обращении к устройству, утилита выводит версию в лог.
- ⚡ Целевой микроконтроллер исправен и отвечает через другой программатор, но USBasp его «не видит».
Если же устройство вообще не определяется системой, причина чаще в драйвере (на Windows обычно решается установкой libusb-драйвера через Zadig) или в аппаратной неисправности — прошивка тут ни при чём.
Что понадобится для обновления
Подготовьте всё заранее, чтобы не прерывать процесс на середине. Список короткий, но каждый пункт обязателен.
- 🖥️ Второй ISP-программатор: ещё один USBasp, AVRISP mkII, USBtinyISP или Arduino, прошитая скетчем ArduinoISP.
- 🔌 Шлейф ISP 6 или 10 пин для соединения двух программаторов.
- 💾 Файл прошивки с официального сайта проекта USBasp (архив содержит готовые
.hexпод разные микроконтроллеры). - ⚙️ Установленная утилита avrdude — она входит в состав Arduino IDE и распространяется отдельно.
Важно правильно выбрать файл прошивки: он должен соответствовать микроконтроллеру на плате вашего USBasp. Чаще всего это ATmega8, реже — ATmega48/88. Маркировка читается на корпусе чипа. Прошивка от другого контроллера просто не заработает.
Выбор и загрузка файла прошивки
Прошивки распространяются автором проекта USBasp в виде архива с несколькими вариантами под разные чипы и частоты кварца. Скачивать стоит только с официального ресурса проекта — сторонние «сборки» могут содержать ошибки или модификации, совместимость которых не гарантирована.
Внутри архива имена файлов обычно содержат указание на контроллер, например вариант для ATmega8. Если на плате установлен кварц на 12 МГц — это стандартная конфигурация, под неё и собраны основные бинарники. Сомневаетесь в частоте — посмотрите маркировку кварцевого резонатора рядом с чипом.
Перевод USBasp в режим самопрограммирования
Чтобы USBasp принял новую прошивку, его нужно перевести в режим, при котором он сам становится целевым устройством. Для этого на плате предусмотрен джампер, обычно подписанный как JP с пометкой self programming или похожей. На разных клонах маркировка отличается: встречаются варианты J2, JP1, SELF.
На дешёвых клонах контактные площадки джампера бывают не распаяны — тогда потребуется аккуратно припаять перемычку или штыревую вилку. Расположение площадок смотрите в документации к вашей ревизии платы или на шелкографии.
⚠️ Внимание: замыкайте только джампер самопрограммирования. Перемычка питания (выбор 5V/3.3V) и джампер slow SCK выполняют другие функции, их состояние на процесс обновления не влияет.
- Отключите оба программатора от USB.
- Установите перемычку самопрограммирования на обновляемом USBasp.
- Соедините ISP-разъёмы двух программаторов шлейфом, соблюдая распиновку (MOSI к MOSI, MISO к MISO, SCK к SCK, RESET, VCC, GND).
- Подключите к компьютеру именно «мастер» — тот программатор, который будет прошивать.
☑️ Готовность к прошивке USBasp
Прошивка через avrdude
Дальнейшие действия выполняются в командной строке. Сначала убедитесь, что мастер-программатор видит целевой чип — выполните чтение сигнатуры:
avrdude -c usbasp -p m8
Здесь -p m8 указывает на ATmega8; для ATmega88 используйте m88. Если в ответ пришла корректная сигнатура — связь есть, можно прошивать. Если avrdude сообщает об ошибке инициализации, проверяйте шлейф и перемычку, не переходя к записи.
Команда записи прошивки выглядит так:
avrdude -c usbasp -p m8 -U flash:w:usbasp.atmega8.xxxx.hex:i
Имя hex-файла подставьте своё. После завершения записи avrdude автоматически выполнит верификацию — строка verified подтверждает, что прошивка легла корректно. Фьюзы при штатном обновлении трогать не нужно: они уже выставлены загрузчиком устройства, и изменение без понимания их значений может вывести контроллер из строя.
⚠️ Внимание: не прерывайте процесс записи и не отключайте шлейф до появления сообщения об успешной верификации. Обрыв на середине оставит устройство с повреждённой прошивкой, и восстановить его можно будет только тем же способом — через внешний программатор.
Что делать, если avrdude не видит целевой чип
Проверьте, что питание целевой платы подаётся — многие USBasp питают цель от своего VCC, но на некоторых клонах эта линия отключаемая. Убедитесь, что шлейф не перевернут: контакт 1 обычно помечен треугольником или полоской. Попробуйте добавить ключ -B для снижения скорости, например -B 10, если мастер поддерживает настройку SCK.
Проверка результата и снятие перемычки
После успешной верификации отключите обновлённый USBasp от шлейфа, снимите перемычку самопрограммирования и подключите устройство к компьютеру напрямую. Запустите любое обращение через avrdude — в выводе появится версия прошивки, она должна соответствовать только что записанной.
Финальная проверка — реальная прошивка целевого микроконтроллера, с которым раньше наблюдались проблемы. Если обновление выполнялось из-за ошибки SCK, убедитесь, что предупреждение исчезло и запись проходит на нужной скорости.
Типичные ошибки и их решение
| Симптом | Вероятная причина | Действие |
|---|---|---|
| target doesn't answer при прошивке USBasp | Нет перемычки self-programming или перепутан шлейф | Проверить джампер и распиновку ISP |
| verification error после записи | Плохой контакт шлейфа, помехи | Пересоединить шлейф, повторить запись |
| Устройство не определяется ПК после прошивки | Записан hex не под тот контроллер | Прошить корректный файл повторно |
| cannot set sck period остаётся | Прошивка не обновилась или старая версия файла | Сверить версию в выводе avrdude |
| avrdude не находит мастер-программатор | Драйвер не установлен (Windows) | Установить драйвер через Zadig |
Если после повторной записи корректного файла устройство всё равно не работает, возможна аппаратная неисправность платы — например, вышедший из строя стабилизатор или повреждённые дорожки. В таком случае перепрошивка проблему не решит.
FAQ: частые вопросы об обновлении USBasp
Можно ли обновить USBasp без второго программатора?
Нет. USBasp не поддерживает самообновление через USB — для записи новой прошивки требуется внешний ISP-программатор. Подойдёт второй USBasp, Arduino с скетчем ArduinoISP или любой другой ISP-совместимый инструмент.
Нужно ли менять фьюзы при обновлении прошивки?
В штатной процедуре — нет. Фьюзы уже корректно выставлены на работающем устройстве. Менять их без точного понимания значений опасно: неверная комбинация может заблокировать контроллер.
Как узнать текущую версию прошивки USBasp?
Подключите программатор к ПК и выполните любое обращение через avrdude, например чтение сигнатуры целевого чипа. Утилита выводит версию прошивки программатора в служебных строках лога.
Что делать, если на плате нет джампера self-programming?
На многих клонах предусмотрены только контактные площадки без штыревой вилки. Их нужно замкнуть припаянной перемычкой на время прошивки, а после — убрать. Расположение площадок уточняйте по шелкографии конкретной платы.
Подойдёт ли прошивка от ATmega8 для платы на ATmega88?
Нет, бинарные файлы собраны под конкретный микроконтроллер и несовместимы между моделями. Используйте только hex-файл, соответствующий чипу на вашей плате.