Atmega fusebit doctor |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Многие радиолюбители знают (иногда на собственном печальном опыте), что микроконтроллер AVR можно вывести из строя неосторожным программированием настроечных бит (так называемых фьюзов). Будучи запрограммированными неправильно, эти биты сохраняются в энергонезависимой памяти, и могут привести к невозможности дальнейшего программирования микроконтроллера или выбору фьюзами его тактовой частоты. По крайней мере невозможно восстановить микроконтроллер обычными средствами, без наличия специального высоковольтного HVPP/HVSP программатора. Высоковольтный параллельный (HVPP) или последовательный (HVSP) программатор относится к профессиональным инструментальным средствам разработчика, и поэтому его купить непросто - из-за высокой цены и малой доступности. Польский радиолюбитель Pawel Kisielewski разработал несложное устройство, позволяющее восстанавливать состояние фьюзов микроконтроллера в состояние по умолчанию - Atmega fusebit doctor [1]. Примечание: к сожалению, разработчик не предоставил исходный код для Atmega fusebit doctor. Но даже несмотря на это, проект все равно обрел популярность. Также есть старый вариант такого же fuse-доктора, который предназначен только для лечения микроконтроллеров ATtiny [4], к нему исходники выложены. Чаще всего причина проблем с фьюзами, из-за которых микроконтроллеры AVR приходят в негодность - неправильный выбор источника тактирования (биты фьюзов CKSEL), запрет программирования через SPI (бит фьюзов SPIEN), или запрет вывода сброса (фьюз RSTDISBL). Если в первом случае Вы можете помочь себе сами, подключив внешний источник тактов (некоторые программаторы AVR имеют для этого специальный выход), то 2-й и 3-й случаи ошибочной манипуляции с фьюзами нельзя вылечить стандартным последовательным программатором. Большинство радиолюбителей не знают, как собрать параллельный программатор, потому что это довольно сложно и дорого, и проще и быстрее купить новый микроконтроллер. Atmega fusebit doctor, как следует из названия, это устройство, предназначенное для восстановления "убитых" микроконтроллеров AVR ATmega (и ATtiny начиная с версии v2.04 устройства) путем записи в них корректных значений бит фьюзов. Описанное простое и дешевое устройство позволит исправить Ваши брикнутые микроконтроллеры за несколько секунд.
HVPP расшифровывается как high voltage parallel programming, т. е. высоковольтное параллельное программирование. HVSP расшифровывается как high voltage serial programming, т. е. высоковольтное последовательное программирование. Это устройство использует параллельный и последовательный принципы высоковольтного программирования микроконтроллеров AVR. С помощью этих методов можно "достучаться" до убитых микроконтроллеров, у которых запрещен сброс или программирование ISP. В настоящий момент поддерживается 145 типов микроконтроллеров AVR, но не все из них были протестированы. Те, что были проверены, подкрашены зеленым цветом. Автор просит в случае проблемы с каким-либо микроконтроллером сообщить ему, тогда он исправит ошибку. Список рассортирован по объему памяти программ микроконтроллера (FLASH). 1 килобайт: AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15 2 килобайта: Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343 4 килобайта: Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45 8 килобайт: 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 32 килобайта: 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 64 килобайта: Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64 128 килобайт: Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128 256 килобайт: Atmega2560, Atmega2561 [Как восстановить фьюзы "убитого" микроконтроллера] Просто поместите убитый AVR в сокет, нажмите кнопку START и... и это все. Вы получите восстановленный, работоспособный микроконтроллер в том виде, как он пришел с завода Atmel. На плате fuse-доктора есть 3 слота для установки большинства совместимых микроконтроллеров AVR, которые совпадают с цоколевкой DIP-версий Atmega8, Atmega16, Attiny2313. Имеется также дополнительный коннектор, куда Вы можете подключить адаптеры: #1 adapter расширение HVPP, для совместимых с 20-выводными Attiny26 и совместимых с 40-выводными Atmega8515. HVSP adapter для 8-выводных и 14-выводных процессоров, которые можно запрограммировать через HVSP. Вы можете создать свои собственные адаптеры для других типов процессоров, с DIP-корпусами или SMD, можно также использовать макетную плату (breadboard) для этой цели – просто подключите нужные сигналы к нужным выводам, используя разноцветные проводные перемычки (платы беспаечного макетирования breadboard и штыревые перемычки для них свободно продаются на aliexpress или других DIY-магазинах для радиолюбительского творчества). Как определить, как подключить самому микроконтроллер? Откройте даташит на Ваш AVR, перейдите в раздел "memory programming", затем "parallel programming", посмотрите названия сигналов, все сигналы подписаны под слотом DIP40. В памяти fuse-доктора есть еще свободное место, так что проект может быть доработан в любое время. Fuse-доктор смонтирован на односторонней печатной плате размером 55 x 92 мм. На верхней стороны необходимо установить несколько перемычек, либо можно сделать плату двухсторонней - выбор за Вами. Резисторы R7..R23 могут быть любого номинала от 100 Ом до 10 кОм, но лучше всего поставить от 470 Ом до 1 кОм. Внимание: При монтаже кроватки DIP40 Вы должны удалить из неё контакты от 29 до 37. Для этих выводов восстанавливаемого микроконтроллера не нужен электрический контакт со схемой, и печатные проводники, которые проходят в этом месте позволили сделать плату меньше и дешевле (можно сделать плату, где токопроводящие дорожки находятся толькo с одной стороны). На картинке показано место, откуда нужно удалить контакты на кроватке DIP40. [Использование fuse-доктора] Перемычка ALLOW ERASE позволит fuse-доктору очистить всю память FLASH и EEPROM. Если эта перемычка не установлена, то fuse-доктор не будет очищать память, но в этом случае может и не вылечить микроконтроллер, если память микроконтроллера заблокирована битами защиты (lockbits). После установки брикнутого AVR в сокет и нажатия кнопки START fuse-доктор инициирует запуск режима параллельного или последовательного высоковольтного программирования. Выбор будет сделан автоматически, fuse-доктор распознает адаптер HVSP и запустит восстановление в режиме HVSP. После этого fuse-доктор будет ждать появления лог. 1 на выводе RDY/BSY. Затем будет прочитана сигнатура восстанавливаемого AVR, и будет выполнена проверка, поддерживается ли этот микроконтроллер. На следующем шаге будет выполнена очистка памяти, если пользователь это разрешил (т. е. если установлена перемычка ALLOW ERASE). Затем будут проверены биты защиты lockbits, и если они не заблокированы, то fuse-доктор установит все биты фьюзов в фабричное состояние по умолчанию, учитывая возможное наличие расширенных байт битов фьюзов (у некоторых старых AVR есть только один байт фьюзов LOW, так что разные ситуации корректно обрабатываются). После того, как биты фьюзов проверены, fuse-доктор сообщает о результате миганием индикационных светодиодов. [Светодиоды индикации] Для индикации состояния на плате fuse-доктор установлены 2 светодиода - зеленый (GOOD) и красный (BAD). Вот описание их работы:
[Текстовый терминал] Примечание: терминал дополнительная функция fuse-доктора, которая не нужна для его нормальной работы. Fuse-доктор может работать автономно, без подключенного компьютера PC, и все, что нужно знать нам сообщат красный и зеленый светодиоды. Вы можете подключить fuse-доктор через интерфейс RS232 к компьютеру, и через него отслеживать на экране процесс восстановления фьюзов. Информация будет поступать в процессе выполнения всех действий через UART управляющего микроконтроллера fuse-доктора. Для корректного подключения требуется правильно согласовать TTL-уровни UART с подключением к компьютеру. Если у Вас старый компьютер, на котором сохранился традиционный RS-232, то понадобится преобразователь уровней наподобие MAX232 (или [2]). Если у Вас современный ноутбук, и нужно подключиться через USB, то используйте конвертеры USB - TTL UART [3]. Настройки терминала для подключения: скорость 4800 бод, без бита четности (parity: none), 8 бит данных, 1 стоп-бит, без наличия подтверждения передачи и без управления потоком (handshake: none, Flow control: none). [Дополнительные замечания] Последняя прошивка fuse-доктора - версия 2.11 (файл наподобие atmega_fusebit_doctor_2.11_mXXX.bin или atmega_fusebit_doctor_2.11_mXXX.hex от 01.05.2011). В предыдущей версии 2.10 были ошибки (в частности, не восстанавливались микроконтроллеры ATmega328P). Для fuse-доктора используйте микроконтроллеры: ATmega8, ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328, ATmega328P, и их более новые (и низковольтные) версии с суффиксами A или L. Всегда используйте последнюю версию прошивки, память EEPROM прошивать не нужно. Для питания fuse-доктора используйте стабилизированное, сглаженное напряжение постоянного тока 12V. Более высокое напряжение может повредить восстанавливаемый микроконтроллер! Код программы fuse-доктора был написан на основе описаний режимов программирования HVPP и HVSP из даташитов подходящих микроконтроллеров AVR. Если Вам нужен fuse-доктор для семейства ATtiny AVR, то обратите внимание на предыдущий проект автора - Attiny fusebit doctor [4]. К сожалению, в этом проекте возможны некоторые ошибки, и он больше не поддерживается, потому что более новый Atmega fusebit doctor поддерживает все модели семейства ATtiny AVR. Однако этот проект также опубликован с исходным кодом, и при изучении даташита AVR в его исходном коде проще разобраться, чтобы понять механизм программирования. Биты фьюзов. В микроконтроллере fuse-доктора используется внутренняя тактовая частота 1 МГц, и разрешен бит EESAVE (см. файл README). Таким образом, если Вы купили новый микроконтроллер, то никакие фьюзы менять не надо - микроконтроллер и так уже работает на частоте 1 МГц. Бит EESAVE не обязателен, т. к. запрещает очистку памяти EEPROM при перепрограммировании firmware (т. е. в данном случае программы fuse-доктора), а в программе fuse-доктора EEPROM просто используется для сохранения счетчика количества вылеченных чипов, которое посылается через UART терминала. В обновлении 2.1X добавлена новая функциональность. Теперь через терминал можно послать нужное значение фьзов и битов защиты, и таким образом работать с чипами, у которых не распознана сигнатура. Если Вы подключите вывод терминала TX к выводу RX печатной платы fuse-доктора, то ручной режим будет разрешен автоматически. Это требует, чтобы в режиме ожидания на выводе TX терминала была лог. 1 - так и произойдет, если он будет подключен к TTL UART/RS232. Также необходимо на плате fuse-доктора наличие нижнего подтягивающего резистора (pulldown) номиналом 10 кОм. Если это условие не соблюдается, то fuse-доктор будет работать в обычном, автоматическом режиме. Как работает новый функционал: сначала fuse-доктор читает сигнатуру восстанавливаемого чипа. И если с сигнатурой проблема (она не распознана), то будет предложено вручную вести сигнатуру. Введите 2 последних байта сигнатуры в шестнадцатеричном виде (4 HEX-символа) и нажмите Enter. Затем fuse-доктор попробует прочитать чип в зависимости от предоставленной сигнатуры. Если чтение прошло успешно, то выберите одну из опций: 1 записать биты фьюзов – это действие выполнит цикл записи фьюзов значениями из буфера (по умолчанию). 2 модифицировать биты фьюзов – это позволит Вам ввести фьюзы вручную, значения в буфере будут обновлены. Введите один байт в HEX (2 символа) и нажмите Enter. Повторите операцию для каждого имеющегося байта фьюзов. 3 установка битов защиты (lockbits) – введите новое значение в HEX (2 символа) и нажмите Enter. Выполняйте это действие с осторожностью! Помните, что не используемые биты должны всегда быть в лог. 1! Например, нужно разрешить LB1 и LB2, для этого ведите FC (11111100). 4 очистка чипа – это действие просто сотрет чип и его биты защиты. Оно требует для безопасности наличия установленной перемычки ALLOW ERASE. 5 завершение – выход из программирование и выключение напряжений, чтобы можно было безопасно извлечь из кроватки восстановленный чип. Не обращайте на светодиоды индикации, когда fuse-доктор работает в ручном режиме - они просто мигают случайным образом. Внимание: программа fuse-доктора версии 2.1x ТРЕБУЕТ обновленной версии печатной платы 2h! [Файлы] atmega-hvpp-fusebit-doctor_archive.rar - в этом архиве находятся все релизы (печатные платы, схемы в PDF и Eagle, и прошивки, рассортированные по папкам), начиная с самого первого. Последний релиз в папке update10-20.04.2011. Подробное описание см. в файлах README архива (они есть во многих папках, и имеют расширение *.txt). Исходного кода прошивки нет. shuffle_avrdoc_usb.rar - SMD-версия fuse-доктора. Отличается от оригинальной версии тем, что на плате разведен только коннектор для подключения адаптеров. В архиве только печатка и схема, разводка сделана в Sprint Layout. Исходного кода прошивки нет. atmega-hvpp-fusebit-doctor_update11.rar - тут схемы и печатные платы адаптеров #1HVPP и HVSP, прошивки последней версии (update10-20.04.2011), печатная схема и плата версии 2h. Исходного кода прошивки нет. UPDATE #11, 30.04.2011. По поводу бит фьюзов см. файл README. В этом обновлении исправлен баг, когда не записывался старший байт фьюзов (касается всех чипов!). atmega_fusebit_doctor_smd_adapter_1.0.rar - первая версия 1.0 fuse-доктора схемы и печатной платы. Исходного кода прошивки нет. avr_attiny_hvsp_fusebit_doctor_V3.rar - версия доктора, которая предназначена только для микроконтроллеров AVR ATtiny (схема и прошивка) [4]. Исходный код доступен только для этой версии (на Бейсике). [FAQ] Q001: мой fuse-доктор не подает признаков жизни, светодиоды не мигают. Q002: Горит красный светодиод. Q003: Горит красный светодиод. Q004: Горит красный светодиод. Q005: На терминал выводится "Init programming...", и больше ничего, или считанная сигнатура "00 01 02" или "FF FF FF". Q006: Считанная сигнатура "1E 90 00", "1E 1E 1E", или что-то подобное (правдоподобные данные). Q007: Зеленый светодиод горит / в терминал выводится сообщение "Verifying... – OK!", но восстановленный чип не работает со стандартным программатором (не программируется через ISP). Q008: Что означают сообщения "Read Signature... FAIL!" и "Trying T2313 pinout... OK", выведенные в лог терминала? Q009: Что за мусор "<[2J", появляющийся в логе терминала? Q010: Я пытаюсь вводить данные в терминале, но не вижу появления символов. Q011: После ввода данных в терминале я не могу подтвердить их клавишей Enter, и не могу продолжить ввод. Q012: Я все перепробовал, но все равно ничего не получается. Q013: Действительно ли нужны все эти резисторы 1 кОм (R7..R23), последовательно со всеми сигналами? Q014: Подтягивающие нижние резисторы (pulldown) для сигналов 12V и 5V (R24 и R27) сильно греются в ручном режиме, и всей схеме нужно более мощный источник питания. Могу я тут что-то поменять, поставить резисторы номиналом побольше? Q015: Мой чип корректно читается, но доктор не может записать новые значения фьюзов, даже с разрешенным режимом полной очистки. Q016: Без восстанавливаемого чипа, схема работает странно, зависает, затем снова начинает работать, когда я приближаю пальцы руки к проводникам платы. Зависание заключается в том, что на открыты ключи T1 (выдается +12V на сокет SV2) и T3 (выдается +5V на сокет SV2), и не горят оба светодиода. Q017: Названия чипов не появляются в логе, вместо этого выводится "no names in 8kB ver". Q018: Перепутал полярность внешнего блока питания 12V. Чем это грозит? [Как заказать] Пустая печатная плата без учета пересылки стоит 250 рублей. Переходничок был изготовлен из платки TQFP32-DIP, подойдет для восстановления фьюзов микроконтроллеров AVR в корпусе TQFP32, например ATmega8, ATmega168, ATmega328P и других.
[Ссылки] 1. Atmega fusebit doctor (HVPP+HVSP) – fix the fusebits site:mdiy.pl. |