К вечеру пятницы на моём столе лежали четыре прошитых и один упрямый ATtiny85, и я в пятый раз перекидывал шесть проводов от Uno-программатора: RESET, MOSI, MISO, SCK, питание, земля. На четвёртом переподключении перепутал MISO и RESET, получил invalid device signature и потратил сорок минут на поиск несуществующей поломки. В ту же ночь я заказал USBasp — ленточный программатор, который воткнулся в USB и с тех пор живёт у меня отдельным хвостом.
Разберёмся, что это за железка, чем она лучше программатора из Uno, куда смотрит красная полоса на ленте и почему свежий чип отказывается шиться без одного маленького джампера. Заодно потренируем обе ошибки на живом тренажёре: ISP-протокол в симуляторе не живёт, зато его типовые отказы — прекрасно: реплики avrdude в мониторе ниже повторяют настоящие почти дословно.
Что такое USBasp и когда он лучше Uno
USBasp — открытый проект Томаса Фишля, живой уже два десятилетия: внутри дешёвого корпуса сидит ATmega8 с прошивкой-программатором, снаружи — USB-разъём и лента 10-контактного ISP 2×5. Главное отличие от Arduino as ISP: он не занимает COM-порт. Подключили — а в списке портов пусто, и это не поломка: среда общается с ним через отдельный механизм. Мы разобрались в уроке про плату и порт, что порт нужен платам с USB-UART; программатору он не нужен вовсе.
Второе отличие — нет ритуалов. Не нужно заливать скетч-программатор, не нужен конденсатор на RESET, ничего не перекомпилируется перед каждой сессией. Втыкаете ленту в ICSP-разъём цели или в макетку к голому чипу — и шьёте. Третье — универсальность: любые AVR с ISP-интерфейсом, от голого ATmega328P до ATtiny45, плюс чужие платы с 6-контактным ICSP — для них ставится переходник с ленты или отдельные проводки. На Uno и Nano этот разъём — двухрядный, с ключом, рядом с RESET: в него же втыкается лента переходника, когда вы пишете загрузчик.
Мнение с границей: если раз в месяц прошиваете один чип, Uno справляется, покупать нечего. Но если чипов много, если это ATtiny или платы с ICSP-гнездом, USBasp окупается за первый вечер: лента втыкается целиком и ошибиться в ориентации сложнее, чем в шести отдельных проводах. Мой экземпляр за год прошёл через две дюжины чипов и одну перепрошивку загрузчика на глушителе-светильнике — и ни разу не потребовал ни скетча, ни конденсатора.
Питание — место, где новички палятся. Джампер на плате USBasp подаёт 5 вольт с USB на цель. Правило одного источника: если цель уже питается от своей платы или макетки — джампер снимайте, два источника в одну сеть — плохая идея, мы это проходили в уроке про полярность и питание макетки. Ориентация ленты: красная полоса — первый контакт, MOSI; на части китайских плат ключа-выреза нет, полоса и подписи на шёлке — ваши единственные проводники.
Лента 10-pin и два джампера
Распиновка 10-контактного ISP стоит того, чтобы выучить один раз: нечётные контакты — MOSI (1), пусто (3), RESET (5), SCK (7), MISO (9); чётные — VCC (2) и четыре земли. Красная полоса ленты прижата к контакту 1. Лента длиннее, чем нужно? Не смущайтесь: неиспользуемые провода просто висят, мешать они не будут. Для макетки удобнее всего воткнуть в контактные колодки или использовать перемычки мама-папа, о которых мы говорили в уроке про провода и перемычки.
Теперь джампер Slow SCK — сюжет, который съедает вечер каждому второму. Правило ISP-протокола: тактовая частота программатора не выше четверти частоты цели. Заводской чип живёт на внутреннем 1 МГц — потолок 250 кГц. USBasp по умолчанию тикает быстрее, около 375 кГц, — и свежий чип отвечает мусором. Джампер Slow SCK режет частоту до десятков килогерц, и всё шьётся. Тот же заводской 1 МГц мы встречали в уроке про ATtiny85 — там лечили фюзами, здесь частотой программатора: две стороны одной истории. Мой личный маркер: если avrdude молчит секунд десять и выдаёт 0x000000 — это питание или обрыв SCK; если отвечает мусором — частота. Джампер стоит копейки, а экономит те самые сорок минут.
// Чтение сигнатуры цели напрямую:// avrdude -c usbasp -p m328p// ответ: Device signature = 0x1e950f (probably m328p)//// Заливка hex в ATtiny85 — то же, что «Загрузить через программатор»:// avrdude -c usbasp -p t85 -U flash:w:blink.hex:i//// -c usbasp — программатор// -p m328p — модель чипа (t85 — ATtiny85)// -U flash:w:файл:i — записать (w) файл в flash немедленно (i = формат ihex)Программная сторона короткая. В IDE 2: Инструменты → Программатор → USBasp. Заливка скетча — Скетч → Загрузить через программатор, и никак иначе: обычная «Загрузить» ищет COM-порт, которого у USBasp нет — сам ритуал обычной заливки мы разобрали в уроке про загрузку скетча. «Записать загрузчик» работает через тот же программатор: голому чипу сначала ставите загрузчик этим путём, потом возвращаете его к обычной жизни по UART.
Драйверы — отдельная глава для Windows. Без драйвера среда отвечает could not find USB device with vid=0x16c0 pid=0x5dc. Лечение — утилита Zadig: выбрали USBasp в списке, установили libusb-win32, переподключили. Логика ровно та же, что в уроке про драйвер CH340: чипу нужен свой драйвер, плате — нет. На Linux и macOS обычно работает из коробки, максимум — правило udev, чтобы не запускать среду от root. Признак, что драйвер встал: в Диспетчере устройств Windows появляется строка libusb-win32 devices → USBasp, и после этого vid-ошибка уходит навсегда.
| Джампер | Что делает | Когда замыкать |
|---|---|---|
| Питание 5V (на части плат — POWER) | подаёт 5 В с USB на цель | цель без собственного питания: голый чип в макетке |
| Slow SCK | снижает тактовую ISP до десятков кГц | свежий чип на заводском 1 МГц, ошибки сигнатуры |
| 3.3V (не на всех платах) | переключает питание цели на 3,3 В | цель рассчитана на 3,3 В и только с низковольтным чипом |
Итоговый расклад, который я держу в голове: разово оживить чип — Uno as ISP из урока про bootloader; серия чипов, ATtiny, платы с ICSP — USBasp. Конфликта между ними нет: оба шьют один и тот же ISP-протокол, разница только в удобстве и в цене вечера. Фьюзы при этом записываются одинаково: пункт «Записать загрузчик» работает и там, и там.
Остаётся сказать про упрямые случаи. Чип, у которого RESET перепрофилирован или фьюзы выставлены под отсутствующий кварц, обычным ISP не берётся — нужен высоковольтный программатор на 12 вольт, и это уже другая весовая категория. Для всего остального достаточно пары «лента + четыре сигнальных провода»: читайте сигнатуру, пишите flash, проверяйте мигалкой.
- 1. После подключения USBasp в списке портов не появилось ничего. Это...
- 2. Свежий ATtiny85 не шьётся: invalid device signature. Первое действие?
- 3. Цель питается от собственной платы. Джампер питания USBasp...
- 4. Как залить скетч через USBasp в IDE 2?
- 5. IDE пишет could not find USB device with vid=0x16c0 pid=0x5dc. Чем лечится на Windows?
- USBasp шьёт AVR по ISP без COM-порта, скетча-программатора и конденсатора: воткнул ленту — работаешь
- Красная полоса ленты = контакт 1 = MOSI; нечётные: MOSI, RESET, SCK, MISO; чётные: VCC и земли
- Свежий чип на заводском 1 МГц требует SCK не выше 250 кГц: замкните Slow SCK, иначе invalid device signature
- Скетч заливается только через Скетч → Загрузить через программатор; обычная Загрузить ищет несуществующий COM-порт
- Windows: vid=0x16c0 pid=0x5dc — ставим libusb-win32 через Zadig; цель со своим питанием — джампер 5V снять
Частые вопросы по теме урока
- После подключения USBasp в списке портов не появилось ничего. Это...
- USBasp общается со средой напрямую через libusb, минуя COM-порты. Пустой список портов при работающем программаторе — штатная картина, а не поломка. нормально: программатор работает не через COM-порт
- Свежий ATtiny85 не шьётся: invalid device signature. Первое действие?
- Заводской чип живёт на 1 МГц, потолок SCK — 250 кГц, а USBasp по умолчанию тикает около 375 кГц. Джампер Slow SCK опускает частоту программатора, и сигнатура читается. замкнуть джампер Slow SCK
- Цель питается от собственной платы. Джампер питания USBasp...
- Правило одного источника: либо USBasp кормит цель, либо плата кормит сама себя. Дублирующее питание конфликтует, и в лучшем случае по питанию начнут плавать показания. снять: два источника в одну сеть — плохая идея
- Как залить скетч через USBasp в IDE 2?
- Обычная «Загрузить» идёт через COM-порт и загрузчик — их у цели может не быть. Пункт «Загрузить через программатор» шьёт напрямую по ISP. Скетч → Загрузить через программатор
- IDE пишет could not find USB device with vid=0x16c0 pid=0x5dc. Чем лечится на Windows?
- vid/pid — идентификаторы USBasp: Windows их видит, но без драйвера не может отдать среде. Zadig с libusb-win32 закрывает вопрос; кабель и порты ни при чём. драйвером libusb через Zadig