Так уж получилось ,что мне пришли Attiny13 с заблокированным фьюзом RSTDISBL - в ячейках фьюзов был зашит мусор.Паралельно с перепиской с продавцом начались поиски решения проблемы.
Напомню,что у большинства микроконтроллеров Atmel вывод reset можно перепрограммировать в обычный вывод ,и в этом случае прошивка по SPI становится недоступно - программирование в этом случае возможно только через HVSP / HVPP программаторы:
HVSP(High Voltage Serial Programming) - это последовательный высоковольтный программатор для микроконтроллеров с малым количеством выводов.
HVPP(High Voltage Parallel Programming) - это паралельный высоковольтный программатор для микроконтроллеров с большим количеством выводов.
В интернете найден вариант доктора фьюзов Atmega fusebit doctor на основе микроконтроллера,небольшого количества радиокомпонентов и переходников под разные м/к.Он поддерживает микроконтроллеры и с HVPP и с HVSP вариантом.Устройство может востанавливать работу микроконтроллеров,у которых заблокирован reset (фьюз RSTDISBL) ,spi (фьюз SPIEN).
Для востановления Attiny13 было решено собрать "экпресс" вариант доктора на макетной плате и используя Arduino UNO.Схема была упрощена для использования только режимом с HVSP.
Получилась вот такая упрощенная схема:
Список деталей:
R1,R6 - 4.7 kOm.
R2,R4,R8,R9,R10,R11,R12 - 1 kOm.
R3 - 10kOm
R5,R7 - 100 Om.
Транзисторы - любые подходящие:
Q1 - N-P-N. Например 2N3904.
Q2 - P-N-P. Например 2N3906.
Программирование микроконтроллера:
Для наших целей необходим прошитый фьюз доктором микроконтроллер Atmega328P ,Atmega168,Atmega88 или Atmega 8,который должен быть установлен в Arduino.
К сожалению микроконтроллер необходимо прошивать другим программатором,так как мы будем менять фьюзы для использования внутреннего генератора:
Atmega 8 L:0xE1 H:0xD1
Atmega88,Atmega168 L:0x62 H:0xD7 E:0xF9
Atmega328 L:0x62 H:0xD1 E:0xFF
Рекомендуемые м/к : Atmega328 или Atmega168 -они поддерживают управление через консоль последовательного порта.В других м/к это не возможно.
Пример прошивки микроконтроллера Atmega328 через USBasp :
avrdude -c usbasp -p m328 -U flash:w:atmega_fusebit_doctor_2.11_m328p.hex -U hfuse:w:0xD1:m -U lfuse:w:0x62:m -U efuse:w:0xFF:m
Пример прошивки микроконтроллера Atmega328 через Arduino :
avrdude -c avrisp -P COM1 -b 19200 -p m328 -U flash:w:atmega_fusebit_doctor_2.11_m328p.hex -U hfuse:w:0xD1:m -U lfuse:w:0x62:m -U efuse:w:0xFF:m
Прошивки можно найти на официальном сайте или тут.Для каждого микроконтроллера имеется своя прошивка.
Если fusebit doctor больше не нужен,то состояние фьюзов можно вернуть ,воспользовшись функцией "записать загрузчик" в Arduino IDE подключив микроконтроллер так же через программатор.
Сборка схемы:
На картинке макетной платы не подключена точка 12 вольт к источнику питания.Я воспользовался выводом Vin.Если вы будете использовать напряжение с этого же вывода,то для начала проверте соотвествует ли оно нашим требованиям.
Обратите внимание,что на принципиальной схеме не отображена перемычка оранжевого цвета,которая разрешает режим erase - полное стирание микроконтроллера.Она необходима только,если у заблокированного микроконтроллера установлены lock биты.
Резисторы на 1к , которые подключены между микроконтроллерами -не обязательны,но они защищают прошивающий микроконтроллер от нештатных ситуаций.Вы можете упростить схему,но на свой страх и риск.
Перед первым запуском внимательно проверте все соединения - при возможных ошибках с питанием 12 вольт вы можете вывести из троя микроконтроллеры !
Сброс фьюзов на примере Attiny85:
Если вы уверены в отсутствии ошибок,то можете подключить питание к Arduino.Не забываем про внешнее питание +12 вольт.
Запускаем в среде Arduino IDE монитор порта и установливаем скорость 4800.Монитор последовательного порта можно использовать и другой.
Нажимаем кнопку reset на Arduino и мы должны увидеть данные пациента,на скриншоте показан уже сброшенный микроконтроллер:
Для сброса фьюзов по умолчанию необходимо ввести цифру 1 -write fusebits.После этого вы должны увидеть состояние :
Что значит установка фьюзов прошла успешно.
Если на микроконтроллере установлены lock биты,то сброс фьюзов будет не возможен,пока не будет выполнено полное стирание.В строке Lockbits будет указан статус ENABLED.
Для того,чтобы разблокировать микроконтроллер необходимо установить перемычку,выделенную оранжевым цветом(А4 на GND) и выбрать в меню пункт 4 - chip erase.Далее ,после разблокировки мы уже можем сбрасывать и сами фьюзы через опцию меню под номером 1.