Как-то «играясь» с «чудом польской мысли в китайском воплощении», при очередном подключении Digispark-а к компьютеру,
получил завораживающее сообщение:
Все попытки исправить ситуацию подстановкой различных драверов Digispark… не увенчались успехом. Невольно подумалось: «Вот мы и получили очередной кирпич»
Отложил плату в сторону, воткнул другую — ОК, все работает нормально! Через месяц, в «творческую паузу» 🙂 вернулся к заброшенной плате…
Что мы имеем: обычный ATtiny, аппаратный RESET которой «залочен»; с bootloader-ом «что-то не так». Выход — очевидный: надо «перезалить» загрузчик, оживив, тем самым, Digispark.
Первым делом подключил плату к ISP программатору (теплилась надежда — вдруг китайские друзья оставили RESET «в покое»). Чуда не вышло — ATtiny не откликалась. Оставался один путь — «страшный» высоковольтный программатор (есть такой режим — при подаче +12В на RESET — «любой кирпич» оживает) натравить на маленькую tiny… В интернете таких трюков с ATtiny — масса. Если коротко, то делаем следующие процедуры.
Берем какой-нибудь контроллер, который будет посылать в микросхему требуемую последовательность команд (очень удачным будет выбор Arduino UNO).
Собираем несложную схемку: смысл которой в управлении питанием ATtiny и подаче +12В на RESET микросхемы. (Не смотря на то, что на плате Digispark к выводу P1 подключен светодиод катодом на землю, а P2 и P3 имеют стабилитроны 3,6В, подключенные на землю — даже в таком виде схема работоспособна!)
Необходимую последовательность команд подаваемых в микросхему с определенными временными задержками формирует простой скетч — отличие моей программки от «типового решения» в длительности пауз, формируемых при подаче питания (в Digispark в цепи питания стоит 4,7 мкФ — приходится с запасом выдержать паузу после включения 5В).
Запускаем скетч, в мониторе (не забываем исправить скорость на 19200!!!) посылаем любую команду в последовательный порт и смотрим считанные fuses, а затем и то, что плата Arduino записала в ATtiny.
В результате такой процедуры fuses ATtiny сбрасываются в исходное состояние
Нам важно, что RESET «освобождается» для своей основной функции сброса. Кроме того, частота тактирования теперь определяется внутренним RC-генератором (8МГц). Так же разрешается программирование по SPI.
После этого Digispark (в текущем состоянии — просто ATtiny85) можно подключить к обычному программатору и залить bootloader (например, «родной» micronucleus-1.06). Я пользовался упомянутой выше связкой Algorithm Builder и ISP программатором. Подключаем плату Digispark к программатору:
Выставляем Fuses с некоторой корректировкой «на будущее» — пожертвуем одним пином: вместо P5 у нас будет обычный RESET (см RSTDISBL).
Не забываем нажать Write — для записи выставленных fuses в ATtiny. После этого «заливаем» bootloader такой программкой для Algorithm Builder
Здесь micronucleus-1.11.hex — не совсем обычный bootloader с GitHub. Algorithm Builder потребовал убрать предпоследнюю строку из текста. HEX-файл надо положить в папку с программой (проектом alp).
ВАЖНО! Родной прошивкой для Digispark является версия 1.06 micronucleus. Но, как я не бился, она у меня не пошла… А вот 1.11 — сразу заработала (!?) — из плюсов — появились «лишние» 200 байт для кода 🙂
Отключаем Digispark от программатора и «втыкаем» плату в USB порт компьютера… ОК, в диспетчере появляется Digispark Bootloader и Arduino IDE видит и работает с Digispark!
Спасибо, подобным оживил свою платку Digispark =)