Прошивка ATtiny13 через USBasp

01 · Подготовка

Что понадобится

  • USBasp — программатор на ATmega8/48, обычно недорогой клон с китайских площадок. Определяется системой как устройство с vid=0x16c0, pid=0x5dc.
  • ATtiny13 или ATtiny13A — 8-выводной DIP или SOIC, 1 КБ флеша, 64 байта EEPROM.
  • Шесть проводов (или готовый ISP-шлейф) для соединения программатора с ножками контроллера.
  • Arduino IDE 2.x и ядро MicroCore — лёгкая альтернатива ATtinyCore специально под мелкие тини.

Кстати. avrdude отдельно ставить не нужно — он идёт в комплекте пакета инструментов MicroCore и вызывается Arduino IDE автоматически при каждой загрузке.

02 · Электрика

Подключение по ISP

USBasp использует стандартный 6-контактный ISP-разъём: MOSI, MISO, SCK, RESET, VCC и GND. На восьминогом ATtiny13 они распределены так:

Распиновка (DIP-8, вид сверху)

  • RESET → PB5, вывод 1
  • MOSI → PB0, вывод 5
  • MISO → PB1, вывод 6
  • SCK → PB2, вывод 7
  • VCC → вывод 8
  • GND → вывод 4

Ножки 2 (PB3) и 3 (PB4) в программировании не участвуют — это свободные линии вашей схемы.

Про питание. Конденсатор на RESET и подтяжки, о которых часто пишут для схемы «Arduino как ISP», здесь не нужны — это особенность именно того способа прошивки. Для прямого USBasp достаточно шести проводов выше.

Если схема рассчитана на 3.3 В, а не на 5 В — переставьте перемычку JP2 на плате USBasp в положение 3.3V до подключения питания к контроллеру.

03 · Софт

Установка MicroCore и настройка IDE

  1. File → Preferences → в поле «Additional Boards Manager URLs» добавьте https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json
  2. Tools → Board → Boards Manager, в поиске введите microc, установите пакет MicroCore by MCUdude.
  3. Tools → Board → MicroCore → выберите ATtiny13.
  4. Tools → Programmer → выберите USBasp (не «USBasp slow», если только не работаете с очень медленной тактовой частотой).

Tools → Programmer — важно выбрать именно USBasp, иначе avrdude запустится не с теми параметрами.

04 · Ошибка №1

«A programmer is required to upload»

Самая частая точка ступора. Обычная кнопка Upload (Ctrl+U) рассчитана на платы с загрузчиком (bootloader), который принимает прошивку по UART. У ATtiny13 бутлоадера нет физически — прошивать можно только по ISP. Поэтому при обычной загрузке IDE компилирует скетч и останавливается, ничего не отправляя в программатор.

Компиляция прошла (480 bytes, 46%), но запись в чип не выполнялась — именно так выглядит эта ошибка.

Решение: используйте другой пункт меню — Sketch → Upload Using Programmer (сочетание Ctrl+Shift+U).

Именно этот пункт вызывает avrdude с флагами ISP-записи. Обычный Upload для ATtiny13 не подходит в принципе.

Если до этого был обычный Upload: значит в чип ничего не записалось — значения по умолчанию (пустой флеш, фьюзы по умолчанию) остались как были. Проверять пока нечего, просто повторите загрузку через «Upload Using Programmer».

05 · Ошибка №2

Windows не видит USBasp

После перехода на «Upload Using Programmer» может появиться другая ошибка — уже не в IDE, а в самом avrdude:

Using port            : usb
Using programmer      : usbasp
Warning: cannot query manufacturer for device: Broken pipe
Warning: cannot query product for device: Broken pipe
Error: cannot find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'
Error: unable to open port usb for programmer usbasp

Это не проблема прошивки и не проблема схемы — avrdude вообще не видит USBasp как USB-устройство. Причина почти всегда одна: Windows поставила на программатор общий HID/composite-драйвер, а avrdude умеет говорить с USBasp только через libusb.

Как исправить

  1. Скачайте Zadig — zadig.akeo.ie.
  2. Подключите USBasp и запустите Zadig от имени администратора.
  3. Если Windows SmartScreen заблокирует запуск — это стандартная реакция на неподписанный установщик у малоизвестной утилиты, а не признак проблемы; выберите «Выполнить в любом случае».
  4. В меню Options включите List All Devices — иначе USBasp может не появиться в списке.
  5. В выпадающем списке найдите устройство USBasp (VID 16C0, PID 05DC).
  6. Справа выберите драйвер libusbK и нажмите Replace Driver / Install Driver — установка займёт несколько секунд.
  7. Переподключите USBasp (выньте/вставьте USB) и откройте Диспетчер устройств — программатор должен появиться в разделе libusbK Usb Devices без жёлтого восклицательного знака.

Если USBasp не появляется в Zadig вовсе: даже с «List All Devices» — проверьте другой USB-кабель и порт, убедитесь, что программатор питается напрямую от USB, а не только от целевой схемы, и что на плате клона не сгорел стабилизатор.

06 · Не ошибка

«cannot set sck period» — можно игнорировать

Ещё одна строка, которая пугает, но ни на что не влияет:

Error: cannot set sck period; please check for usbasp firmware update

AVR device initialized and ready to accept instructions
Device signature = 1E 90 07 (ATtiny13, ATtiny13A)

Это предупреждение о том, что прошивка конкретного клона USBasp не поддерживает новую команду установки частоты SCK, которую пытается послать avrdude 8.x. На запись флеша, EEPROM и фьюзов оно не влияет — сигнатура читается, запись идёт дальше. Избавиться от него можно, только перепрошив firmware самого USBasp — для повседневной работы это не обязательно.

