AtMega fusebit doctor - восстанавливаем фьюзы микроконтроллеров. Исправление фьюзов AVR

Уверен, многие имеют микроконтроллеры с неправильно прошитыми фузами и непригодными для дальнейшего использования. Но не спешите их выбрасывать - есть интересное устройство, специально предназначенное для исправления ошибочно установленных фьюзов. Представляем « » - это устройство предназначено вернуть к жизни с неправильно прошитыми фьзами. Такими фьюзами могут быть:

- CKSEL фьюзы выбора задающего генератора (выбран внешний генератор при его отсутствии или выбрана очень маленькая частота внутреннего);

- SPIEN запрет последовательного программирования;

- RSTDISBL использование ножки сброса как дополнительной линии ввода-вывода;

Установленные LOCK биты;

Другие, мешающие последовательному программированию.

Принцип работы восстановителя прост - подаем на плату 12 вольт, вставляем в панельку «испорченный» микроконтроллер, нажимаем кнопочку «START » и в момент получаем новенький рабочий микроконтроллер. Очень просто, даже не нужен компьютер. И если внешне устройство выглядит просто, то внутри все гораздо сложнее. При нажатии кнопки «START » устройство читает сигнатуру микроконтроллера-пациента, при этом, если она не читается, делается несколько попыток прочитать различными способами. После того как сигнатура прочитана по базе определяется тип микроконтроллера и восстанавливаются заводские, для данного микроконтроллера, установки фьюз бит. Если сигнатура неизвестна или микроконтроллер выдает ее неверно устройство установит фьюз биты в такое состояние, при котором станет возможным последовательное программирование. При восстановлении фьюз бит прошивка микроконтроллера остается нетронутой. Еще на плате есть перемычка «ALLOW ERASE » , при замыкании которой устройство полностью «обнулит» микроконтроллер. Это нужно в том случае, если пациент «залочен», т.е. установлены защитные биты которые препятствуют чтению/записи микроконтроллера.

Для индикации работы устройство имеет два светодиода - красный и зеленый .

Если горит зеленый - пациент успешно вылечен, фьюз биты восстановлены до заводских. Если микроконтроллер «залочен» (LockBits включены), просто проверяются фьюз биты и если они совпадают с заводскими - загорается зеленый светодиод.

Если горит красный - проблемы с сигнатурой чипа, невозможно прочитать, нет микроконтроллера в панельке или нет такой сигнатуры в базе данных.

Если зеленый мигает - сигнатура в порядке, фьюз биты с ошибкой, но исправить их невозможно, так как микроконтроллер «залочен» (LockBits включены), необходимо полное стирание микроконтроллера (нужно установить перемычку для стирания - «ALLOW ERASE »).

Если мигает красный - сигнатура в порядке, микроконтроллер «не залочен», но, по какой-то причине, невозможно восстановить фьюз биты.

Если Вы хотите получить более подробную информацию о процессе «лечения» - на плате есть выход UART . Отправьте этот сигнал на терминал и получите «распечатку» того, что было сделано. Установки для терминала:

baudrate: 4800
parity: none
databits: 8
stopbits: 1
handshake: none

На плате установлены три панельки для контроллеров на 20 (Attiny2313 …), 28(Atmega48/88/168, Atmega8 …), 40 (Atmega16, Atmega8535 …) ножек. Если Вы решили «полечить» другого «пациента», то на плате предусмотрен специальный разъем для подключения адаптеров с панельками под любой, нужный Вам, микроконтроллер. Устройство поддерживает аж 106 типов микроконтроллеров AVR. Вот полный список:

1kB: AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15

2kB: Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22,Attiny25, AT90s2313, AT90s2323, AT90s2343

4kB: Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45

8kB: Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535

16kB: Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162

32kB: Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32

64kB: Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64

128kB: Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128

256kB: Atmega2560, Atmega2561

Схема устройства для восстановления испорченных микроконтроллеров довольно простая.

Плата разведена хорошо, но есть один нюанс, о котором важно не забыть при сборке устройства. Ножки 40-ка пиновой панельки с 29 по 37 необходимо откусить (лучше в плате вообще не сверлить отверстия под эти ножки).

