Как прошить программатор USBasp без второго программатора

Обновить прошивку USBasp без второго ISP-программатора реально: микроконтроллер ATmega8 (или ATmega88) внутри устройства можно прошить через Arduino в режиме Arduino as ISP, через плату Raspberry Pi по GPIO либо через встроенный загрузчик, если он уже записан в память чипа. Выбор способа зависит от того, какое железо есть под рукой и в каком состоянии находится сам программатор.

Ниже разберём все рабочие варианты: от самого доступного — с Arduino Uno или Nano — до прошивки через USB-UART адаптер. Для каждого метода приведены подключение, команды avrdude и типичные ошибки, из-за которых чип не определяется.

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

Чаще всего поводом становится предупреждение warning: cannot set sck period или сообщение о том, что прошивка устарела, при работе с современными версиями avrdude. Старая прошивка не умеет программно снижать скорость SPI, из-за чего «пустые» микроконтроллеры с заводской тактовой частотой 1 МГц не прошиваются.

Вторая причина — «окирпичивание» после неудачных экспериментов или желание залить модифицированную прошивку. Важно понимать: USBasp не может прошить сам себя через штатный ISP-разъём, потому что его микроконтроллер в процессе программирования занят обслуживанием USB. Именно поэтому и нужен обходной путь.

Способ 1: прошивка через Arduino как ISP

Самый доступный вариант, если под рукой есть любая плата Arduino Uno, Nano или Mega. Плата превращается в ISP-программатор с помощью скетча ArduinoISP, который входит в стандартные примеры Arduino IDE.

Порядок действий:

  • 🔌 Откройте в Arduino IDE пример Файл → Примеры → 11.ArduinoISP → ArduinoISP и загрузите его в плату.
  • 🔗 Соедините Arduino с разъёмом ISP программатора USBasp: MOSI → MOSI, MISO → MISO, SCK → SCK, RESET → RESET, GND → GND, 5V → 5V.
  • 🎯 Убедитесь, что джампер JP3 (slow SCK) на USBasp установлен — это снижает скорость обмена и повышает надёжность.
  • 💾 Скачайте свежий файл прошивки usbasp.atmega8.xxxx.hex с официального сайта проекта USBasp (fischl.de).

Далее прошивка заливается одной командой avrdude. Порт укажите тот, на котором определилась Arduino:

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

Здесь -c arduino — тип программатора, -p m8 — целевой чип ATmega8 (для версии на ATmega88 укажите m88), -P COM5 — последовательный порт. В Linux порт будет вида /dev/ttyUSB0 или /dev/ttyACM0.

☑️ Проверка перед прошивкой через Arduino

Выполнено: 0 / 5
⚠️ Внимание: некоторые клоны USBasp собраны на ATmega88, а не на ATmega8. Если указать неверный чип в параметре -p, avrdude выдаст ошибку сигнатуры. Проверьте маркировку на корпусе микросхемы до начала прошивки.

Способ 2: прошивка через Raspberry Pi

Если Arduino нет, но есть Raspberry Pi любой модели, её GPIO-пины можно использовать как ISP-программатор. В avrdude для этого предусмотрен тип программатора linuxgpio, который напрямую управляет выводами.

Подключение выполняется к стандартным SPI-пинам GPIO: MOSI, MISO, SCLK и любой свободный пин для RESET, плюс питание 3,3 В и земля. Здесь есть критичный нюанс: GPIO Raspberry Pi работают с логикой 3,3 В, а USBasp обычно питается от 5 В. Рекомендуется запитать программатор от 3,3 В либо использовать согласование уровней.

avrdude -c linuxgpio -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex:i

Номера пинов, используемые linuxgpio по умолчанию, зависят от конфигурации avrdude — их можно переопределить в файле avrdude.conf. Перед запуском сверьте распиновку с документацией на вашу версию avrdude и модель Raspberry Pi.

Способ 3: через предустановленный загрузчик USBaspLoader

На некоторых экземплярах USBasp продавец или предыдущий владелец уже записал загрузчик USBaspLoader — аналог bootloader'а Arduino. Если он есть, прошивка обновляется вообще без внешнего железа: программатор переводится в режим загрузчика замыканием специального джампера, после чего принимает прошивку прямо по USB.

Проверить наличие загрузчика просто: замкните соответствующие контакты (на многих платах это площадки рядом с джамперами, иногда подписанные UP или SELF) и подключите устройство к ПК. Если в системе появилось устройство, отличное от обычного USBasp, — загрузчик жив. Прошивка выполняется командой:

avrdude -c usbasp -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex:i

