Ошибка 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
⚠️ Внимание: неверные значения фьюзов — самая частая причина «окирпичивания» ATmega8. Если случайно переключить чип на несуществующий источник тактирования или отключить RESET, оживить его обычным ISP-программатором уже не получится — потребуется высоковольтный программатор (HVPP). Значения фьюзов для вашей конкретной платы сверяйте с документацией проекта USBasp, а не копируйте вслепую.
Проверка результата и типичные ошибки
После записи прошивки и фьюзов снимите перемычку 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-файлы для каждого поддерживаемого микроконтроллера. Заливка «чужого» файла приведёт к нерабочему устройству, которое придётся перепрошивать заново.