Обновить прошивку 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
⚠️ Внимание: некоторые клоны 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 ISP | Arduino Uno/Nano/Mega | Низкая | Неверный чип в команде |
| Raspberry Pi | Raspberry Pi любой модели | Средняя | Логика 3,3 В вместо 5 В |
| USBaspLoader | Только USB-кабель | Минимальная | Загрузчик может отсутствовать |
| Другой USBasp/ISP | Второй программатор | Низкая | Не подходит при его отсутствии |
Как видно, единственный способ прошить USBasp вообще без дополнительного железа — это предустановленный загрузчик USBaspLoader. Во всех остальных случаях потребуется хотя бы Arduino или Raspberry Pi, выполняющие роль внешнего программатора.
Типичные ошибки и их решение
Самая частая проблема — ошибка 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-порт.