среда, 24 апреля 2019 г.

Восстановление фьюзов ATtiny85

Разблокировка вывода Reset на ATtiny85

Фьюзы микроконтроллера отвечают за его предварительную настройку. Они позволяют указать источник тактирования, разрешить либо запретить работу сторожевого таймера, схемы контроля питания и т.д. Одни из них не столь принципиальны для работы микроконтроллера, другие, напротив, весьма критичны и их неосторожное изменение может привести к неприятным результатам. К примеру, фьюз RSTDISBL (External reset disable) позволяет запретить внешний сброс, при этом освободившийся от данной функции вывод микроконтроллера можно использовать как дополнительный цифровой пин. Однако вместе с входом внешнего сброса вы потеряете и возможность что-либо сделать с микроконтроллером, используя ISP программатор. Помочь в этой ситуации может высоковольтный программатор: он не использует сигнал сброса и запрограммированный RSTDISBL для него не помеха (к слову он и стоит значительно дороже внутрисхемного). Но есть и другой способ восстановления фьюзов ATtiny85, более доступный, о нем я и хочу рассказать.

Начнем с того, что AVR микроконтроллеры поддерживают до трех режимов программирования:
  • режим последовательного программирования (по интерфейсу SPI) - именно его используют внутрисхемные программаторы;
  • режим последовательного программирования при высоком напряжении;
  • режим параллельного программирования при высоком напряжении.

Под "высоким" здесь понимается напряжение 12В, подаваемое на вывод Reset для перевода микроконтроллера в режим программирования. Мы для восстановления фьюзов воспользуемся режимом последовательного программирования при высоком напряжении. Для обмена данными в этом режиме используются 4 линии: SCI (тактовый сигнал), SDI (вход данных), SII (вход команд) и SDO (вывод данных). Применительно к ATtiny85 указанным линиям соответствуют выводы PB3, PB0, PB1 и PB2:

ATtiny85 high voltage serial programming pinout
Назначение выводов ATtiny85 при высоковольтном программировании


Роль высоковольтного программатора у нас будет выполнять Ардуино. Для этого скачаем и зальем в нее следующий скетч: http://clc.to/hv_serial_prog

Этот скетч подходит также для разблокировки ATtiny25 и ATtiny45. Первоисточник данного способа вы можете найти по ссылке: https://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/

После заливки скетча подключаем микроконтроллер к Ардуино по схеме:

Схема для сброса фьюзов ATtiny85
Схема для сброса фьюзов ATtiny85/45/25


Вариант соединения для поклонников схем в fritzing

Наличие резисторов R1-R4 не принципиально, автор установил их для защиты выводов Ардуино от источника 12В в случае неправильного подключения. Транзистор нужен для управления высоким напряжением на входе Reset ATtiny85.

Источник 12В оставьте пока не подключенным. Подключаем Ардуино к компьютеру, запускаем IDE Arduino и открываем монитор порта на скорости 9600. Нам будет предложено ввести любой символ для продолжения. Вот теперь подключаем источник напряжения 12В. Такой порядок включения обусловлен алгоритмом высоковольтного программирования, который приведен в даташите (раздел 20.7). Вводим произвольный символ в мониторе порта и нажимаем ENTER. При этом в мониторе появится лог работы скетча:


- фьюзы ATtiny85 успешно сброшены. Отключаем микроконтроллер от источника 12В, после этого отключаем Ардуино от компьютера. Теперь нам снова доступен вход внешнего сброса ATiny85 и мы можем использовать ISP программатор.

Для меня установка фьюза RSTDISBL на ATiny85 уже привычное дело: это позволяет получить дополнительную линию ввода-вывода, а для заливки скетчей (в процессе отладки) можно использовать загрузчик Micronucleus. Надеюсь, данная статья поможет и вам и случайно установленный RSTDISBL уже не будет казаться проблемой.

5 комментариев:

  1. Владимир, здравствуйте! Делаете ли прототипы под заказ? Как с вами можно связаться?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Нет, я не беру заказы. Можете попробовать на форуме ардуино в разделе ищу исполнителя: arduino.ru/forumy/ishchu-ispolnitelya
      Со мной можно связаться по почте VladimirTsibrov@yandex.ru

      Удалить
  2. Подскажите Atmega 168 / 328 оживет если в скече просто адреса фюзов поменять на low_fuses=0xFF high_fuses=0xDE ?

    ОтветитьУдалить
  3. Для программирования ATtiny85 и др мк с использованием ноги RST в качестве входа, а так же для восстановления фьюзов удобно использовать простейший программатор на Ардуино: http://arduino.ru/forum/apparatnye-voprosy/universalnyi-avr-programmator-na-arduino

    ОтветитьУдалить