Ошибка error: program enable: target doesn't answer при работе с USBasp чаще всего указывает не на неисправность целевого микроконтроллера, а на устаревшую прошивку самого программатора — старые версии микропрограммы не поддерживают автоматическое снижение скорости SPI для «медленных» чипов. Решение — перепрошить ATmega8, стоящий внутри USBasp, на актуальную версию прошивки от Thomas Fischl. Для этого понадобится второй рабочий программатор: USBasp не может прошить сам себя.

В этой статье разберём, как определить необходимость обновления, какие перемычки установить на плате, какую команду ввести в avrdude и как проверить результат. Материал подходит для классических клонов USBasp на ATmega8 и ATmega8A, а также для плат на ATmega48/88 — различия оговорены отдельно.

Когда нужно прошивать ATmega8 в USBasp

Сам по себе программатор не «изнашивается» — прошивка внутри него не деградирует со временем. Обновление требуется в конкретных ситуациях, и стоит сначала убедиться, что проблема именно в микропрограмме, а не в проводах или целевой плате.

  • 🔧 Ошибка «target doesn't answer» при прошивке новых чипов с заводским тактированием 1 МГц — старая прошивка не умеет снижать скорость SCK автоматически.
  • 🐢 Отсутствие опции -B (slow SCK) в старых версиях — avrdude выдаёт предупреждение warning: cannot set sck period.
  • 💾 Покупка «пустой» платы или замена ATmega8 — новый чип требует заливки прошивки USBasp с нуля.
  • 🧱 Программатор «окирпичен» неудачной прошивкой или залит некорректным hex-файлом.

Если программатор стабильно шьёт ваши микроконтроллеры без ошибок, обновлять его «на всякий случай» не обязательно. Риск неудачной перепрошивки хоть и невелик, но существует, и без второго программатора восстановить устройство будет сложно.

Что понадобится для прошивки

Ключевое требование: для записи прошивки в ATmega8 внутри USBasp нужен второй ISP-программатор. Это может быть другой USBasp, Arduino с скетчем ArduinoISP, AVRISP mkII, STK500-совместимый программатор или даже самодельный вариант на LPT-порту для старых ПК.

Помимо программатора, подготовьте:

  • 💻 Компьютер с установленным avrdude (входит в состав Arduino IDE и WinAVR, доступен отдельно для Windows, Linux и macOS).
  • 📄 Файл прошивки usbasp.atmega8.xxxx-xx-xx.hex с официального сайта проекта USBasp (fischl.de) — брать сторонние «модифицированные» hex-файлы без проверки не стоит.
  • 🔌 Шлейф ISP 10-pin или 6-pin для соединения двух программаторов, либо перемычки «мама-мама» при разных разъёмах.
  • 🔍 Лупу или хорошее освещение — перемычки на плате мелкие, и путать их нельзя.
💡

Если второго программатора нет, самый дешёвый вариант — Arduino Uno/Nano с загруженным примером ArduinoISP. Она работает как полноценный ISP-программатор и определяется avrdude как stk500v1.

Подготовка платы: перемычки и подключение

На платах USBasp обычно присутствуют три джампера, но их маркировка и даже наличие зависят от конкретного клона — китайские платы часто отличаются от оригинальной схемы. Сверьтесь с шелкографией своей платы.

ПеремычкаНазначениеСостояние при прошивке ATmega8
JP1 (иногда J3)Подача питания 5 В на целевую платуЗамкнуть, если второй программатор не питает USBasp
JP2 (иногда J1)Снижение скорости SCK (Slow SCK)Рекомендуется замкнуть при прошивке «медленных» чипов
JP3 (иногда J2)Разрешение самопрограммирования (Self programming)Обязательно замкнуть — без этого чип не примет прошивку

Критична именно перемычка Self programming: она соединяет линию RESET разъёма ISP с выводом RESET собственного ATmega8. Без неё внешний программатор будет подавать сигнал сброса «в никуда», и avrdude вернёт ошибку инициализации.

⚠️ Внимание: на многих дешёвых клонах USBasp площадки под перемычку JP3/J2 не распаяны — есть только дорожки. В этом случае нужно либо припаять перемычку из провода, либо аккуратно замкнуть площадки каплей припоя на время прошивки. Перед пайкой проверьте мультиметром, какая площадка соединена с выводом RESET (нога 1 ATmega8 в корпусе DIP).

Питание можно организовать двумя способами: либо прошиваемый USBasp вставлен в USB-порт компьютера (тогда он запитан, а второй программатор подключается только сигнальными линиями), либо питание подаёт программирующий программатор через ISP-разъём. Оба устройства не должны одновременно подавать питание на одну и ту же линию VCC — выберите один источник.

Пошаговая инструкция по прошивке через avrdude

После подключения вся работа выполняется из командной строки. Пример ниже предполагает, что прошивающий программатор — Arduino с скетчем ArduinoISP на порту COM5; для второго USBasp замените -c arduino на -c usbasp без указания порта.

Шаг 1 — проверка связи с чипом. Команда только читает сигнатуру и ничего не записывает:

avrdude -c arduino -p m8 -P COM5 -b 19200

В ответ должна появиться строка с сигнатурой устройства 0x1e9307 — это сигнатура ATmega8. Если вместо неё 0x000000 или 0xffffff, проблема в подключении: проверьте перемычку Self programming, целостность шлейфа и правильность распиновки MOSI/MISO/SCK.

