Реанимация Digispark

Как-то «играясь» с «чудом польской мысли в китайском воплощении», при очередном подключении Digispark-а к компьютеру,dgsp1 получил завораживающее сообщение:t85_notusb

Все попытки исправить ситуацию подстановкой различных драверов Digispark… не увенчались успехом. Невольно подумалось: «Вот мы и получили очередной кирпич»

Отложил плату в сторону, воткнул другую — ОК, все работает нормально! Через месяц, в «творческую паузу» 🙂 вернулся к заброшенной плате…

Что мы имеем: обычный ATtiny, аппаратный RESET которой «залочен»; с bootloader-ом «что-то не так». Выход — очевидный: надо «перезалить» загрузчик, оживив, тем самым, Digispark.

Первым делом подключил плату к ISP программатору (теплилась надежда — вдруг китайские друзья оставили RESET «в покое»). Чуда не вышло — ATtiny не откликалась. Оставался один путь — «страшный» высоковольтный программатор (есть такой режим — при подаче +12В на RESET — «любой кирпич» оживает) натравить на маленькую tiny… В интернете таких трюков с ATtiny — масса. Если коротко, то делаем следующие процедуры.

Берем какой-нибудь контроллер, который будет посылать в микросхему требуемую последовательность команд (очень удачным будет выбор Arduino UNO).

Собираем несложную схемку: смысл которой в управлении питанием ATtiny и подаче +12В на RESET микросхемы. (Не смотря на то, что на плате Digispark к выводу P1 подключен светодиод катодом на землю, а P2 и P3 имеют стабилитроны 3,6В, подключенные на землю — даже в таком виде схема работоспособна!)fuseresetbat85

Необходимую последовательность команд подаваемых в микросхему с определенными временными задержками формирует простой скетч — отличие моей программки от «типового решения» в длительности пауз, формируемых при подаче питания (в Digispark в цепи питания стоит 4,7 мкФ — приходится с запасом выдержать паузу после включения 5В).

Запускаем скетч, в мониторе (не забываем исправить скорость на 19200!!!) посылаем любую команду в последовательный порт и смотрим считанные fuses, а затем и то, что плата Arduino записала в ATtiny.

В результате такой процедуры fuses ATtiny сбрасываются в исходное состояниеt85_f_def

Нам важно, что RESET «освобождается» для своей основной функции сброса. Кроме того, частота тактирования теперь определяется внутренним RC-генератором (8МГц). Так же разрешается программирование по SPI.

После этого Digispark (в текущем состоянии — просто ATtiny85) можно подключить к обычному программатору и залить bootloader (например, «родной» micronucleus-1.06). Я пользовался упомянутой выше связкой Algorithm Builder и ISP программатором. Подключаем плату Digispark к программатору:digisp85

Выставляем Fuses с некоторой корректировкой «на будущее» — пожертвуем одним пином: вместо P5 у нас будет обычный RESET (см RSTDISBL).t85_f_new

Не забываем нажать Write — для записи выставленных fuses в ATtiny. После этого «заливаем» bootloader такой программкой для Algorithm Buildert85_bootloader1-11

Здесь 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: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".