Статья не очень интересная, но может кто-то столкнётся с такой проблемой.
В моём арсенале «приборчиков радиолюбителя» имеется программатор UsbTiny. В качестве программы для прошивки микроконтроллеров (МК) я использую SinaProg.
SinaProg – это графическая оболочка для программы AVRDude – очень мощной, но консольной программы для прошивки МК. И чтобы не мучиться с прописыванием параметров как во времена доброго MS-DOSа, придумали такую программку-оболочку.
До недавнего времени меня всё устраивало. Но вот приехала партия микроконтроллеров ATmega328P (на них работают Arduino Uno), и тут началось… В списке поддерживаемых программой микроконтроллеров ATmega328P имеется, прошивка шьется, читается, всё бы ничего, но не работает функция установки фьюзов. При входе в «калькулятор фьюзов», программа не даёт изменять значения (см.скриншот):
Непорядок. Я решил разобраться в чём дело. Первым делом я поискал новую версию SinaProg. Нашел какую то другую версию, обновил, но всё осталось по прежнему. Сайт разработчиков, как выяснилось, уже давно не работает. Ну что ж, придётся разбираться самому. Заходим в папку с программой. Видим там файлы:
В файле «Device.txt» содержится список поддерживаемых МК. Можно добавлять новые МК если их нет в списке. ATmega328P в этом списке есть (левый столбец). Также в файле содержатся сигнатуры (типа уникального ID номера) всех МК (в правом столбце). Смотрим скриншот, поехали дальше.
Проблема в том, что не меняются фьюзы, обратим внимание на файлы Calc_xx.cal. Они нам и нужны, и отвечают за калькулятор фьюзов. Очевидно, что где-то в них что-то не дописано, либо написано неверно. Открываем файлы при помощи «Блокнота», так как внутри они содержат обычный текст. Содержание у всех файлов похожее, и я не буду рассматривать каждый из них. Коротко расскажу какой файл за что отвечает:
-«Calc_EF.cal» – отвечает за фьюзы группы «Extended Fuses», или расширенные настройки
-«Calc_HF.cal» – отвечает за фьюзы группы «High Fuses»
-«Calc_LB.cal» – отвечает за фьюзы группы «Lock Bits», проще говоря – блокировки, защита.
-«Calc_LF.cal» – отвечает за фьюзы группы «Low Fuses»
Для примера откроем в «блокноте» файл «Calc_LB.cal». Вот что мы увидим:
Как мы видим, сразу после ATmega3250 идёт ATmega329, а нашей атмеги328 здесь нету. А это значит, что её нужно добавить. Как нам это сделать? В принципе не сложно. Для этого взглянем на даташит ATmega328P:
Как видно из даташита, МК ATmega328P совместим по своему устройству с МК ATmega48PA/88PA/168PA, отличие лишь в количестве памяти программ, памяти данных, и размере загрузчика. Поэтому попробуем найти например ATmega168 в нашем файле:
ATmega168 в файле имеется, выделяем и копируем все строки, относящиеся к ATmega168. Затем добавляем пустую строку между ATmega3250 и ATmega329, и вставляем туда то, что мы скопировали. Во всех строках заменяем ATmega168 на ATmega328P. Должно получиться что-то вроде этого:
Закрываем файл, сохранив внесённые изменения. Такую же операцию проделываем и над файлами «Calc_HF.cal» и «Calc_LF.cal».Остаётся изменить содержимое файла «Calc_EF.cal», всё делается по тому же принципу, но с небольшой поправкой. В этом файле прописаны фьюзы, отвечающие в основном за размер загрузчика. А так, как ATmega48PA/88PA/168PA/328P отличаются обьёмом памяти на борту, то и размеры загрузчиков у них разные. Поэтому внесём поправки. ATmega168 имеет 16кб памяти программ, а ATmega328P соответственно 32 кб памяти. И размер загрузчика у них отличается ровно в 2 раза. Поэтому открываем файл, находим ATmega168, копируем все строки, вставляем, меняем название МК на ATmega328P, и смотрим на скриншот:
Нужно размеры загрузчиков увеличить в 2 раза, так как размер памяти стал больше в 2 раза. Увеличили, закрываем и сохраняем файл. Теперь запускаем SinaProg, заходим в калькулятор фьюзов, и видим:
Кнопочки стали активны, и фьюзы можно изменять. Таким же образом можно добавлять и другие МК, а значения необязательно копировать от другого МК. Если хорошенько почитать даташит, то все эти значения там имеются, и можно просто написать строки самому, по аналогии с любым другим МК.
Так как SinaProg работает на основе AVRDUDE, то напоследок скачаем и обновим AVRDUDE в папке с SinaProg. Последнюю версию AVRDUDE можно взять с официального сайта, либо скачать внизу страницы, я приложил последнюю версию на момент написания статьи. Из архива нам потребуется собственно, сама программа «AVRDUDE.exe» и конфигурационный файл «avrdude.conf». Так было:
Так стало после замены старых файлов AVRDUDE на новые:
В консоль теперь стали выводиться байты фьюзов.
В файлах прилагаю архив с моей «доделанной» версией SinaProg (с поддержкой фьюзов ATmega328P и обновлённым AVRDUDE).
Теги:




