Как обновить прошивку USBasp: полная инструкция

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

Обновить прошивку USBasp можно только с помощью второго программатора — сам себя он перепрошить не способен, поскольку не может программировать собственный чип ATmega8A в процессе работы. В качестве «донора» подойдёт ещё один USBasp, Arduino с скетчем ArduinoISP, AVRISP mkII или любой другой ISP-программатор. Разберём весь процесс по шагам.

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

Прежде чем приступать, соберите всё необходимое. Недостающий элемент на середине процесса — частая причина «окирпичивания» устройства, когда старая прошивка уже стёрта, а новая не записана.

  • 🔌 Второй программатор — другой USBasp, Arduino Uno/Nano с скетчем ArduinoISP или совместимый ISP-программатор.
  • 🧷 Перемычка (джампер) для замыкания контактов самопрограммирования на плате USBasp.
  • 💻 Утилита avrdude — устанавливается отдельно или входит в состав Arduino IDE.
  • 📄 HEX-файл прошивки — официальная прошивка с сайта автора проекта USBasp (Thomas Fischl) либо проверенная альтернативная сборка.
  • 🔧 Провода для подключения — 6-пиновый ISP-шлейф или отдельные джамперы «мама-мама».

Обратите внимание на версию чипа на плате. Большинство USBasp построены на ATmega8A, но встречаются варианты на ATmega48 и ATmega88 — для них нужен свой HEX-файл. Прошивка от другого контроллера не встанет или сделает устройство неработоспособным.

Определяем текущую версию прошивки и тип платы

Перед обновлением полезно узнать, какая прошивка установлена сейчас. Подключите USBasp к компьютеру и выполните команду:

avrdude -c usbasp -p m8

В ответе утилита выведет версию прошивки в строке вида firmware version X.X. Если версия старая или отображается предупреждение о необходимости обновления — пора действовать.

Далее осмотрите плату. Найдите на ней контакты или посадочные места для перемычек. Обычно их два-три набора:

  • 📍 JP1 (SELFPRG / SELF PROGRAMMING) — включает режим самопрограммирования, именно она нужна для обновления прошивки.
  • 📍 JP2 (SLOW SCK) — понижает скорость программирования для «медленных» целевых чипов.
  • 📍 JP3 — на некоторых платах переключает напряжение питания цели (5В/3.3В).

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

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

Установите джампер на контакты SELFPRG (JP1). Эта перемычка подтягивает линию RESET микросхемы USBasp к внешнему разъёму, позволяя другому программатору получить доступ к его памяти. Без неё попытка прошивки вернёт ошибку target doesn't answer.

⚠️ Внимание: замыкайте именно перемычку самопрограммирования, а не SLOW SCK. Ошибочная установка джампера на другие контакты не повредит плату, но прошивка не запишется, и вы потеряете время на поиск несуществующей проблемы.

Теперь соедините два программатора. ISP-разъём «донора» подключается к ISP-разъёму прошиваемого USBasp с соблюдением распиновки: MOSI к MOSI, MISO к MISO, SCK к SCK, RESET к RESET, плюс питание VCC и GND. Если используете Arduino с скетчем ArduinoISP, подключение выполняется проводами к цифровым пинам, указанным в скетче (обычно 10–13).

☑️ Готовность к прошивке USBasp

Выполнено: 0 / 5

Скачиваем правильный HEX-файл прошивки

Официальную прошивку публикует автор проекта Thomas Fischl на сайте fischl.de в разделе USBasp. Архив содержит HEX-файлы для разных микроконтроллеров — выбирайте строго под свой чип: для ATmega8 это файл вида usbasp.atmega8.xxxx-xx-xx.hex.

📊 Каким программатором вы будете прошивать USBasp?
Второй USBasp
Arduino с скетчем ArduinoISP
AVRISP mkII или клон
Другой ISP-программатор

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

Прошиваем USBasp через avrdude

Команда прошивки зависит от того, какой программатор выступает «донором». Если это второй USBasp, команда выглядит так:

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

Здесь -c usbasp — тип программатора-записывающего устройства, -p m8 — целевой чип ATmega8 прошиваемого USBasp, а после -U flash:w: указывается путь к HEX-файлу. Имя файла замените на актуальное для скачанной вами версии.

