Atmega fusebit doctor
Сразу должен сказать, что вся информация ниже давно известна, и эта статья только попытка немного собрать информацию в одном месте, с указанием авторов и источников.
Каждый кто программирует или просто прошивает AVR микроконтроллеры, рано или поздно сталкивается с тем, что микроконтроллер превратился в «кирпич» после очередной прошивки и дело чаще всего в том, что были неправильно выставлены «Фьюзы». Суть процесса «лечения» в том, что если биты fuse выставлены не правильно: бит защиты, внешнего внутреннего тактирования…, то «достучатся» до микроконтроллера обычным программатором не получится, и нужно использовать параллельный программатор. Можно использовать LPT порт и простейшую схему из 4-х резисторов, но LPT порт это что-то настолько древнее сегодня, что найти его почти не возможно.
«Доктор фьюзов» на самом деле и есть параллельный программатор, но работает он не с ПК, а заранее подготовленным для этого микроконтроллером. Но у этого доктора, есть маленькое отличие, это своего рода «высоковольтный программатор», ну почти.
Принцип работы такой:
- Читаем сигнатуру микроконтроллера, определяя что это за модель
- Если прочиталось, записываем в него данные чистого (нового) МК
- Все, можно пользоваться как новым, еще раз «окирпичивавть».
Наиболее полная информация (на мой взгляд) собрана на сайте getchip.net, поэтому с нее и начнем.
«Доктор» может изменить значение фьюзов:
— 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 необходимо откусить (лучше в плате вообще не сверлить отверстия под эти ножки).
Еще есть картинка для нанесения на плату со стороны деталей (монтажная картинка, шелкография).
Фьюз байты: Lock Bits = 0x 3F; High Fuse = 0x D1; Low Fuse = 0x E1; Ext. Fuse = 0x 00
Напоминание: Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
АДАПТЕРЫ ДЛЯ МИКРОКОНТРОЛЛЕРОВ.
Существуют предыдущие версии «доктора» но я не буду их приводить.
Варианты с сайта microsin.net
Переходничок был изготовлен из платки TQFP32-DIP, подойдет для восстановления фьюзов микроконтроллеров AVR в корпусе TQFP32, например ATmega8, ATmega168, ATmega328P и других.
Варианты с сайта programmator-ua.ucoz.ru
Недостатки которые были замечены и устранены:
1.Не определяется название пациента, только сигнатура.
2. Пациент находится постоянно под двумя напряжениями +5v0 и +12v0. Эти напряжения кратковременно пропадают при нажатии кнопки «Старт». Если быть невнимательным и вставлять/вынимать пациента со слота под напряжением, возможен выход последнего со строя.
3. Для правильной работы по восcтановлению ATtiny2313 изменился порядок подключения порта PD6, вместо шины BS2 на него заведена шина XA1. На прилагаемой плате переход с прошивки с v.2.11 на v.2.12 коммутируется всего одним нулевым резистором.
4. На плате также добавлен слот под ATtiny в восьми выводных корпусах. Это позволяет восстанавливать ATtiny 12/13/15/25/45/85, AT90S2323 без применения переходника.
Схема, по которой сделана плата:
Немного о работе.
Терминальная программа, например: HiperTerminal, при работе с прошивкой v.2.12 настраивается на скорость передачи данных 9600 бод, без проверки четности, 8 бит данных, 1 стоп-бит.
Установки для терминала:
baudrate: 9600
parity: none
databits: 8
stopbits: 1
handshake: none
Питание производится от источника постоянного напряжения 12v5 — 13v0.СОМ — кабель для связи AFD с компьютером готовят по нижеприведённой схеме:
Возможно существуют еще варианты прошивки и печатных плат. Если мне что-то попадется в руки, обязательно дополню материал.