Я собрал
0
1
x
Оценить статью
- Техническая грамотность
- Актуальность материала
- Изложение материала
- Полезность устройства
- Повторяемость устройства
- Орфография
0
Средний балл статьи: 5
Проголосовало: 1 чел.
В этой статье мы рассмотрим что такое фьюзы (Fuse Bits) в платах Arduino и как их можно использовать для повышения эффективности программ для данной платформы. Если говорить точнее, то понятие фьюзы следует соотносить не с платами Arduino, а с микроконтроллерами семейства AVR, которые являются «сердцем» данных плат.
Фьюзы в микроконтроллерах семейства AVR представляют собой специальные биты конфигурации (переключатели), изменяя которые (то есть устанавливая в них 0 или 1) мы можем изменять некоторые режимы работы микроконтроллера или использовать какие либо его специальные возможности, которые недоступны в его конфигурации «по умолчанию». Эти биты расположены в отдельном адресном пространстве, доступном только при программировании. Биты объединяются в конфигурационные байты и их состав зависит от конкретной модели микроконтроллера. Фьюзы есть во всех микроконтроллерах AVR, но в данной статье мы рассмотрим работу с ними на примере микроконтроллера ATmega328P поскольку он является одним из самых распространенных микроконтроллеров семейства AVR в связи с его использованием в платах Arduino.
Как мы уже рассмотрели, фьюзы (биты конфигурации) представляют собой «маленькие переключатели», изменяя которые можно управлять логикой работы микроконтроллера. Каким образом мы можем устанавливать или сбрасывать эти биты? Ответ на этот вопрос достаточно простой – это можно сделать с помощью специальных регистров (fuse registers).
В микроконтроллере ATmega328P имеется 19 фьюзов (битов), которые объединены в 3 байта (fuse bytes), которые называются конфигурационными байтами и включают в себя “Extended Fuse Bytes” (дополнительный байт), “High Fuse Byte” (старший байт) и “Low Fuse Byte” (младший байт).
Значения конфигурационных байтов в микроконтроллере ATmega328P по умолчанию: Low: 0x62, High: 0xD9, Extended: 0xFF. Следует помнить, что это значения именно для «чистого» микроконтроллера ATmega328P , а не для платы Arduino. Значения фьюзов для платы Arduino можно найти в файле Arduino_dirhardwarearduinoavrBoards.txt, где Arduino_dir — это путь к Arduino IDE. Откройте файл в текстовом редакторе и найдите интересующую плату по названию, чуть ниже будет информация о фьюзах:
uno.name=Arduino/Genuino Uno
...
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0x05
Примечание: при работе с конфигурационными битами в микроконтроллерах AVR необходимо помнить один важный момент – они инверсные, то есть 1 это выкл, 0 – это вкл. То есть если бит содержит логическую единицу, то это означает что он не запрограммирован (unprogrammed), соответственно, запрограммированный (programmed) конфигурационный бит содержит логический ноль. Такая логика основана на принципе хранения данных в EEPROM: чистая микросхема памяти содержит во всех ячейках единицы, а термин запрограммирована по отношению к такой ячейке означает, что в нее записали ноль.
Если вы посмотрите на таблицу 27 даташита на ATmega328P под номером 7810D–AVR–01/15, то в ней вы можете узнать много подробностей о работе фьюзов в данном микроконтроллере. На следующем рисунке вы можете посмотреть краткий (но достаточно важный) фрагмент из данной таблицы:
Далее последовательно рассмотрим состав конфигурационных байтов в микроконтроллерах семейства AVR.
Дополнительный конфигурационный байт (Extended Fuse Byte)
В следующей таблице показан состав дополнительного байта фьюзов (Extended Fuse Byte), который также называется “EFUSE”.
| Номер бита | Название | Описание | Значение по умолчанию |
| 7 | — | — | 1 |
| 6 | — | — | 1 |
| 5 | — | — | 1 |
| 4 | — | — | 1 |
| 3 | — | — | 1 |
| 2 | BODLEVEL2 | Brown-out Detector trigger level | 1 (не запрограммирован) |
| 1 | BODLEVEL1 | Brown-out Detector trigger level | 1 (не запрограммирован) |
| 0 | BODLEVEL0 | Brown-out Detector trigger level | 1 (не запрограммирован) |
Как вы можете видеть из представленной таблицы, в этом байте используются всего 3 бита, а остальные биты зарезервированы.
Конфигурационные биты BODLEVEL определяют порог срабатывания схемы BOD (Brownout Detection level), которая следит за уровнем напряжения источника питания. Схема BOD (Brownout Detection) сбрасывает микроконтроллер когда напряжения питания падает ниже определенного уровня. Когда напряжение питания вновь увеличивается до заданного порогового значения (определяемого битами BODLEVEL), то сигнал сброса снимается и происходит запуск микроконтроллера.
В следующей таблице представлены значения порога срабатывания схемы BOD в зависимости от значения битов BODLEVEL. Также в микроконтроллере ATmega328P можно полностью отключить работу схемы BOD с помощью указанных битов (комбинация битов 111).
| Порог срабатывания схемы BOD (В) | Значение BODLEVEL2..0 |
| Схема BOD выключена | 111 |
| Vcc = 1.8 | 110 |
| Vcc = 2.7 | 101 |
| Vcc = 4.3 | 100 |
Старший конфигурационный байт (High Fuse Byte)
В следующей таблице представлен состав старшего конфигурационного байта в микроконтроллере ATmega328P.
| Номер бита | Название | Описание | Значение по умолчанию |
| 7 | RSTDISBL | External Reset Disable | 1 (не запрограммирован) |
| 6 | DWEN | debugWIRE Enable | 1 (не запрограммирован) |
| 5 | SPIEN | Enable Serial Program and Data Downloading | 0 (запрограммирован) |
| 4 | WDTON | Watchdog Timer Always On | 1 (не запрограммирован) |
| 3 | EESAVE | EEPROM memory is preserved through the Chip Erase | 1 (не запрограммирован) |
| 2 | BOOTSZ1 | Select Boot Size | 0 (запрограммирован) |
| 1 | BOOTSZ0 | Select Boot Size | 0 (запрограммирован) |
| 0 | BOOTRST | Select Reset Vector | 0 (запрограммирован) |
Биты BOOTRST, BOOTSZ0 и BOOTSZ1 в составе данного байта отвечают за размер Flash памяти микроконтроллера, резервируемой для загрузчика, и за положение вектора сброса.
Загрузчик (начальный загрузчик) – это специальная программа, которая выполняется в самом начале работы микроконтроллера и может решать различные задачи. В случае с платами Arduino данный загрузчик обеспечивает загрузку скетча (основной программы) в память микроконтроллера. По умолчанию для загрузчика резервируется максимальный размер – 2048 слов.
| Начало секции загрузчика | Размер секции (слов) | Значение BOOTSZ1..0 |
| 0x3F00 | 256 | 11 |
| 0x3E00 | 512 | 10 |
| 0x3C00 | 1024 | 01 |
| 0x3800 | 2048 | 00 |
Бит BOOTRST определяет положение вектора сброса микроконтроллера. По умолчанию он указывает на адрес 0х0000.
Бит EESAVE определяет режим стирания энергонезависимой памяти EEPROM. Если в нем логический 0 (бит запрограммирован), то при команде «стирание кристалла» информация в памяти EEPROM сохраняется, если в нем логическая 1 – то содержимое EEPROM по указанной команде стирается.
Бит WDTON отвечает за работу сторожевого таймера (Watchdog Timer). Сторожевой таймер – это таймер, который работает отдельно от всех остальных таймеров микроконтроллера AVR. Если сторожевой таймер установлен, то вам будет необходимо его сбрасывать через определенный период, иначе данный таймер будет сбрасывать микроконтроллер. Если данный бит установлен в логический 0, то работу сторожевого таймера нельзя будет запретить из программы и при переполнении он будет автоматически подавать сигнал сброса на микроконтроллер.
Бит DWEN разрешает/запрещает работу отладочного интерфейса debugWire – это предварительный протокол, который «зашит» в железо микроконтроллера и используется для его программирования и отладки. Когда он установлен (enabled) вы можете загружать программу в микроконтроллер и производить ее отладку по одиночному проводнику. Но для этого необходимы специальные программно-аппаратные средства.
Оставшиеся два бита желательно оставить в «покое» до тех пор, пока вы точно не будете знать что они делают, иначе это может привести к тому, что микроконтроллер перестанет у вас корректно работать. Бит SPIEN разрешает/запрещает программирование микроконтроллера по интерфейсу SPI. По умолчанию он запрограммирован, то есть установлен в 0. Бит RSTDISBL запрещает/разрешает внешний сброс микроконтроллера. Отключать внешний сброс целесообразно только в моделях микроконтроллеров, имеющих очень малое количество выводов (в этом случае данный вывод можно будет задействовать для каких-нибудь других целей), во всех остальных случаях данный фьюз лучше не трогать.
Младший конфигурационный байт (Low Fuse Byte)
В следующей таблице представлен состав младшего конфигурационного байта в микроконтроллере ATmega328P.
| Номер бита | Название | Описание | Значение по умолчанию |
| 7 | CKDIV8 | Divide clock by 8 | 0 (запрограммирован) |
| 6 | CKOUT | Clock output | 1 (не запрограммирован) |
| 5 | SUT1 | Select start-up time | 1 (не запрограммирован) |
| 4 | SUT0 | Select start-up time | 0 (запрограммирован) |
| 3 | CKSEL3 | Select Clock source | 0 (запрограммирован) |
| 2 | CKSEL2 | Select Clock source | 0 (запрограммирован) |
| 1 | CKSEL1 | Select Clock source | 1 (не запрограммирован) |
| 0 | CKSEL0 | Select Clock source | 0 (запрограммирован) |
Бит CKDIV8 в младшем конфигурационном байте ответственен за деление тактовой частоты на 8. Если он не запрограммирован (установлен в 1), то в регистре делителя будет значение «0000», если в данном бите установить 0, то в регистре будет значение «0011», благодаря чему тактовая частота будет делиться на 8. Однако независимо от значения бита CKDIV8 частоту делителя можно будет изменять в программе в любой момент времени.
Бит CKOUT отвечает за вывод тактовой частоты «наружу» микроконтроллера, на контакт CLK0 (цифровой контакт 8 в плате Arduino Uno). Если он запрограммирован (установлен в 0), то сигнал тактовой частоты выводится наружу – это может быть полезно в случаях когда тактовая частота используется другими периферийными устройствами. При использовании делителя системной частоты на вывод CLK0 также выводится пониженная частота.
Конфигурационные биты SUT1 и SUT0 совместно с битами CKSEL устанавливают длительность задержки при включении (старте) микроконтроллера и выбор типа осциллятора (керамический или встроенный в кристалл). Задержка нужна для того, чтобы источник тактовой частоты после подачи питания стабилизировал свою работу и вошел в рабочий режим. Величина задержки может составлять от 0 до 65 мс. Возможные значения этих битов и соответствующие устанавливаемые ими параметры приведены в следующей таблице.
Биты CKSEL0 – 4 отвечают за выбор источника тактового сигнала. В представленной на следующем рисунке таблице приведены возможные значения этих битов и соответствующие этим значениям источники тактового сигнала. В следующей таблице приведены источники тактового сигнала, поддерживаемые микроконтроллером ATmega328P, и соответствующие им значения битов CKSEL.
| Источник тактового сигнала | Значение CKSEL3..0 |
| Экономичный кварцевый генератор | 1111-1000 |
| Кварцевый генератор | 0111-0110 |
| Низкочастотный кварцевый генератор | 0101-0100 |
| Внутренний RC-генератор на 128кГц | 0011 |
| Внутренний калиброванный RC-генератор | 0010 |
| Внешний сигнал синхронизации | 0000 |
| Зарезервировано | 0001 |
С составом фьюзов разобрались, теперь перейдем к способам их чтения и изменения.
Чтение фьюзов в Arduino
Для того, чтобы прочитать фьюзы в плате Arduino, нам понадобится программа под названием Avrdude. Данная программа используется для чтения, записи и модифицирования памяти в микроконтроллерах AVR. Она работает по интерфейсу SPI и поддерживает широкий список программаторов. На нашем сайте есть достаточно подробная статья по программе Avrdude, можете ознакомиться при желании, ее свежую версию вы можете скачать по следующей ссылке:
• Download Avrdude Version 6.3 Windows-ming32.
После того, как вы скачали эту программу, вы должны извлечь ее из архива и открыть окно команд Windows в этой папке. После этого подключите программатор USBasp к вашему компьютеру, убедитесь в том, что на вашем компьютере установлен правильный драйвер для программатора USBasp. После этого вы получите возможность чтения фьюзов в плате Arduino. Для этого выполните следующую команду:
avrdude.exe -c usbasp -p m328p -U lfuse:r:low_fuse_val.txt:h -U hfuse:r:high_fuse_val.txt:h -U efuse:r:ext_fuse_val.txt:h
Если все прошло нормально, эта команда прочитает байты фьюзов (fuse bytes) и поместит их в три раздельных текстовых файла. На следующем рисунке показан общий ход этого процесса.
Как видно из представленного рисунка, программа Avrdude считала фьюзы из платы Arduino Nano и поместила их в три отдельных текстовых файла. Если вы откроете эти файлы, то вы увидите считанные значения фьюзов: EFUSE – 0xFD, HFUSE – 0XDA, LFUSE – 0xFF. Это и есть значения фьюзов по умолчанию в плате Arduino Nano
Теперь, когда мы знаем значения фьюзов по умолчанию в плате Arduino, мы можем сравнить со значениями фьюзов по умолчанию в в микроконтроллере ATmega328P
Исходное состояние фьюзов в микроконтроллере ATmega328P и в плате Arduino
Сравнение значений конфигурационных байтов микроконтроллера ATmega328P и платы Arduino представлено в трех следующих таблицах.
| № бита | Low Fuse Byte | Значение по умолчанию в AVR | Значение по умолчанию в Arduino |
| 7 | CKDIV8 | 0 (programmed) | 1 (unprogrammed) |
| 6 | CKOUT | 1 (unprogrammed) | 1 (unprogrammed) |
| 5 | SUT1 | 1 (unprogrammed) | 1 (unprogrammed) |
| 4 | SUT0 | 0 (programmed) | 1 (unprogrammed) |
| 3 | CKSEL3 | 0 (programmed) | 1 (unprogrammed) |
| 2 | CKSEL2 | 0 (programmed) | 1 (unprogrammed) |
| 1 | CKSEL1 | 1 (unprogrammed) | 1 (unprogrammed) |
| 0 | CKSEL0 | 0 (programmed) | 1 (unprogrammed) |
| № бита | High Fuse Byte | Значение по умолчанию в AVR | Значение по умолчанию в Arduino |
| 7 | RSTDISBL | 1 (unprogrammed) | 1 (unprogrammed) |
| 6 | DWEN | 1 (unprogrammed) | 1 (unprogrammed) |
| 5 | SPIEN | 0 (programmed) | 0 (programmed) |
| 4 | WDTON | 1 (unprogrammed) | 1 (unprogrammed) |
| 3 | EESAVE | 1 (unprogrammed) | 1 (unprogrammed) |
| 2 | BOOTSZ1 | 0 (programmed) | 0 (programmed) |
| 1 | BOOTSZ0 | 0 (programmed) | 1 (unprogrammed) |
| 0 | BOOTRST | 1 (unprogrammed) | 0 (programmed) |
| № бита | Extended Fuse Byte | Значение по умолчанию в AVR | Значение по умолчанию в Arduino |
| 7 | – | 1 | 1 |
| 6 | – | 1 | 1 |
| 5 | – | 1 | 1 |
| 4 | – | 1 | 1 |
| 3 | – | 1 | 1 |
| 2 | BODLEVEL2 | 1 (unprogrammed) | 1 (unprogrammed) |
| 1 | BODLEVEL1 | 1 (unprogrammed) | 0 (programmed) |
| 0 | BODLEVEL0 | 1 (unprogrammed) | 1 (unprogrammed) |
Начальное состояние микроконтроллеров ATmega328/P, в котором они поставляются с завода, является следующим: микроконтроллер сконфигурирован на работу с внутренним RC генератором на 8МГц, при этом прошитый бит CKDIV8 обеспечивает деление частоты генератора на 8; внешний сброс (по низкому уровню на выводе Reset) не запрещен; разрешено программирование по интерфейсу SPI; для загрузчика отведена область памяти 2048 слов; стартовый адрес программы 0x0000; схема контроля питания отключена.
В плате Arduino Uno фьюзы микроконтроллера изменены таким образом, чтобы он был настроен на работу с экономичным кварцевым генератором без делителя частоты; для загрузчика отводится 256 слов; прошитый бит BOOTRST назначает стартовым адресом адреса начала секции загрузчика; порог срабатывания схемы BOD составляет 2.7В.
Теперь рассмотрим процесс изменения фьюзов в плате Arduino (микроконтроллере AVR).
Необходимые компоненты
Для чтения/изменения фьюзов в микроконтроллере AVR нам будут необходимы следующие компоненты:
- Плата Arduino Nano (купить на AliExpress).
- Программатор USBasp и конвертер 10-Pin в 6-Pin для AVR (купить на AliExpress — по этой ссылке можно купить как отдельно программатор).
- USB кабель.
- Светодиод (купить на AliExpress).
- Резистор 330 Ом (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
- Программа Avrdude.
Внешний вид этих компонентов показан на следующем рисунке.
Схема проекта
Схема для чтения/изменения фьюзов в микроконтроллере AVR представлена на следующем рисунке.
Мы подключили плату Arduino Nano к компьютеру с помощью USB кабеля, также к компьютеру мы подключили программатор USBasp. Но нашей целью является программирование/изменение фьюзов в микроконтроллере AVR. Для этого мы подключили программатор USBasp к плате Arduino.
Внешний вид получившейся у нас конструкции показан на следующем рисунке:
Как вы видите из рисунка, к нашему ноутбуку подключена и плата Arduino, и программатор USBasp.
Программирование/изменение фьюзов в микроконтроллере AVR
Откройте Arduino IDE и загрузите в плату Arduino базовый скетч для мигания светодиодом (basic blink sketch).
Вы увидите, что встроенный в плату Arduino светодиод (подключенный к ее контакту 13) начнет мигать. Более подробно все эти процессы вы можете посмотреть в видео, приведенном в конце статьи. Теперь давайте попоробуем изменить фьюзы и посмотрим что произойдет. Как мы уже выяснили ранее, по умолчанию значения фьюзов в плате Arduino следующие: EFUSE – 0XFF, HFUSE – D9, LFUSE – 62. Изменим их с помощью Avrdude, для этого выполним следующую команду:
avrdude -c usbasp -p m328P -U lfuse:w:0x62:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m
После выполнения этой команды вы увидите что скорость мигания светодиода станет значительно меньше. Дело в том, что по умолчанию частота мигания светодиода определялась частотой внешнего кварцевого генератора (16 МГц), теперь же, после изменения фьюзов, она определяется частотой внутреннего RC генератора (1 МГц). Поэтому и светодиод теперь будет мигать значительно медленнее.
Но, поскольку мы изменили фьюзы, мы изменили и настройки загрузчика. Вы можете увидеть это на следующем рисунке:
Чтобы исправить это и вернуть плату Arduino в ее исходное состояние, мы должны снова загрузить в нее загрузчик. Для этого выполните Tools -> Programmer- USBasp, после этого снова зайдите в Tools и выберите пункт «burn bootloader». После этого исходная функция загрузчика загрузится в плату Arduino и она снова начнет функционировать как обычно.
После этого светодиод на плате станет снова мигать с прежней частотой.
Видео, демонстрирующее работу проекта
Загрузка…
11 405 просмотров
Для вылечивания микроконтроллеров с неправильно прошитыми фьюзами собрал Atmega fusebit doctor.
Всю информацию почерпнул с сайта с этой статьй: Исправляем AVR фьюзы при помощи «Atmega fusebit doctor»
Что доктор может или как это будет работать?
При подаче питания 12 вольт на плату, и установке «порченого» микроконтроллера, нажатием на кнопку START получим рабочий микроконтроллер.
При восстановлении фьюз бит прошивка микроконтроллера остается нетронутой. На плате есть перемычка, при замыкании которой устройство полностью «обнулит» микроконтроллер.
Приступим )
1. Изготовление платы
1. Собираем устройство по самой последней версии на данный момент.
Печатка Доктора от Paul (в Сплинте)
Ошибки в данной плате, обнаруженные zloynik:
1.Резистор с 23 ноги меги не соединен с панельками.
2.Резистор с 4 ноги меги не соединен с панельками.
3.Резистор с 5 ноги меги не соединен с панельками.
4.Транзистор BC547(Т2) с 13 ноги меги-нет контакта с эмиттера на «землю».
Не беда. Дорисовываем недостающие соединения.
Печатная плата в Спринте
специально выделил дорожку, чтоб показать какие они тонкие. Ширина дорожки — 0.5 мм. Для меня это слишком мелко
2. Печатаем несколько вариантов дорожек на кальке, чтоб потом выбрать более лучший рисунок. В следующий раз буду пробовать глянцевую бумагу от бесполезных буклетов-макулатуры…
принтер не в лучшем состоянии (. Мажет. Единственное спасение — это то, что он в самом начале нормально пропечатывает
3. Прогреваем плату предварительно утюгом на максимуме. Прикладываем рисунок — он моментально прилипает. А мы его разглаживаем ваткой и опять греем утюгом.
4. НУ вот и первый блин комом. Перестарался с очисткой бумаги. Не отчаиваемся, переделываем ) a-a.d-cd.net/cfcaaa8s-960.jpg
5. Пропустим попытку №2 и сразу к третьей передем. А если быть более точным честным, то плата эта была 5-й раз переделана. После протравки в хлорном железе получилось это чудо )
Нужно было маркером подправить перед травлением.
желтым выделил места, где недотравил. Зеленым — дорожки в процессе травления пострадали
6. Смываем тонер растворителем 646-м (что имелось по близости, то пошло в дело) и получаем нужные дорожки. Эти дорожки ввиду недотравления пришлось доводить до ума путем «прозвонки» каждого соединения. Еще та задачка…
вот они, перетравленные дорожки. Пришлось перемычки лепить в этих местах
7. Представляю помощника в изготовлении отверстий. Его название: ДП-11 7500 обмин.
Очень полезная штукенция. Правда кушает 27В, но и от 24-х не отказывается (два аккума от УПСа ). Взял попользоваться на неопределенное время.
Особенность: если положить моторчик, перестает крутиться. А если начать сверлить (только подносишь к будущему отверстию и надавливаешь), то начинает сверлить.
миниатюрный моторчик
Т.е. вначале не понравилось, когда он в горизонтальном положении останавливался, а потом понял, что это вообще незаменимая вещь! Просверлил нужные отверстия, отложил моторчик всторону. Нужно просмерлить? берешь и сверлишь… Питание при этом не убитается.
Вначале думал, что там какой-то регулятор стоит. Но нет там ничего такого, это просто моторчик износился со временем и глючит. Глюк на пользу )))
2. Сборка устройства Atmega fusebit doctor</b>
1. Набиваем плату компонентами. Вначале припаиваем перемычки и панельки под микросхемы.
Подписал радиоэлементы. Неподписанные резисторы — на 1К Ом. Не было в наличии одного резистора на 10К Ом. По совету vasilii76 установил меньше на 8,2К (какой был).
Резисторы при монтаже планировались для установки в лежачем положении (на 0.125 Вт), но раз приобрел 0,250Вт, то так и запихал их…
Устройство Atmega fusebit doctor. Надписи со стороны элементов не делал — и так пойдет (на функционирование устройства не влияет)
2. На первый раз для дорожек 0,5мм сойдет. Боялся перетравить дорожки, поэтому в процессе пришлось их дорабатывать.
позже покрою лаком сверху
3. Получилось довольно скромно ). В планах немного не так себе представлял.
Панельку под микроконтроллер на 40-пин установил на плату кверх-ногами ))) Не критично
остается подпилить края и прошить -мозги- для функционирования устройства
4. А вот такой красивый девайс с сайта getchip.net должен был получиться )
с надписями поинтереснее будет выглядеть
Сборка устройства на этом завершена. Идем прошивать микроконтроллер Atmega-8L
3. Прошивка микроконтроллера для устройства «Atmega fusebit doctor»
1. Специально делать макетку для прошивки Atmega-8L не стал.
Собирал вот по этой схемке Упрощенную отладочную для Atmega-8, но из того, что имелось и без кварца.
Две панельки на 28-ножек и пару перемычек — вот все устройство.
ну не было у меня панельки нужной ширины, прилепил на 2-х 28-и пиновыйх, но широких
2. Подключаем ранее изготовленный:
Простой LPT программатор AVR микроконтроллеров (5-ть проводков)
3. Запускаем uniprof_08_jun_10. Наш микроконтроллер определился как mega8.
Отлично! Заливаем прошивку с версией 2.11 из этого архива в папке «firmware» для нужного МК. Архив — Прошивка — atmega_fusebit_doctor_2.11_m8.bin
4. Устанавливаем фьюзы для МК и давим на батон «Write».
Всего один фьюз изменить. Убираем галочку — значит активируем перемычку
Вот и все с прошивкой. Бежим проверять в действии )
4. Проверка работоспособности доктора
Большое спасибо vasilii76, который помогал при проверке работоспособности данного устройства, давал наставления )))
1. Собираем опять же из подручных средств переходник для Attiny13. Панелька, 11 штырьков и проводки — вот и все )))
полноценную плату буду позже готовить
2. Подключаем к доктору нашу подопытную Attiny13, с заранее активированными фьюзами:
CKSEL, RSTDISBL, SPIEN. Давим на кнопку и пациент «вылечен» )
Установка в корпус + изготовление адаптера для Attiny 13 в DIP-корпусе
1. Приобрел в радиомагазинчике корпус для РЭА модели G407. После небольших манипуляций на точильном станке плата подошла идеально!
2. Установил адаптер под Attiny 13 в DIP-корпусе. Подробнее про изготовление адаптера можно ознакомиться в статье «Ч».
Адаптер под Attiny — 8pin (14pin) для Доктора (atmega fusebit doctor)
адаптер тоже идеально подходит. Копрус с адаптером отлично закрывается
Какие микроконтроллеры были испытаны?
1. Attiny 13
На докторе был испытан микроконтроллер Attiny 13. Были проверены все фьюзы в полях:
Fuse High Byte – старший байт;
Fuse Low Byte – младший байт.
Проверка прошла успешно!
2. Attiny 12
С ним что-то не так получилось. Испытывал тут: Lock Bit Byte.
МК успешно залочен.. Мигает зеленый светодиод. Эти фьюзы не получилось восстановить (
Буду позже разбираться с ней.
Сопряжение доктора с ПК
Преобразователь RS-232 — UART (для конфигурирования различных устройств)
Сколько стоит собрать это чудо?
Цена вопроса: 270р на детали, + 130р на корпус = 400р
Из деталек самый дорогой — микроконтроллер (145р — пол стоимости Доктора)
Не учитываются трудо-затраты и материалы на печатку
Опыт при изготовлении платы — бесценен!
Варианты Доктора от драйвовчан
Хороший вариант реализовал renoshnik.
Всем удачных поделок )
Не забываем нажать кнопку Нравится )))
Внимание ! Автор устройства не стоит на месте — постоянно усовершенствует своего «Доктора». За изменениями слежу и я, внося обновления в статью.
В статье описана самая стабильная версия Update №9. от 13.03.2011.
В конце статьи есть последняя версия и архив со всеми старыми версиями «Доктора».
Хочу спросить у читающих мой блог — много ли у Вас скопилось микроконтроллеров с неправильно прошитыми фьзами и непригодными для дальнейшего использования? Я думаю, если Вы довольно продолжительное время работаете с микроконтроллерами, то у Вас были случаи неправильной прошивки фьюзов. Свои «запорченные» микроконтроллеры я складывал в специальную коробочку с надеждой на то, что когда-то, в будущем, соберу высоковольтный параллельный программатор и верну их к жизни. Но высоковольтный программатор как-то особо не хотелось собирать. Схема довольно наворочена, да и применение такого программатора разовое – оживить ошибочно прошитый микроконтроллер. Короче, всегда проще (и дешевле) было купить новый микроконтроллер. Так и хранились бы и дальше «мертвые» микроконтроллеры если бы не случилась странная штука – при изготовлении нового устройства (скоро выложу) перестали подавать признаки жизни, сразу две тини2313 без особых на то причин. Подозрение пало на то, что при прошивке были неправильно выставлены фьюзы. Новых, в SOIC корпусе, быстро достать не получалось, а схемку закончить чесались руки. Так как, я все равно собирался, когда то делать высоковольтный программатор, решил, что пришло время это сделать. Но высоковольтный программатор я так и не сделал, а сделал устройство специально предназначенное для исправления ошибочно установленных фьюзов.
Некоторое время назад, по ссылке geovas , я поглядел на устройство под названием «Atmega fusebit doctor». Автор — поляк Pawel Kisielewski. Так как схема этого устройства относительно несложная решил вместо высоковольтного программатора собрать «доктора». И не ошибся – устройство оказалось замечательным! Не могу не поделиться своими впечатлениями о «Atmega fusebit doctor», так как в этом проекте есть много вещей, которые я ценю.
Что интересного есть в «Atmega fusebit doctor»?
Как Вы поняли – это не совсем высоковольтный программатор. Это устройство предназначено только для одной цели – вернуть к «жизни» микроконтроллер с неправильно прошитыми фьзами.
Такими фьюзами могут быть:
— CKSEL фьюзы выбора задающего генератора (выбран внешний генератор при его отсутствии или выбрана очень маленькая частота внутреннего);
— SPIEN запрет последовательного программирования;
— RSTDISBL использование ножки сброса как дополнительной линии ввода-вывода;
— установленные LOCK биты;
— другие, мешающие последовательному программированию.
ПРИНЦИП РАБОТЫ УСТРОЙСТВА
— очень прост – подаем на плату 12 вольт, вставляем в панельку «запорченный» микроконтроллер, нажимаем кнопочку «START» и через доли секунды получаем новенький рабочий микроконтроллер. Очень просто, даже не нужен компьютер (всегда возмущают псевдо навороты, в виде управления при помощи специальной программе на PC, там, где это в принципе не нужно). И если внешне устройство выглядит просто, то внутри все гораздо сложнее. При нажатии кнопки «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
Зелененьким отмечены кристаллы которые проверялись и удачно полечились пользователями «доктора». Если Вы вылечили кристалл не помеченный зеленым, прошу сообщить об этом автору устройства или мне — я передам.
С лестными отзывами закончили, теперь давайте собирать устройство.
СБОРКА УСТРОЙСТВА.
Схема устройства довольно простая. Номиналы резисторов можно варьировать в небольших пределах
059-atmega_fusebit_doctor_V2e_schematic.pdf (53022 Загрузки)
Плата устройства разведена хорошо, но есть один нюанс, о котором важно не забыть при сборке устройства. Ножки 40-ка пиновой панельки с 29 по 37 необходимо откусить (лучше в плате вообще не сверлить отверстия под эти ножки).
Еще есть картинка для нанесения на плату со стороны деталей (монтажная картинка). Я впервые попробовал нанести такую картинку. Получилось очень удобно – монтаж превращается в простую процедуру установку деталек по картинкам. Наноситься рисунок методом ЛУТ. Вскройте рисунок лаком, иначе он быстро сотрется.
059-atmega_fusebit_doctor_V2e_PCB.zip (41039 Загрузок)
«Набиваем» плату радиодеталями, ставим несколько перемычек, получаем вот такое устройство:
ВНИМАНИЕ! Если у Вас собрана предыдущая версия платы «Доктора» (V2d — плата апдейдов по №6 включительно), для новой версии (апдейты №№7-9) переделывать ее нет необходимости, изменения минимальны. Для апгрейда версии платы V2d до версии V2e необходимо, всего лишь, припаять в нужном месте резистор на 100 Ом. Ниже показано куда его впаивать.
Hryam сделал рисунок платы версии V2d в Спринте. Вышло даже лучше чем у автора (размеры площадок, например).
059-atmega_doctor_plate_v2d_Sprint.zip (Одна Загрузка)
ПЛАТА ДЛЯ SMD КОМПОНЕНТОВ.
Появилась версия платы для SMD компонентов (товарисщь Shuffle постарался) . В этой плате нет панелек под «пациентов» есть только разъем для подключения адаптеров. Все «пациенты» включаются через адаптеры. Добавлен преобразователь UART to USB TF232RL, а значит Доктор будет выдавать информацию о ходе лечения по USB (можно не ставить). В остальном все как в оригинале.
059-shuffle_avrdoc_usb.zip (49330 Загрузок)
ПРОШИВАЕМ МИКРОКОНТРОЛЛЕР.
Теперь осталось только прошить микроконтроллер ATmega8 и устройство готово!
atmega_fusebit_doctor_2.09_m8.zip (Одна Загрузка)
059-FuseBits.png (68244 Загрузки)
Фьюз байты: Lock Bits = 0x 3F; High Fuse = 0x D1; Low Fuse = 0x E1; Ext. Fuse = 0x 00
Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.
Данный вариант прошивки еще есть для микроконтроллеров:
Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P.
Прошивка для микроконтроллеров с 16kB и 32kB памяти, кроме того, выдает названия восстанавливаемых микроконтроллеров.
Прошивки и фьюзы для других микроконтроллеров смотрите в архиве старых версий «Доктора» в конце статьи.
АДАПТЕРЫ ДЛЯ МИКРОКОНТРОЛЛЕРОВ.
Автором были разработаны два адаптера:
— для HVPP программирования 20-ти пиновых Attiny26 подобных и 40-ка пиновых Atmega8515 подобных контроллеров.
— для HVSP программирования для 8-ми пиновых и 14p-ти пиновых микроконтроллеров с высоковольтным последовательным способом программирования
059-adapter-1HVPP_dip20-dip40.zip (25233 Загрузки)
059-adapter-HVSP-dip8-dip14.zip (23928 Загрузок)
Небольшой бонус от меня – адаптеры для микроконтроллеров 8-ми пиновых (ATtiny13 …) и 20-ти пиновых (ATtiny2313 …) в корпусах SOIC.
059-adapter_soic20-soic8.zip (Одна Загрузка)
Пользоваться адаптерами для SOIC корпусов очень просто:
АРХИВ ВСЕХ ПРЕДЫДУЩИХ ВЕРСИЙ ДОКТОРА.
Это архив со всеми предыдущими версиями «Доктора». Кроме того архив содержит дополнительные материалы, такие как пинауты для различных корпусов AVR, платы-адаптеры и другое.
atmega-hvpp-fusebit-doctor_archive.zip (32878 Загрузок)
ПОСЛЕДНЯЯ, НА ДАННЫЙ МОМЕНТ, ВЕРСИЯ «ДОКТОРА».
Как я уже упоминал выше, главным достоинством «Доктора» является его автономность. Для восстановления фьюзов нужно лишь само устройство. Это очень хорошо!
Да, «Доктор» по UART выдавал информацию о процессе «лечения». Сообщения по UART, дублируя светодиоды, давали более полную картину «лечения», но многим этого было недостаточно. Хотеться более полного контроля процесса восстановления. И в новом апдейте автор дает этот полный контроль!
Теперь стало возможным:
— двухстороннее общение с «Доктором» по UART;
— работа с кристаллами у которых неверная сигнатура;
— устанавливать свои fusebits и lockbits;
— об остальном читайте в описании внутри архива…
atmega-hvpp-fusebit-doctor_update11.zip (63516 Загрузок)
ПЛАТЫ ДОКТОРА ЧИТАТЕЛЕЙ БЛОГА.
Здесь находятся устройства собранные читателями — хорошо когда есть выбор.
Печатка «Доктора» от Paul (в Сплинте)
ATmega-Fusebit-Doctor-PCB.zip (22847 Загрузок)
zloynik нашел некоторые ошибки:
1.Резистор с 23 ноги меги не соединен с панельками.
2.Резистор с 4 ноги меги не соединен с панельками.
3.Резистор с 5 ноги меги не соединен с панельками.
4.Транзистор BC547(Т2) с 13 ноги меги-нет контакта с эмиттера на «землю».
В остальном вроде все впорядке. Собрал-залочил тиньку 2313-восстановило.
Учтите при изготовлении.
Вариант «Доктора» в SMD исполнении от webconn.
ATmega Fusebit Doctor SMD by WebConn V2h.zip (18774 Загрузки)
Хотел бы внести свой вклад в форме ещё одной платы для «доктора» в SMD-исполнении. Всего 5 перемычек и 3 SMD-»пофигистора», питание от Power Jack 5mm (но в архиве есть версия с колодкой) через 78L05 (греется, но пару минут можно работать без отключения питания, а больше обычно и не нужно ) Также греется один из транзисторов, но тоже в меру (мелкота требует жертв). Тем не менее, плата юзабельна. Совместима с последней версией Доктора V2h (то есть полностью растащен UART).
Вариант «Доктора» от Machineman.
Fusebit-Doctor.zip (Одна Загрузка)
Плата в спринте, разводил под детали, которые были в наличии, так что там симбиоз SMD с выводными элементами, от перемычек уйти не удалось, как ни крутил. Транзистор T3 перевернул в нужную сторону (по началу запутался с эмиттером-коллектором). Да, с питанием не стал особо заморачиваться и вывел все на разъем molex. Ну и разумеется выход на платы расширения. Удачи!
Вариант «Доктора» от TaseG (разводка в сплинте).
hvpp-fusebit-doctor-v2h.zip (13672 Загрузки)
Исправление разводки от Максима Носырева.
Я начинающий, поэтому прошу строго не судить, если я ошибся.
Если сравнить разводку с оригиналом из статьи, то там есть лишняя дорожка, замыкающая 9 и 5 вольт, как я понял на питание меги придет 9 вольт. Может, конечно, я ошибаюсь, но наверно так не должно быть…
Вариант «Доктора» от Sailanser (разводка в Eagle 5.10)
Atmega-fuse-doctor.zip (11070 Загрузок)
Сам себе делал это устройство по выложенной оригинальной схеме. Плату сделал двухстороннюю дабы была маленькой и компактной. Делал на SMD плюс управляющий контроллер в DIP. Контроллеры для излечивания если необходимо подключаю с помощью внешней макетки.
Вариант «Доктора» от MVV
А еще «Доктора» можно сделать и так:
Адаптер для ATtiny26 от Fahivec
Adapter_Tiny26_SMD.zip (7542 Загрузки)
В архиве фотка и файлы .sch/.brd из Eagle 5.7.0
Доктор от dimon24
вариант печатной платы с универсальными ZIF панельками под 5 МК DIP8,14,20,28,40
Atmega-fusebit-doctor-ZIF.zip (9422 Загрузки)
Переходник для ATmega48A/PA/88A/PA/168A/PA/328/P TQFP32 от S@per
TQFP32-for-fuse-bit-doctor.zip (8915 Загрузок)
ЗАКЛЮЧЕНИЕ.
В результате работы «Atmega fusebit doctor» мною были возращены к жизни несколько ATtiny2313, ATmega48, Atmega8535. «Atmega fusebit doctor» зарекомендовал себя с наилучшей стороны. И даже появились планы на нестандартное его использование. Давно руки чешутся заюзать ножку сброса ATtiny13 как еще один порт ввода/вывода, но всегда останавливало то, что микроконтроллер теряется для последующего использования. С «доктором» можно смело использовать ножку по своему усмотрению и при необходимости восстанавливать ее «заводское» назначение.
Еще смотрим:
Что такое фьюз биты?
Как правильно прошить фьюз биты в разных программах?
Страничка ATmega FuseBit Doctor
(Visited 386 439 times, 32 visits today)
C:avrdudeprog33>avrdude.exe -p m328p -c usbasp -P usb -U lfuse:w:0x62:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m -U lock:w:0xFF:m
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude.exe: Device signature = 0x1e950f
avrdude.exe: reading input file «0x62»
avrdude.exe: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude.exe: 1 bytes of lfuse written
avrdude.exe: verifying lfuse memory against 0x62:
avrdude.exe: load data lfuse data from input file 0x62:
avrdude.exe: input file 0x62 contains 1 bytes
avrdude.exe: reading on-chip lfuse data:
Reading | ################################################## | 100% -0.00s
avrdude.exe: verifying …
avrdude.exe: 1 bytes of lfuse verified
avrdude.exe: reading input file «0xD9»
avrdude.exe: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude.exe: 1 bytes of hfuse written
avrdude.exe: verifying hfuse memory against 0xD9:
avrdude.exe: load data hfuse data from input file 0xD9:
avrdude.exe: input file 0xD9 contains 1 bytes
avrdude.exe: reading on-chip hfuse data:
Reading | ################################################## | 100% -0.00s
avrdude.exe: verifying …
avrdude.exe: 1 bytes of hfuse verified
avrdude.exe: reading input file «0xFF»
avrdude.exe: writing efuse (1 bytes):
Writing | | 0% 0.00s ***failed;
Writing | ################################################## | 100% 0.08s
avrdude.exe: 1 bytes of efuse written
avrdude.exe: verifying efuse memory against 0xFF:
avrdude.exe: load data efuse data from input file 0xFF:
avrdude.exe: input file 0xFF contains 1 bytes
avrdude.exe: reading on-chip efuse data:
Reading | ################################################## | 100% 0.02s
avrdude.exe: verifying …
avrdude.exe: verification error, first mismatch at byte 0x0000
0x07 != 0xff
avrdude.exe: verification error; content mismatch
avrdude.exe: safemode: efuse changed! Was ff, and is now 7
Would you like this fuse to be changed back? [y/n] y
и собственно все зависло, сигнатура теперь 000000… в общем убил свой последний живой 328, но собственно вопрос — почему? пытался прошить дефолтные фьюзы, но она в efuse почему-то записала 07 вместо ff, или я чет не понимаю?
если кварц отрубить то сигнатура меняется каждый раз
Многие радиолюбители знают (иногда на собственном печальном опыте), что микроконтроллер 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 устройства) путем записи в них корректных значений бит фьюзов. Описанное простое и дешевое устройство позволит исправить Ваши брикнутые микроконтроллеры за несколько секунд.
| RefDes# | Номинал | Шт. | Примечание |
| R2, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R26 | 1k | 20 | 0.125 Вт. Защитные резисторы помечены зеленым шрифтом, их можно поставить любым номиналом в диапазоне от 100 Ом до 1 кОм. |
| R4, R6 | 4.7k | 2 | 0.125 Вт |
| R1, R27 | 10k | 2 | 0.125 Вт |
| R3, R25 | 100 | 2 | 0.125 Вт |
| R5 | 330 | 1 | 0.125 Вт |
| C1 | 100µF | 1 | Напряжение 16V..25V, емкость не критична, может быть любая в диапазоне от 10 до 200 мкф. |
| C2 | 10µF | 1 | Напряжение 16V..25V, емкость не критична, может быть любая в диапазоне от 1 до 20 мкф. |
| C3 | 10nF | 1 | Емкость не критична, может быть любая в диапазоне от 10 до 100 нф. |
| IC1 | 7805 | 1 | Любая аналогичная микросхема линейного стабилизатора напряжения. Например, также подойдет КРЕН5В. |
| IC2 | ATmega8 | 1 | Также подойдут ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328, ATmega328P, и их более новые (и низковольтные) версии с суффиксами A или L. Использовать микроконтроллеры с памятью от 16 килобайт и выше предпочтительнее, потому что можно использовать прошивку с расширенными возможностями консоли терминала (см. вопрос Q017). Для установки микроконтроллера нужна кроватка (сокет) на 28 ножек. |
| IC3 | MEGA16-P | 1 | Кроватка на 40 ножек для микроконтроллеров в корпусах DIP40. |
| IC4 | MEGA8-P | 1 | Кроватка на 28 ножек для микроконтроллеров в корпусах DIP28. |
| IC5 | AT90S2313/TINY2313 | 1 | Кроватка на 20 ножек для микроконтроллеров в корпусах DIP20. |
| T1, T3 | BC557 | 2 | Любой кремниевый транзистор структуры P-N-P. Печатная плата рассчитана на транзисторы, у которых база посередине. |
| T2 | BC547 | 1 | Любой кремниевый транзистор структуры N-P-N. Печатная плата рассчитана на транзисторы, у которых база посередине. |
| JP1 | ERASE | 1 | Перемычка — 2 штырька с шагом 2.54 мм. |
| JP2 | RS232 | 1 | Коннектор для подключения терминала. |
| X1 | 1 | Коннектор для подкючения внешнего питания. | |
| SV2 | 1 | Коннектор 20 выводов мама, для подключения плат раширения. | |
| S1 | 1 | Кнопка на замыкание. | |
| LED1 | Красный светодиод | 1 | Желательно использовать светодиоды с корпусом диаметром 3..4 мм. |
| LED2 | Зеленый светодиод | 1 | Желательно использовать светодиоды с корпусом диаметром 3..4 мм. |
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-доктор не подает признаков жизни, светодиоды не мигают.
A001: скорее всего критичная ошибка на плате или плохо запрограммированный микроконтроллер.
Q002: Горит красный светодиод.
A002: Восстанавливаемый чип не распознан. Измерьте напряжения на нем в режиме ожидания напряжения. Это +12 на сигнале RESET и +5 SUPPLY на соединительном коннекторе мама – Вы должны получить 0V или близкое к 0V напряжение для обоих этих сигналов. После того, как нажата кнопка START, Вы должны на 1 секунду получить напряжения +12V и 5V. Если это не так, то проверьте транзисторы — исправны ли они, и правильно ли спаяна схема подачи напряжений.
Q003: Горит красный светодиод.
A003: Ошибка на печатной плате. Проводники проходят очень близко друг к другу, так что возможно, что есть невидимое замыкание. Также может быть, что где-то есть непропай. Проверьте все соединения мультиметром, причем очень тщательно.
Q004: Горит красный светодиод.
A004: Подключите устройство к терминалу, чтобы получить лог восстановления. Нажмите кнопку START для получения информации на терминале.
Q005: На терминал выводится «Init programming…», и больше ничего, или считанная сигнатура «00 01 02» или «FF FF FF».
A005: Восстанавливаемый чип неисправен, или все еще есть не обнаруженная ошибка на печатной плате.
Q006: Считанная сигнатура «1E 90 00», «1E 1E 1E», или что-то подобное (правдоподобные данные).
A006: Восстанавливаемый чип в порядке, он инициирован, проверьте замыкания на сигналах DATA, BS, XA.
Q007: Зеленый светодиод горит / в терминал выводится сообщение «Verifying… – OK!», но восстановленный чип не работает со стандартным программатором (не программируется через ISP).
A007: Можно быть на 100% уверенным, что фьюзы восстановлены корректно, но у восстановленного микроконтроллера есть аппаратная проблема с интерфейсом программирования ISP (MOSI, MISO, SCK), или имеется какое-то другое повреждение.
Q008: Что означают сообщения «Read Signature… FAIL!» и «Trying T2313 pinout… OK», выведенные в лог терминала?
A008: Все 20-выводные чипы нуждаются в индивидуальной обработке. Сначала fuse-доктор пытается прочитать чип по стандартной схеме, и если это не получается («FAIL!»), то делается попытка использовать схему 20-выводных T2313 совместимых чипов, после чего эта последняя попытка получается успешной. Так что это нормальное поведение, не ошибка.
Q009: Что за мусор «<[2J», появляющийся в логе терминала?
A009: Это последовательность команд для очистки экрана терминала. Чтобы она обрабатывалась нормально, включите настройку эмуляции VT-100 в настройках программы терминала.
Q010: Я пытаюсь вводить данные в терминале, но не вижу появления символов.
A010: Убедитесь, что в настройках программы терминала установлена опция handshake в состояние NONE.
Q011: После ввода данных в терминале я не могу подтвердить их клавишей Enter, и не могу продолжить ввод.
A011: Когда Вы нажимаете Enter, Ваша программа терминала должна отправлять последовательность символов CRLF. Если это не так, то проверьте настройки терминала.
Q012: Я все перепробовал, но все равно ничего не получается.
A012: Задайте вопрос автору проекта в комментариях (см. [1]). Укажите как можно больше информации — версию firmware и печатной платы, предоставьте лог терминала.
Q013: Действительно ли нужны все эти резисторы 1 кОм (R7..R23), последовательно со всеми сигналами?
A013: Нет, они не очень-то нужны, это просто защитные токоограничительные резисторы, Вы можете собрать схему и без них (заменить эти резисторы перемычками). Однако имейте в виду, что если по какой-то причине восстанавливаемый микроконтроллер вдруг не войдет в режим программирования, и продолжит выполнять свой код, то логическое состояние его выходов может войти в конфликт с выходными состояниями управляющего микроконтроллера доктора, и по этой причине без резисторов есть некоторая вероятность выхода портов GPIO из строя. Так что резисторы R7..R23 защитят схему от подобных ситуаций, и очень желательно собрать схему точно так, как указано в схеме.
Q014: Подтягивающие нижние резисторы (pulldown) для сигналов 12V и 5V (R24 и R27) сильно греются в ручном режиме, и всей схеме нужно более мощный источник питания. Могу я тут что-то поменять, поставить резисторы номиналом побольше?
A014: Да, можете, но схема может работать некорректно с некоторыми восстанавливаемыми микроконтроллерами. В режиме ожидания напряжения должны быть близки к 0V, и когда напряжение питания включается или выключается, перепады фронтов должны быть правильной формы (см. описания входа в режим высоковольтного программирования, описанный в даташите на микроконтроллер). Из-за того, что используются только простые биполярные транзисторы, эти транзисторы вполне удовлетворяют всем требованиям по быстродействию. Нас интересует случай с микроконтроллером attiny2313, когда есть проблема, когда все фьюзы записаны корректно, кроме одного, RSTDISBL. Обнаружилось, что из-за плохих перепадов 12V на сбросе, этот микроконтроллер нормально работает в параллельном режиме, но не с высоким напряжением, поэтому не получается поменять этот фьюз. Это только интерпретация автора, может быть также и другая причина проблемы.
Q015: Мой чип корректно читается, но доктор не может записать новые значения фьюзов, даже с разрешенным режимом полной очистки.
A015: Если программатор ISP работает подобным образом, то Ваш чип поврежден, тут ничего не поделаешь.
Q016: Без восстанавливаемого чипа, схема работает странно, зависает, затем снова начинает работать, когда я приближаю пальцы руки к проводникам платы. Зависание заключается в том, что на открыты ключи T1 (выдается +12V на сокет SV2) и T3 (выдается +5V на сокет SV2), и не горят оба светодиода.
A016: Схема и программа fuse-доктора не предназначалась для работы без восстанавливаемого микроконтроллера. Причина такого поведения в том, что когда восстанавливаемый пациент входит в режим программирования, fuse-доктор ждет появления высокого уровня на сигнале RDY, который должен выдать пациент. Этот вывод не подтянут к земле, и работает как вход с высоким сопротивлением, поэтому статика и наводки от Ваших пальцев читаются как лог. 1, и код fuse-доктора продолжает выполнять свою программу.
Q017: Названия чипов не появляются в логе, вместо этого выводится «no names in 8kB ver».
A017: Имена не отображаются в 8-килобайтных версиях firmware доктора, например для atmega8 и atmega88, потому что имена не помещаются в пространство памяти программ. Если Вы все-таки хотите видеть в терминале имена чипов, используйте для доктора микроконтроллеры atmega168 или atmega328, и прошейте в них правильную прошивку.
Q018: Перепутал полярность внешнего блока питания 12V. Чем это грозит?
A018: Если в блоке питания имеется ограничение тока на уровне 150..200 мА, то скорее всего ничего страшного не произошло. Если же блок питания выдает ток больше 1А, то скорее всего выйдет из строя стабилизатор напряжения IC1 7805, его придется заменить. Микроконтролер ATmega наверняка останется живым.
[Как заказать]
Пустая печатная плата без учета пересылки стоит 250 рублей.
Переходничок был изготовлен из платки TQFP32-DIP, подойдет для восстановления фьюзов микроконтроллеров AVR в корпусе TQFP32, например ATmega8, ATmega168, ATmega328P и других.
[Ссылки]
1. Atmega fusebit doctor (HVPP+HVSP) – fix the fusebits site:mdiy.pl.
2. Сопряжение микроконтроллера с компьютером без MAX232.
3. AVR: отладочный вывод через UART (RS232 debug).
4. Attiny fusebit doctor (HVSP) – fix fusebits site:mdiy.pl.
5. 059-Исправляем AVR фьюзы при помощи «Atmega fusebit doctor» site:getchip.net.





























































