Как мы прошивали Attiny10

Казалось бы, что может быть знакомее старой доброй AVR? Она на начало 2025-го настолько уже мне была неинтересна, что я даже не подозревал как сильно она мне понадобится. А еще, меня обескуражило то, как это непросто и нетривиально: работать с ATTINY10. Эта история для вас будет поучительной, потому что задача решена и остается лишь взять наш опыт на вооружение. Здесь нет никаких революционных открытий, но все же я делаю упор на предоставление расширенной информации. То что мне не удавалось прочитать "между строк" где-то в одном месте, но пришлось собирать информацию по сети, проверять и конечно - делиться!

Все началось с того, что мне нужно было построить крошечное устройство с УМЗЧ на 10 Вт, микрофонным предусилителем и микропроцессорным управлением (программно настроенный порог чувствительности микрофона, управление с кнопки, детектор заряда аккумуляторов с индикацией и автоматическим переходом в standby после разрядки АКБ). Плата должна быть круглая, диаметром 25 мм (с 5-рублёвую монету). Очевидно - этот микроконтроллер должен быть очень маленьким и обязательно с АЦП! В каталогах такой быстро нашелся - Microchip ATTINY10. 1 кБ флеша, 32 байта ОЗУ и до 4 каналов 8-битного АЦП. Не долго думая, я взял именно этот МК, составил схему, развел плату, изготовил несколько макетов. Вуаля.

Я программировал для AVR когда-то в 2016-2017, не очень долго. Но это как езда на велосипеде, легко вспомнить даже спустя годы отсутствия практики. Отыскал Atmel Studio 6. Чик, чик - программа готова, пора испытывать... и тут началось.

У меня довольно давно лежит программатор-свисток, купленный в Aliexpress еще в 2018-м году. Я только один раз им пользовался - когда сливал бэкап незакрытой прошивки с одного устройства на Atmega128. Этот свисток называется USB ISP Version 2.0 - на плате MX-USBISP-V5.00. Он работает с китайской программой Progisp.

Берем все это дело: устройство, проводочки, программатор. Остается залить софт, тестировать, радоваться.

Было бы хорошо, но не было! Не смотря на то, что в списке доступных контроллеров есть ATtiny10 - ничего по факту не видим, Хьюстон, вы где? С устройством все ОК, с проводочками тоже ок. Короче со всем всё хорошо, но почему же все плохо?

Я такой пытаюсь найти ошибку в схеме, в распиновке, туда-сюда даташит листаю. Проходит несколько часов. Прям много неприлично дорогих часов (не швейцарских, наших, но все равно не приятно). Воз и ныне там. Я прям приуныл. Даю макеты Евгению: "На, мол, посмотри, ты же AVR-щик, сотвори чудо". А Женя уже тоже лет ?дцать как к AVR-ам охладел, но со снисходительной улыбкой взялся, мол решим, не извольте шкнить.

Покурив немножко манов, послушав советов людей, Женя говорит "сейчас через ордуину запилим все". Он зашивает в этого бедолагу какое-то чучело (sketch - чучело, макет, эскиз) и бедолага становится программатором с TPI интерфейсом. А вот этот TPI (tiny programming interface) как раз и используется для прошивки микрошечных attiny4,5,9,10. И Женя мне зашивает платы мои, макеты. А дембельский аккорд такой: настраивается фьюз (конфигурационный бит в микроконтроллере) ResetDisable - буквально мы ножку Reset будем использовать не как Reset, а как GPIO. Ну и типа без Reset уже не прошьешь контроллер. И как полагается, по закону всемирного свинства, прошивка не пошла. Ну короче надо отлаживать и отлаживать.

Чтобы прошивать ATtiny10 без Reset'а, нужно на ногу PB3 подавать 12 Вольт. И будет шиться. Эвоно как. И Евгений, мой отважный оруженосец, взялся повторно заливать прошивки с поданными 12 Вольтами на PB3. "Так прими же мой меч, вместе с ним – моё благословенье!" И все ведь получалось. Да в какой-то момент провод коснулся не тем концом, не того места... Сгорел Ордуин. Испустил дух свой ордынский. "-Ну не шмогла я, не шмогла, понимаешь!"

И вот я остаюсь один на один с проблемой и "не тем" программатором USB ISP Version 2.0. И покупать, ждать с маркетплейса так не хочется чота.. Думаю, так.. какой программатор у меня есть? CH341 есть и он же с SPI! И смотрю в гогол: ОН ШЬЕТ AVR! Есть софт. https://cloud.as.life/s/A9PPjt9X6wo5YQX :: RAM FACTORY, спасибо тебе!