Теперь осталось только прошить микроконтроллер ATmega8 и устройство готово! Данный вариант прошивки еще есть для микроконтроллеров: Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P. Прошивка для микроконтроллеров с 16kB и 32kB памяти, кроме того, выдает названия восстанавливаемых микроконтроллеров. В результате работы «Atmega fusebit doctor» мною были возращены к жизни несколько ATtiny2313, ATmega48, Atmega8535. Схему испытал: феска.

Иногда случается что исправный, правильно подключенный микроконтроллер перестает определяться программой для прошивки. Это может происходить в следствии нескольких причин:

  1. Программирование через SPI запрещено
  2. Ножка RESET стала обычным пином порта
  3. Неправильно выбран источник тактирования

Если в первом и втором случае без параллельного программатора не обойтись, то при неправильном выбранном источнике тактирования, можно попробовать методы описанные в этом небольшом руководстве. Для этого нам потребуются:

  • Кварц ~4 МГц
  • Конденсаторы от 12 пФ до 22 пФ (2 шт)
  • Резистор 10 кОм
  • Микросхема 74HC00
  • Прямые руки:-)

Предположим, что мы не знаем какой источник тактирования у нас выбран. Существуют следующие источники тактирования:

  • Кварцевый резонатор
  • Внешняя RC цепочка
  • Внешней генератор

Есть еще внутренний RC генератор но по понятным причинам он нам не интересен. Для воскрешения контроллера нужно последовательно перебирать возможные варианты.

Кварцевый резонатор

Кварцевый резонатор подключается к ногам XTAL2 и XTAL1. Каждая нога кварца подсоединена к конденсатору который в свою очередь подключен на землю. Конденсаторы любые от 12 до 22 пф.

Если подключение кварца не помогло то пойдем дальше

Внешняя RC-цепочка

Использовать ее для тактирования я бы не стал, ибо частота будет плавать как сами знаете что в проруби. Подключается она к контроллеру вот таким образом:

ВАЖНО: Вывод XTAL2 должен болтаться в воздухе! Подключать его никуда не надо. Если и это не помогает то остается последний вариант

Внешний генератор

Этот генератор можно сделать практически из любой логики или например из таймера 555. Под рукой оказалась микросхема 74HC00. Вместо нее можно использовать нашу к155ла3. Схема предельно проста и не требует наладки:

Генератор работает на частоте около 1.3 МГц. Естественно ее можно подстроить меняя номиналы резистора и конденсатора, но вряд-ли в этом будет необходимость. Плату я для него не делал т.к. смысла не было. Ногу XTAL2 нужно оставить болтаться в воздухе. Если и после этого контроллер не завелся, то это значит что контроллер умер или программирование по SPI запрещено или отключен RESET. Помочь тут может только параллельный программатор.

Вопросы, предложения, уточнения кидаем в комментарии.

Каждый, кто начинает работать с микроконтроллерами AVR знает, что неправильной установкой "фьюзов", можно прийти к печальным последствиям.
Распространенными случаями является ошибочное отключение вывода Reset микроконтроллера (Fuse-бит RSTDISBL, для возможности использовать его как линию ввода/вывода) или отключение режима ISP программирования (Fuse-бит SPIEN) - в этих случаях внутрисхемное программирование станет невозможным.
Восстановить их работоспособность и вернуть к жизни может лишь параллельный программатор.

Схема такого программатора довольно наворочена, да и применение такого программатора в быту разовое - оживить ошибочно прошитый микроконтроллер. По этому не каждому, да и практически никому не охота его собирать, всегда проще и дешевле - купить новый микроконтроллер. А «мертвые» микроконтроллеры или выкидываются, или собираются в коробочку для лучших времён, авось когда нибудь появится возможность добраться до параллельного программатора.

