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
- File → Preferences → в поле «Additional Boards Manager URLs» добавьте https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json
- Tools → Board → Boards Manager, в поиске введите microc, установите пакет MicroCore by MCUdude.
- Tools → Board → MicroCore → выберите ATtiny13.
- 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.
Как исправить
- Скачайте Zadig — zadig.akeo.ie.
- Подключите USBasp и запустите Zadig от имени администратора.
- Если Windows SmartScreen заблокирует запуск — это стандартная реакция на неподписанный установщик у малоизвестной утилиты, а не признак проблемы; выберите «Выполнить в любом случае».
- В меню Options включите List All Devices — иначе USBasp может не появиться в списке.
- В выпадающем списке найдите устройство USBasp (VID 16C0, PID 05DC).
- Справа выберите драйвер libusbK и нажмите Replace Driver / Install Driver — установка займёт несколько секунд.
- Переподключите 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», и это ожидаемо, а не повод для беспокойства. Чтобы проверить руками:
- Получите постоянную копию hex-файла: Sketch → Export Compiled Binary. Временная папка сборки из лога IDE удаляется сразу после закрытия среды, поэтому проверять нужно именно экспортированный файл.
- Запустите 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":iavrdude прочитает флеш обратно из чипа и сравнит его побайтово с 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