Если «донором» служит Arduino с скетчем ArduinoISP, параметры меняются — нужно указать тип программатора avrisp (или arduino), COM-порт и скорость:

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

Порт COM3 замените на тот, который заняла Arduino в вашей системе — его видно в диспетчере устройств Windows или в выводе ls /dev/tty* на Linux и macOS. Успешное завершение выглядит как строки записи, верификации и итоговое avrdude done. Thank you.

⚠️ Внимание: не прерывайте процесс записи и не отключайте программаторы от USB до появления сообщения об успешной верификации. Обрыв на середине стирания оставит чип без рабочей прошивки, и восстановить его можно будет только повторной полной прошивкой.

Проверка результата и снятие перемычки

После завершения записи отключите оба устройства от USB, снимите перемычку SELFPRG — в рабочем режиме она должна быть разомкнута. Затем подключите обновлённый USBasp к компьютеру и повторите проверочную команду:

avrdude -c usbasp -p m8

В выводе должна отобразиться новая версия прошивки. Финальный тест — подключите USBasp к реальному целевому микроконтроллеру и попробуйте считать его сигнатуру или прошить тестовый HEX. Если чтение сигнатуры проходит без ошибок initialization failed, обновление завершено успешно.

Что делать, если avrdude выдаёт «target doesn't answer» при прошивке

Проверьте, что перемычка SELFPRG действительно замкнута — на непропаянных контактах джампер может не давать контакта. Убедитесь, что линия RESET доходит от программатора-донора до чипа. Попробуйте добавить в команду avrdude ключ -B 10 для замедления SCK — заводской чип может работать на низкой тактовой частоте. Также проверьте питание: прошиваемая плата должна получать 5В либо от донора, либо от собственного USB-разъёма, но не от обоих источников одновременно без защиты.

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

Проблемы при обновлении USBasp встречаются часто, но почти все они решаемы без пайки и замены компонентов. Сводная таблица поможет быстро сориентироваться:

ОшибкаВероятная причинаРешение
target doesn't answerНе замкнута перемычка SELFPRGУстановить/пропаять джампер, проверить контакт
initialization failed, rc=-1Неверная распиновка ISP или нет питанияПроверить MOSI/MISO/SCK/RESET и VCC
verification errorБитый HEX-файл или помехи на линииСкачать прошивку заново, замедлить SCK ключом -B
cannot find USB deviceНет драйвера (Windows)Установить драйвер через Zadig, выбрав libusb
Устройство не определяется после прошивкиПрошит HEX не под тот чипПерепрошить корректным файлом под свой MCU

Отдельно стоит упомянуть драйверы Windows. USBasp работает через libusb, и система не всегда подхватывает его автоматически. Утилита Zadig решает вопрос в пару кликов: выберите устройство USBasp в списке и установите драйвер libusbK или libusb-win32. На Linux и macOS драйвер обычно не требуется, но на Linux может понадобиться правило udev для доступа без root.

Можно ли обойтись без второго программатора

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

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

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

Зачем вообще обновлять прошивку USBasp?

Старые прошивки некорректно работают с новыми версиями avrdude, не умеют автоматически понижать скорость SCK и могут не поддерживать отдельные микроконтроллеры AVR. Обновление устраняет ошибки вида «cannot set SCK period» и расширяет список программируемых чипов.

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

Да, это самый простой способ. На прошиваемой плате замыкается перемычка SELFPRG, ISP-разъёмы соединяются шлейфом, а запись выполняется командой avrdude с параметром -c usbasp.

Где взять официальную прошивку для USBasp?

Официальные релизы публикует автор проекта Thomas Fischl на сайте fischl.de в разделе USBasp. В архиве лежат HEX-файлы под разные микроконтроллеры — выбирайте файл, соответствующий чипу на вашей плате (чаще всего ATmega8).

Что делать, если на плате нет контактов для перемычки?

На дешёвых клонах посадочные места перемычек бывают не распаяны. Найдите по схеме платы контакт RESET микросхемы и соответствующую линию разъёма — их можно замкнуть пинцетом на время прошивки или аккуратно припаять временную перемычку из проволоки.

Нужен ли драйвер для USBasp на Windows?

Да, Windows требует драйвер libusb. Проще всего установить его через утилиту Zadig: выберите USBasp в списке устройств и установите драйвер libusbK или libusb-win32. После этого avrdude будет видеть программатор без дополнительных настроек.