Недавно я "набрёл" в интернете на интересное устройство, под названием «Atmega fusebit doctor», с которым и хочу познакомить наших читателей.
Автор этой разработки - поляк Pawel Kisielewski. Схема этого устройства относительно несложная и оно предназначено лишь только для одной цели - вернуть к «жизни» микроконтроллер с неправильно прошитыми фьюзами.

Такими фьюзами могут быть:
- CKSEL фьюзы выбора задающего генератора (выбран внешний генератор при его отсутствии или выбрана очень маленькая частота внутреннего);
- SPIEN запрет последовательного программирования;
- RSTDISBL использование ножки сброса как дополнительной линии ввода-вывода;
- установленные LOCK биты;
- другие, мешающие последовательному программированию.

Пользоваться этим устройством очень просто - подаем на плату 12 вольт от стабилизированного БП, вставляем в панельку «мёртвый» микроконтроллер, нажимаем кнопочку «START » и через секунды получаем "новенький" рабочий микроконтроллер. Причём «Atmega fusebit doctor» не затрагивает программу, зашитую в микроконтроллер, ему вообще "до лампочки", что там зашито, он только проверяет "фьюзы". Видите, всё очень просто и здесь даже не нужен компьютер.

Принцип работы «Atmega fusebit doctor» .

При нажатии кнопки «START», «Atmega fusebit doctor» читает сигнатуру "мёртвого" микроконтроллера, если она не читается, то делается несколько попыток прочитать её различными способами. После того как сигнатура прочитана, по базе определяется тип микроконтроллера и восстанавливаются заводские установки фьюз бит.
Если сигнатура неизвестна или микроконтроллер выдает ее неверно, устройство установит фьюз биты в такое состояние, при котором станет возможным последовательное программирование.
При восстановлении фьюз бит, прошивка микроконтроллера, как и было сказано выше, остается нетронутой. Еще на плате есть перемычка «ALLOW ERASE «, при замыкании которой, устройство полностью «обнулит» микроконтроллер. Это необходимо в том случае, если микроконтроллер «залочен», т.е. установлены защитные биты которые препятствуют чтению/записи микроконтроллера.

Для индикации работы «Atmega fusebit doctor» имеет два светодиода - красного и зелёного цвета.

Если горит зеленый - значит микроконтроллер успешно вылечен, фьюз биты восстановлены до заводских. Если микроконтроллер «залочен» (LockBits включены), просто проверяются фьюз биты и если они совпадают с заводскими - загорается зеленый светодиод.
Если горит красный - проблемы с сигнатурой чипа, невозможно прочитать, нет микроконтроллера в панельке или нет такой сигнатуры в базе данных.
Если зеленый мигает - сигнатура в порядке, фьюз биты с ошибкой, но исправить их невозможно, так как микроконтроллер «залочен» (LockBits включены), необходимо полное стирание микроконтроллера (нужно установить перемычку для стирания - «ALLOW ERASE»).
Если мигает красный - сигнатура в порядке, микроконтроллер «не залочен», но, по какой-то причине, невозможно восстановить фьюз биты.

Если Вы хотите получить более подробную информацию о процессе «лечения» микроконтроллера, на плате для этого есть выход UART . Отправьте этот сигнал на терминал, и Вы получите «распечатку» того, что было сделано в процессе лечения.

Установки для терминала следующие:
baudrate: 4800
parity: none
databits: 8
stopbits: 1
handshake: none

Конструкция «Atmega fusebit doctor»

На печатной плате установлены три панельки для микроконтроллеров-«пациентов» на 20 (Attiny2313 …), 28 (Atmega48/88/168, Atmega8 …), 40 (Atmega16, Atmega8535 …) ножек. Если Вы решили «полечить» другого «пациента», то на плате предусмотрен специальный разъем для подключения адаптеров с панельками под любой, нужный Вам, микроконтроллер.
«Atmega fusebit doctor» поддерживает более сотни типов микроконтроллеров AVR.

Вот их полный список:

Зелёным цветом отмечены микроконтроллеры, которые были проверены и удачно восстановлены.

