Ошибка target doesn't answer или initialization failed при попытке прошить ATmega128 через программатор USBasp почти всегда означает одно из трёх: неправильная распиновка ISP-разъёма, отсутствие питания на целевой плате или слишком высокая частота SCK для чипа с заводскими фьюзами. Прежде чем менять программатор или подозревать неисправность микроконтроллера, стоит последовательно проверить эти три пункта — в большинстве проблемных случаев причина находится именно там.
USBasp — это недорогой внутрисхемный программатор (ISP) для микроконтроллеров AVR, построенный на ATmega8 и работающий через USB без отдельного COM-порта. Он поддерживает широкий список чипов, включая ATmega128, и совместим с популярными утилитами вроде AVRDUDE, AVRDUDESS и среды Arduino IDE. В этой статье разберём подключение, установку драйверов, прошивку и диагностику типичных сбоев.
Что такое USBasp и чем он отличается от других программаторов
USBasp — открытый проект программатора, передающий данные по протоколу SPI через линии MOSI, MISO, SCK и RESET. В отличие от отладчиков вроде AVR JTAG ICE или Atmel-ICE, он не поддерживает пошаговую отладку — только запись и чтение памяти программ (Flash), EEPROM и фьюзов. Для задач «залить прошивку в ATmega128» этого достаточно.
На рынке встречаются две распространённые версии платы: с 10-пиновым разъёмом ISP (стандарт KANDA) и с 6-пиновым. Обе функционально одинаковы, отличается только разводка. Также существуют клоны с устаревшей прошивкой — они работают, но AVRDUDE может выдавать предупреждение о необходимости обновления firmware, которое в большинстве случаев можно игнорировать.
- 🔌 Питание цели: джампер на плате позволяет подать 5 В или 3,3 В на целевое устройство (на конкретных клонах реализация может отличаться — проверяйте мультиметром).
- 🐢 Медленный SCK: перемычка
JP(Slow SCK) снижает тактовую частоту — нужна для чипов с заводским делителем частоты. - 💾 Поддержка чипов: вся линейка ATmega, ATtiny и часть классических AT90, включая ATmega128.
- 🖥️ Совместимость: Windows, Linux и macOS через AVRDUDE без платных компонентов.
Установка драйвера USBasp в Windows
Windows не имеет встроенного драйвера для USBasp, поэтому программатор определяется как неизвестное устройство. Стандартное решение — утилита Zadig, которая подменяет драйвер на libusb-win32 или libusbK. Запустите Zadig, включите в меню Options → List All Devices, выберите USBasp в списке и нажмите установку драйвера.
После установки устройство не появится как COM-порт — это нормально. USBasp работает через libusb напрямую, и проверить его можно только попыткой чтения сигнатуры микроконтроллера. В Linux драйвер обычно не нужен вовсе, но может потребоваться правило udev для доступа без root-прав.
⚠️ Внимание: не устанавливайте драйвер WinUSB, если планируете использовать старые версии AVRDUDE — часть сборок работает только с libusb-win32. Если после установки программатор не виден, удалите устройство в диспетчере устройств вместе с драйвером и повторите процедуру через Zadig.
Подключение USBasp к ATmega128
У ATmega128 есть важная особенность, о которой часто забывают: линии программирования MOSI и MISO у этого чипа выведены на пины PE0 (MOSI/PDI) и PE1 (MISO/PDO), а не на привычные PB-пины, как у ATmega16 или ATmega32. Кроме того, тактирование при прошивке идёт через SCK (PB1). Неправильное подключение MOSI/MISO — одна из самых частых причин ошибки target doesn't answer именно с этой моделью.
Порядок безопасного подключения: сначала соедините все сигнальные линии при обесточенной схеме, затем подайте питание (либо с программатора через джампер, либо от внешнего источника на целевой плате — но не одновременно из двух источников с разными потенциалами), и только после этого подключайте USBasp к компьютеру.
| Сигнал ISP | Пин ATmega128 | Назначение |
|---|---|---|
| MOSI (PDI) | PE0 | Данные от программатора к чипу |
| MISO (PDO) | PE1 | Данные от чипа к программатору |
| SCK | PB1 | Тактовый сигнал программирования |
| RESET | RESET | Сброс, перевод в режим ISP |
| VCC / GND | VCC / GND | Питание целевой схемы |
⚠️ Внимание: если на целевой плате к линиям PE0/PE1 или RESET подключена периферия (дисплей, датчики, подтяжки), она может мешать программированию. При ошибках попробуйте временно отключить внешние цепи от этих пинов.
☑️ Проверка перед первой прошивкой ATmega128
Прошивка ATmega128 через AVRDUDE
Базовый инструмент для работы с USBasp — консольная утилита AVRDUDE. Сначала полезно проверить связь с чипом, просто прочитав сигнатуру без записи. Если сигнатура читается и совпадает с ожидаемой для ATmega128, значит, подключение корректно и можно переходить к записи прошивки.
avrdude -c usbasp -p m128 -U flash:w:firmware.hex:i
Здесь -c usbasp указывает тип программатора, -p m128 — целевой чип ATmega128, а параметр -U flash:w:firmware.hex:i задаёт запись hex-файла во Flash. Для чтения текущей прошивки в файл используйте -U flash:r:backup.hex:i. Тем, кто предпочитает графический интерфейс, подойдёт оболочка AVRDUDESS — она формирует те же команды визуально.
Если чип новый, с заводскими фьюзами, он тактируется от внутреннего RC-генератора с делителем, и штатная частота SCK программатора может оказаться слишком высокой. Установите перемычку Slow SCK на USBasp либо добавьте в команду параметр -B с увеличенным значением периода, например -B 10 или больше.
Типичные ошибки и их устранение
Разберём самые частые сообщения AVRDUDE. «target doesn't answer. initialization failed, rc=-1» — программатор не получает ответ от чипа: проверьте распиновку (особенно PE0/PE1 у ATmega128), питание цели и перемычку Slow SCK. «cannot find USB device» — проблема на стороне драйвера, возвращайтесь к Zadig.
Ошибка verification mismatch означает, что данные записались с искажениями: возможные причины — слишком длинные или некачественные провода ISP, помехи по питанию, слишком высокая частота SCK. Укоротите шлейф до разумной длины, снизьте скорость и повторите запись.
- 🧩 Неверная сигнатура: читается, но не совпадает с m128 — проверьте, тот ли чип указан в
-p, и нет ли на плате другого контроллера. - 🔋 Нет питания цели: джампер питания на USBasp не установлен, а внешний источник не подключён — чип просто обесточен.
- 🔒 Lock-биты: если чип ранее был защищён, запись будет недоступна — помогает стирание чипа (
-e), если оно не заблокировано. - ⚡ Просадка питания: питание целевой платы от USBasp не рассчитано на большую нагрузку — запитывайте плату отдельно.
⚠️ Внимание: будьте предельно аккуратны с записью фьюзов (lfuse,hfuse,efuse). Неверное значение фьюзов RSTDISBL или источника тактирования может сделать чип недоступным для ISP-программирования, и восстановление потребует высоковольтного параллельного программатора. Перед записью сверяйте значения с даташитом на ATmega128 или онлайн-калькулятором фьюзов.
Как обновить прошивку самого USBasp
Для обновления firmware клона USBasp нужен второй программатор (другой USBasp или Arduino как ISP). На плате USBasp устанавливается перемычка самопрограммирования (обычно обозначена JP/SELF PROG, расположение зависит от версии платы), после чего второй программатор записывает свежий hex проекта USBasp командой avrdude с указанием чипа atmega8. Обновление не обязательно: предупреждение «cannot set sck period» чаще всего безвредно и не мешает прошивке.
Особенности работы именно с ATmega128
Микросхема ATmega128 — один из старших представителей классического семейства AVR с 128 КБ Flash-памяти. Из-за объёма памяти полная запись и верификация через USBasp занимает заметное время — это нормально, не прерывайте процесс. Также учитывайте, что у этого чипа есть режим совместимости с ATmega103 (фьюз M103C), в котором часть функций ведёт себя иначе; если устройство после прошивки работает не так, как ожидалось, проверьте состояние этого фьюза.
Ещё один нюанс: линии программирования PDI/PDO у ATmega128 аппаратно совмещены с UART0 (PE0/PE1), поэтому если ваша прошивка активно использует последовательный порт на этих пинах, периферия на линии может конфликтовать с программатором. Развязка через резисторы или временное отключение нагрузки решает проблему.
Частые вопросы
Можно ли прошить ATmega128 программатором USBasp из Arduino IDE?
Да, если в IDE добавлено ядро с поддержкой ATmega128 (например, сторонние пакеты плат). В настройках выбирается программатор USBasp, после чего загрузка выполняется через пункт «Загрузить через программатор». Под капотом используется тот же AVRDUDE.
Почему AVRDUDE пишет «warning: cannot set sck period»?
Это предупреждение означает, что прошивка клона USBasp не поддерживает программную смену частоты SCK. На прошивку оно обычно не влияет — используйте аппаратную перемычку Slow SCK, если нужна низкая скорость.
USBasp не определяется в Windows 10/11. Что делать?
Установите драйвер через Zadig (libusb-win32 или libusbK), подключив программатор напрямую к порту USB без хаба. Если устройство ранее получило другой драйвер, удалите его в диспетчере устройств с отметкой «удалить драйвер» и повторите установку.
Чип перестал отвечать после записи фьюзов. Он испорчен?
Не обязательно. Вероятно, фьюзами выбран внешний источник тактирования, которого нет на плате, или отключён RESET. Попробуйте подать внешний тактовый сигнал на XTAL1 и прочитать чип снова. Если не помогло, восстановление возможно через высоковольтное параллельное программирование — для этого нужен соответствующий программатор.
Можно ли питать плату с ATmega128 от USBasp?
Можно, если потребление платы небольшое и джампер питания на программаторе установлен в нужное положение. Для плат с периферией, дисплеями или силовой нагрузкой используйте отдельный источник питания, а джампер питания на USBasp снимите.