К сожалению, на большинстве дешёвых клонов загрузчик не записан, а fuse-биты выставлены так, что область загрузчика не задействована. Если устройство в режиме самопрошивки не определяется — переходите к способам с Arduino или Raspberry Pi.

Почему нельзя прошить USBasp через UART-адаптер напрямую

Загрузчик, принимающий прошивку по UART (как в Arduino), в стандартной прошивке USBasp отсутствует. USB-UART переходник поможет только если в чип уже записан serial bootloader, что на практике встречается редко. Поэтому «прошивка через переходник USB-TTL» без загрузчика невозможна — данные ISP-программирования передаются по синхронному протоколу SPI, а не асинхронному UART.

Сравнение способов прошивки

Чтобы выбрать подходящий метод, сверьтесь с таблицей ниже. Она учитывает необходимое оборудование и сложность каждого варианта.

СпособЧто нужноСложностьРиски
Arduino as ISPArduino Uno/Nano/MegaНизкаяНеверный чип в команде
Raspberry PiRaspberry Pi любой моделиСредняяЛогика 3,3 В вместо 5 В
USBaspLoaderТолько USB-кабельМинимальнаяЗагрузчик может отсутствовать
Другой USBasp/ISPВторой программаторНизкаяНе подходит при его отсутствии

Как видно, единственный способ прошить USBasp вообще без дополнительного железа — это предустановленный загрузчик USBaspLoader. Во всех остальных случаях потребуется хотя бы Arduino или Raspberry Pi, выполняющие роль внешнего программатора.

📊 Каким способом вы прошивали USBasp?
Arduino как ISP
Raspberry Pi по GPIO
Через загрузчик USBaspLoader
Пока не получилось — чип не определяется

Типичные ошибки и их решение

Самая частая проблема — ошибка avrdude: error: program enable: target doesn't answer. Она означает, что целевой чип не отвечает на команды программирования. Проверьте в первую очередь качество соединений: дупоновские провода часто дают плохой контакт, особенно на линии RESET.

Вторая типичная ситуация — ошибка сигнатуры device signature = 0x000000 или 0xffffff. Нули говорят об отсутствии связи (проверяйте MISO/MOSI и питание), а единицы — о коротком замыкании или перепутанных линиях. Если сигнатура читается, но не совпадает с ожидаемой, вы указали неверную модель чипа — уточните маркировку.

  • 🧲 Пропаяйте контакты ISP-разъёма на USBasp — на клонах пайка часто холодная.
  • 🔋 Проверьте, что на чип реально приходит питание: замерьте напряжение между VCC и GND.
  • 🐢 Добавьте в команду avrdude ключ -B 10 для снижения скорости программирования.
  • 🔄 Попробуйте другой USB-порт и другой кабель, если Arduino сама не определяется системой.
⚠️ Внимание: не меняйте fuse-биты, если не уверены в их значениях. Ошибочная запись фьюзов (например, отключение RESET или неверный источник тактирования) переведёт чип в состояние, когда обычный ISP уже не поможет — потребуется высоковольтный программатор.

Проверка результата после прошивки

После завершения записи avrdude автоматически выполняет верификацию — сообщение verified означает, что данные во flash совпали с файлом. Но это ещё не гарантия работоспособности устройства как программатора.

Отключите «временный программатор», подключите USBasp к компьютеру напрямую и выполните тестовое чтение любого микроконтроллера или просто проверьте, что устройство определяется системой без ошибок. В Windows может потребоваться установка драйвера через Zadig (драйвер libusb), если он не был установлен ранее. Если avrdude больше не выдаёт предупреждение об устаревшей прошивке — обновление прошло успешно.

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

Можно ли прошить USBasp через другой USBasp?

Да, это классический способ: второй программатор подключается к ISP-разъёму первого, и прошивка заливается командой avrdude -c usbasp -p m8 -U flash:w:файл.hex:i. Но статья посвящена именно ситуации, когда второго программатора нет.

Что делать, если ATmega8 не отвечает ни через Arduino, ни через Raspberry Pi?

Возможные причины: неисправный кварцевый резонатор, повреждение чипа статикой или ранее неверно записанные fuse-биты. Сначала проверьте питание и прозвоните все линии. Если чип «мёртв», его можно заменить — ATmega8 в DIP-корпусе легко выпаять и поставить новый, но прошивать его всё равно придётся внешним программатором.

Нужно ли выставлять fuse-биты при прошивке USBasp?

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

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

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

Можно ли использовать клон Arduino Nano на CH340 для прошивки?

Да, скетч ArduinoISP работает на любой совместимой плате, включая клоны на чипе CH340. Единственное условие — в системе должен быть установлен драйвер CH340, чтобы плата определилась как COM-порт.