1kB:
AT90s1200 , Attiny11, Attiny12, Attiny13/A , Attiny15
2kB:
Attiny2313/A , Attiny24/A, Attiny26 , Attiny261/A, Attiny28, AT90s2333, Attiny22,Attiny25, AT90s2313 , AT90s2323, AT90s2343
4kB:
Atmega48/A , Atmega48P/PA, Attiny461/A , Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
8kB:
Atmega8515, Atmega8535, Atmega8/A, Atmega88/A , Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85 , Attiny861/A, Attiny87, Attiny88, AT90s8515 , AT90s8535
16kB:
Atmega16/A , Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162 , Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA , Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
32kB:
Atmega32/A , Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA , Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P , Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32
64kB:
Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA , Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64
128kB:
Atmega103, Atmega128/A, Atmega1280 , Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
256kB:
Atmega2560, Atmega2561

Сборка устройства.

Схема устройства довольно простая. Номиналы резисторов можно варьировать в небольших пределах. Питается устройство от внешнего стабилизированного блока питания с напряжением 12 вольт. Подключается БП к соответствующему 2-х контактному разъёму на печатной плате.


059-atmega_fusebit_doctor_V2e_schematic.pdf - Схема "ATmega FuseBit Doctor"

При сборке устройства есть один нюанс, о котором важно не забыть.
При установке на плату панелек, ножки 40-ка пиновой панельки, с 29 по 37 - необходимо откусить, или ещё лучше в плате вообще не сверлить отверстия под эти ножки. Ниже на рисунке это место обведено красно-розовым цветом.

В архиве вместе с печаткой, есть и картинка для нанесения на плату со стороны деталей (монтажная картинка). Монтаж с такой "маской" превращается в простую процедуру установки радиодеталей по картинкам ("маске"). Такой рисунок на плату так-же можно нанести методом ЛУТ, после чего, его необходимо будет покрыть лаком, иначе он быстро сотрется.
059-atmega_doctor_plate_v2d_Sprint.rar - Печатка для "ATmega FuseBit Doctor" в Sprint Layout 6.
059-atmega_fusebit_doctor_V2e_PCB.zip - Печатка и маска для "ATmega FuseBit Doctor" в "PDF".
Далее устанавливаем на плате перемычки, радиодетали, ставим панельки, и в итоге получаем вот такое законченное устройство:

Теперь осталось только прошить микроконтроллер ATmega8 и устройство готово!
059-atmega_fusebit_doctor_2.09.hex - Прошивка "ATmega FuseBit Doctor".

Да, в качестве основного микроконтроллера кроме ATmega8 , можно применить Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P .
Установка фьюзов для микроконтроллера, показана на рисунке ниже.

Фьюз байты: Lock Bits = 0x 3F ; High Fuse = 0x D1 ; Low Fuse = 0x E1 ; Ext. Fuse = 0x 00

Как проверить, правильно ли Вы их выставили в программаторе? В разных программаторах они выставляются по разному. В одних так, как на картинке, в других зеркально. Чтобы узнать, как поступить, нужно в программатор поставить чистый МК с заводской установкой фьюзов, и просто считать только установку фьюзов. Дальше сравнить фьюз-бит "SPIEN". Если на Вашем программаторе у него не стоит галочка, то фьюзы выставляются так, как на картинке. Но если галочка будет стоять, то все фьюзы выставляются зеркально. То есть там, где на картинке галочек нет - их ставят и наоборот.

Данный вариант прошивки в архиве, еще есть и для микроконтроллеров:
Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P.
Прошивка для микроконтроллеров с 16kB и 32kB памяти, кроме того, выдает названия восстанавливаемых микроконтроллеров.

Адаптеры для микроконтроллеров.

Автором были разработаны два адаптера:
- для HVPP программирования 20-ти пиновых Attiny26 подобных и 40-ка пиновых Atmega8515 подобных контроллеров.
- для HVSP программирования для 8-ми пиновых и 14p-ти пиновых микроконтроллеров с высоковольтным последовательным способом программирования.
059-adapter_dip20-dip40 - Aдаптеры для программирования 20 и 40 пиновых микроконтроллеров в DIP корпусах.
059-adapter_dip8-dip14 - Адаптер для программирования 8 и 14 пиновых микроконтроллеров в DIP корпусах.