Шаг 2 — запись прошивки:

avrdude -c arduino -p m8 -P COM5 -b 19200 -U flash:w:usbasp.atmega8.2011-05-28.hex:i

Шаг 3 — установка фьюзов. Прошивка USBasp рассчитана на работу от внешнего кварцевого резонатора, поэтому фьюзы должны быть сконфигурированы соответствующим образом. Типичный набор для оригинальной схемы: hfuse=0xC9, lfuse=0xEF.

avrdude -c arduino -p m8 -P COM5 -b 19200 -U hfuse:w:0xC9:m -U lfuse:w:0xEF:m

☑️ Проверка перед нажатием Enter

Выполнено: 0 / 5
⚠️ Внимание: неверные значения фьюзов — самая частая причина «окирпичивания» ATmega8. Если случайно переключить чип на несуществующий источник тактирования или отключить RESET, оживить его обычным ISP-программатором уже не получится — потребуется высоковольтный программатор (HVPP). Значения фьюзов для вашей конкретной платы сверяйте с документацией проекта USBasp, а не копируйте вслепую.
📊 Каким программатором вы прошиваете USBasp?
Второй USBasp
Arduino с ArduinoISP
AVRISP / STK500
Пока только выбираю способ

Проверка результата и типичные ошибки

После записи прошивки и фьюзов снимите перемычку Self programming, отключите внешний программатор и вставьте USBasp в USB-порт. Операционная система должна определить устройство как USBasp — в Windows для этого понадобится драйвер libusb (обычно устанавливается через Zadig), в Linux устройство работает сразу, но могут потребоваться права или правило udev.

Финальная проверка — попытка прочитать сигнатуру любого подключённого целевого микроконтроллера командой avrdude -c usbasp -p m328p. Если сигнатура читается стабильно и предупреждение о невозможности установить SCK исчезло — обновление прошло успешно.

Возможные проблемы после прошивки:

  • Программатор не определяется в системе — проверьте фьюзы: если чип настроен не на тот источник тактирования, а кварц на плате есть, устройство «молчит». Также проверьте целостность линий D+ и D−.
  • 🔁 Устройство определяется, но не шьёт — вероятно, залит hex не для того микроконтроллера (например, версия для ATmega48 вместо ATmega8).
  • Сигнатура читается как 0x000000 — проблема уже в соединении с целевым чипом, а не в самом USBasp; проверяйте шлейф и питание целевой платы.
Отличия плат на ATmega48 и ATmega88

Некоторые клоны USBasp собраны на ATmega48 или ATmega88 вместо ATmega8. Для них нужен свой hex-файл из архива прошивки (имя файла содержит atmega48 или atmega88), а сигнатуры чипов другие: у ATmega48 — 0x1e9205, у ATmega88 — 0x1e930a. В команде avrdude параметр -p меняется на m48 или m88 соответственно.

Альтернативные прошивки и стоит ли их ставить

Помимо оригинальной прошивки Thomas Fischl существуют сторонние модификации — например, версии с поддержкой TPI и PDI для прошивки микроконтроллеров tinyAVR и Xmega. Они расширяют возможности программатора, но распространяются без гарантий, и совместимость с конкретной версией avrdude нужно проверять опытным путём.

Если ваша задача — прошивка классических ATmega и ATtiny, оригинальная прошивка последней версии покрывает её полностью. Сторонние сборки имеет смысл рассматривать только при явной потребности в дополнительных интерфейсах.

💡

Главное правило: прошивать USBasp нужно только при реальной необходимости, всегда вторым программатором, с замкнутой перемычкой Self programming и с фьюзами, проверенными по документации именно вашей платы.

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

Можно ли прошить USBasp без второго программатора?

Нет, штатными средствами — нельзя. USBasp не умеет обновлять собственную прошивку через USB. Единственный обходной путь — если в чип предварительно залит bootloader, но стандартная прошивка USBasp его не содержит. Поэтому второй ISP-программатор (или Arduino с ArduinoISP) обязателен.

Как узнать версию текущей прошивки USBasp?

При подключении к целевому чипу avrdude иногда выводит предупреждение вида warning: cannot set sck period. please check for usbasp firmware update — это косвенный признак старой версии. Прямого способа запросить номер версии через avrdude нет; ориентируйтесь на наличие или отсутствие этого предупреждения.

Что делать, если после прошивки USBasp не определяется компьютером?

Сначала проверьте фьюзы — чип должен тактироваться от внешнего кварца, который установлен на плате. Если фьюзы выставлены на внутренний RC-генератор, USB работать не будет. Также убедитесь, что залит hex именно для вашего микроконтроллера, и проверьте пайку линий USB.

Можно ли использовать USBasp для прошивки самого себя через перемычку?

Нет. Перемычка Self programming лишь разрешает внешнему программатору достучаться до внутреннего ATmega8 — сам процесс записи всё равно выполняет другое устройство. Подключение USBasp к собственному ISP-разъёму результата не даст.

Подойдёт ли прошивка от ATmega8 для платы на ATmega88?

Нет, прошивки не взаимозаменяемы — у чипов разная периферия и карта памяти. В архиве проекта USBasp лежат отдельные hex-файлы для каждого поддерживаемого микроконтроллера. Заливка «чужого» файла приведёт к нерабочему устройству, которое придётся перепрошивать заново.