07 · Результат

Как выглядит успешная запись

Ориентир — вот такой хвост лога, без единого Failed в конце:

Processing -U hfuse:w:0xfb:m
Writing 1 byte (0xFB) to hfuse, 1 byte written

Processing -U lfuse:w:0b00111010:m
Writing 1 byte (0x3A) to lfuse, 1 byte written

Processing -U flash:w:...\sketch.ino.hex:i
Reading 480 bytes for flash from input file sketch.ino.hex
Writing 480 bytes to flash
Writing | ################################################## | 100% 0.39s
480 bytes of flash written

Avrdude done.  Thank you.

Строки про hfuse/lfuse означают, что ядро выставило фьюзы под выбранную в IDE тактовую частоту — это нормально и происходит при каждой загрузке.

08 · Контроль

Как убедиться, что данные записались верно

В команде, которую формирует Arduino IDE, есть флаг -V — он как раз отключает автоматическую проверку после записи (так быстрее). Поэтому в логе нет строки «verified OK», и это ожидаемо, а не повод для беспокойства. Чтобы проверить руками:

  1. Получите постоянную копию hex-файла: Sketch → Export Compiled Binary. Временная папка сборки из лога IDE удаляется сразу после закрытия среды, поэтому проверять нужно именно экспортированный файл.
  2. Запустите avrdude тем же бинарником и конфигом, что использует Arduino IDE, но с ключом верификации v вместо w:
"C:\Users\<имя>\AppData\Local\Arduino15\packages\MicroCore\tools\avrdude\8.0-arduino.1\bin\avrdude.exe" ^
  -C"C:\Users\<имя>\AppData\Local\Arduino15\packages\MicroCore\tools\avrdude\8.0-arduino.1\etc\avrdude.conf" ^
  -v -p attiny13a -c usbasp ^
  -U flash:v:"C:\путь\к\sketch.ino.hex":i

avrdude прочитает флеш обратно из чипа и сравнит его побайтово с hex-файлом. Итог без расхождений выглядит так: 480 bytes of flash verified — без единой строки MISMATCH.

Заодно можно свериться с фьюзами, которые должны были уйти в чип:

"...\avrdude.exe" -C"...\avrdude.conf" -v -p attiny13a -c usbasp ^
  -U hfuse:r:-:h -U lfuse:r:-:h

На выходе должны быть те же значения, что писались при загрузке (например, hfuse = 0xfb, lfuse = 0x3a — конкретные числа зависят от выбранной в IDE тактовой частоты).

⚠ Осторожно с фьюзами. Не переписывайте hfuse/lfuse вручную, если не уверены, что делаете — среди бит fuse-байтов есть RSTDISBL, который превращает ножку RESET в обычный GPIO. Один неверный fuse-байт с этим битом — и ISP-программирование перестаёт работать вовсе: обратно чип оживает только высоковольтным (HV) программатором. Настройки, которые выставляет сама Arduino IDE через меню MicroCore, этого бита не трогают — опасность возникает только при ручной правке fuse через avrdude напрямую.

09 · Справка

Шпаргалка по сообщениям

  • A programmer is required to upload — нажат обычный Upload, для платы без бутлоадера он не работает → Sketch → Upload Using Programmer (Ctrl+Shift+U)
  • cannot find USB device vid=0x16c0 pid=0x5dc — Windows поставила системный драйвер вместо libusb → переустановить драйвер через Zadig на libusbK
  • cannot set sck period — старая прошивка клона USBasp не знает новую команду → игнорировать, на запись не влияет
  • Device signature = 0x000000 / 0xffffff — нет контакта по ISP: обрыв, перепутанные MOSI/MISO или нет питания → проверить все 6 проводов и VCC/GND мультиметром
  • initialization failed, rc=-1 — RESET не подключен либо занят другой цепью → проверить вывод 1 (PB5/RESET) и его цепь
  • verify mismatch после чтения — прошивка не легла целиком, чаще просадка питания при стирании/записи → повторить запись, проверить стабильность 5 В на USBasp

Проверено на связке Arduino IDE 2.0.3 · MicroCore 2.5.2 · avrdude 8.0-arduino.1 · Windows 10. Ядро: github.com/MCUdude/MicroCore

Вызвать проверенного мастера
Мастера по ремонту бытовой техники из базы ТЕХНОМАГ не посредники, с проверенными данными и 100% знаниями в ремонте
Почему посудомоечная машина плохо моет посуду
Почему посудомоечная машина плохо моет посуду
Почему посудомоечная машина плохо моет посуду: основные причины и способы ремонта. Проверка фильтров, разбрызгивателей, циркуляционного насоса, ТЭНа и
Ошибки посудомоечных машин Bosch, Siemens, Electrolux, Indesit
Ошибки посудомоечных машин Bosch, Siemens, Electrolux, Indesit
Ошибки посудомоечных машин Bosch, Siemens, Electrolux и Indesit: расшифровка кодов, причины неисправностей и способы диагностики. Проверка нагрева, сл
Не набирает воду посудомоечная машина: неисправности системы AquaStop
Не набирает воду посудомоечная машина: неисправности системы AquaStop
AquaStop посудомоечной машины: устройство, принцип работы, диагностика неисправностей и ремонт. Причины, почему ПММ не набирает воду, срабатывает защи
Сливной насос посудомоечной машины
Сливной насос посудомоечной машины
Сливной насос посудомоечной машины: устройство, принцип работы, диагностика и замена. Причины, почему ПММ не сливает воду, насос гудит или работает ме
Тех. поддержка