_________________________________________________________________________________________________________

Если Вы работали на встроенном тактовом генераторе и случайно прошили фьюзы (например нажали кнопку , забыв при этом снять галочку " запрограммировать фьюзы" Program Fuse Bit(s) - микроконтроллер может отключить встроенный тактовый генератор и переключиться на работу с внешним кварцем (естественно перестав при этом работать).

При попытке прошить кристалл, CodeVision выдаёт подобные ошибки:


или так:

Фьюзы - это "переключатели" внутри микроконтроллера, отвечающие за подключение встроенного тактового генератора, за подключение внешнего кварца, за подключение режима работы от внешнего генератора итд. Настроить их прямо в программе, так же как регистры, нельзя. Настраиваются фьюзы только при прошивке.

Fuse по-английски "плавкая перемычка". На старых микроконтроллерах фьюзы были одноразовые. Это была группа проводящих участков на кристалле микроконтроллера. Если проводящий участок нужно было запрограммировать, на него подавали большой ток, структура кристалла в этом месте разрушалась и переставала проводить ток. Повреждённый непроводящий участок считали за лог. нуль ; целый участок - за лог. единицу .

Сейчас фьюзы многоразовые (это просто вспомогательная ячейка памяти) , но пережиток тех времён остался в обозначении запрограммированных фьюзов:
Запрограммированный
фьюз обозначают дыркой (лог.0, непроводящий участок );
Незапрограммированный - галочкой (лог.1, проводящий участок );

Таким образом, фьюзы программируются "дырками", а не галочками.
__________________________________________________________________________________________________

Для восстановления работоспособности микроконтроллера, найдите в окошке
ProgramFuseBit(s) биты:
CKSEL0
CKSEL1
CKSEL2
CKSEL3
SUT0
SUT1
CKOPT
...и сравните с табличкой. Определите, на какой режим работы вы только что прошили свой
микроконтроллер :

Чаще всего, все вышеуказанные биты - это дырки (по умолчанию в CVAVR не стоит ни одна галочка), т. е. все эти биты запрограммированы. Что соответствует подключению внешнего кварца с частотой от трёх до 8 МГц:



1. Купите кварц на частоту от трёх до 8 МГЦ или выпаяйте из компьютерного лома (частота кварца написана на его корпусе). И два конденсатора от 12 до 36 пф.



2. Найдите на микроконтроллере выводы XTAL1 и XTAL2, воткните между ними кварц. С этих же выводов бросьте на общий провод конденсаторы (хотя можете и без них попробовать).


3. В конфигурации проекта поменяйте частоту чипа на 8000000 (или другую, на которую рассчитан Ваш кварц). Можно не менять, но тогда функция delay будет неправильно рассчитывать задержки (если вы, конечно, будете её использовать).


4. На всякий случай перепрошейте фьюзы (теперь уже CVAVR должна нормально распознавать микроконтроллер):
Tools >> Chip programmer >> Program >> Fuse Bit(s)

5. Почистите чип и ещё раз залейте прогу (естественно не забудьте откомпилировать её перед этим).
Если будут вылезать ошибки, попробуйте просто закрыть окошко с ошибкой и прошить ещё разок. Протоколы для программаторов разрабатывались ещё во времена Windows95 и для старых моделей компов. На некоторых современных, особенно многоядерных компьютерах с Windows XP (Windows Vista, Windows 7) иногда бывает только со второго-третьего раза нормально прошивается (во всяком случае у меня).

6. Когда снова получите "власть" над микроконтроллером, тут уж как хотите - можете его обратно на встроенный генератор переключить, а можете и на кварце продолжать работать, на высокой частоте.

PS. Прочитать значения фьюзов из CodeVisionAVR (и записать их перед тем, как что-либо проделывать с микроконтроллером, чтобы восстановить потом можно было) можно так: Tools >> Chip Programmer >> Read >> Fuse Bit(s)