Я решил перепрошить свисток USBISP под самую новую версию USB ASP с поддержкой TPI, прошивка здесь https://www.fischl.de/usbasp/ . И в одном зарубежном блоге наткнулся на информацию о том, что USBISP и USBASP отличаются аппаратно! Если коротко: Человек перепрошил свисток USBISP под USBASP и тот вообще перестал определяться компьютером как USB устройство. Нужна переделка - выкинуть (выпаять, сковырнуть) один резистор на 10 Ом (иногда 0 Ом попадается). 

Такая последовательность действий нужна:

1) С программатора свистка снимаем алюминиевый чехол и замыкаем 2 пада с пометкой "ИР" (припаиваем проводок - перемычку). И отколупываем резистор с пометкой "А"

2) Подключаем программатор CH341A к штырям 6-ю проводами в таком отношении: CH341 <-> USBISP

GND <-> GND, MOSI <-> MOSI, MIOS* <-> MISO, CLK <-> SCK, CS <-> RST, 5V <->VCC

* кринжовая опечатка

3) В свистке камень определяется как atmega88. Вот прошивка USB ASP с поддержкой TPI https://cloud.as.life/s/qDEFzYcyjAnPt3r . Прошиваем либо этим https://cloud.as.life/s/TWFJCG3A7nTmGbd (от maxxproff) либо этим https://cloud.as.life/s/bNHTDa8PMGHL54F (от ramfactory). Фьюзы не меняем, как было так пусть и остается.

После того как свисток прошит новейшей прошивкой 2011 года, можно проверить его работу. Вставьте свисток в USB, он должен определиться как USB ASP Device.

Драйвера USB ASP для Windows 10 берите отсюда https://cloud.as.life/s/e4Gk6n5Pq6zyAQK 

Устанавливать эти драйвера необходимо не через inf файл, а через программу установки! (Через inf с проблемами будет)

Установленный драйвер в диспетчере устройств определится как usbasp

Для работы с новым программатором вам понадобится новый софт. Предлагаю вашему вниманию знаменитый avrdude с графическим интерфейсом - avrdudess. Можно скачать с гитхаба или отсюда https://cloud.as.life/s/xFJro5RCSefkKAH 

Проверьте, как он работает. Выберите программатор usbasp (не clone) и нажмите detect. Когда к программатору не подключен микроконтроллер (target), то ошибка будет мол "таргет не могу найти". А программатор при этом видится. К программатору претензий нет.

Вот наступил момент когда у вас (и у нас) есть хороший программатор для ATtiny10. Перейдем ко второй части Марлезонского балета.

Для того, чтобы прошить ATtiny10, подключите программатор USBASP таким образом, как изображено на картинке:

  • В сети можно встретить способы подключения с использованием резистора 1 кОм на MISO - не надо. Делайте как по картинке, сработает.
  • Микроконтроллер будет прошиваться, если питать его напряжением 5В. Не будет даже видеться программой avrdude при питании 3.3В - убедился в этом лично.
  • В avrdudess через кнопку detect НЕ увидит ATtiny10. Проверяйте связь через чтение фьзов.
  • С битом RSTDISBL (когда Reset используется как GPIO) микроконтроллер тоже можно перепрошивать, не нужно каждый раз "лечить" фьюзы - это лишние хлопоты. Для перепрошивки камня на ножку Reset надо подать 12 Вольт (и не коротко, а постоянно, на все время работы с портом TPI).
  • Вылечить фьюзы нельзя простой записью 0xFF в конфигурацию. Вылечиваются фьюзы ATtiny4,5,9,10 так: переходим в avrdude версии 7.0 и новее (у меня 8.0) выполнить команду avrdude.exe -c usbasp -p t10 -x section_config -e и если фьюз RSTDISBL уже выставлен, программируйте подавая 12 Вольт на ножку Reset.
  • Внутрисхемное программирование - сложный вопрос. Если на пинах CLK или MOSI нагрузка 1 кОм - не шьет. Если 10 кОм - шьет. Такой эксперимент был.

и еще...

  • Превентивный коммент: Proteus не эмулирует attiny10!
  • Готовый программатор USBASP с TPI я что-то не нашел на маркетплейсах. Если знаете где взять поделитесь с читателями в обсуждениях, в телеге ЗДЕСЬ
  • Подпишитесь на канал в телеграмме. Это будет лучшей благодарностью.