Фьюзы микроконтроллеров AVR – как и с чем их едят
Что же такое FUSE биты? Слова вроде бы знакомые, но многие толком и не знают их предназначение, ставят галочки и прошивают, работает устройство да и ладно. Я вам хочу рассказать немного про эти FUSE биты.
FUSE биты (фьюзы) – ну если по простому, то они настраивают определенные параметры микроконтроллеров, это некий инструмент для их тонкой настройки Фьюзы включают или настраивают такие параметры как:
— частота генератора, внешний или внутренний генератор
— запрет на чтение прошивки микроконтроллера
— включение или выключение таймеров
— деление частоты кварцевого генератора
— защита EEPROOM от стирания
…и так далее. У каждого микроконтроллера выставляются свои фьюзы, у разных микроконтроллеров разный список фьюзов, например в ATmega8 нет фьюза CKOUT, но он присутствует в ATtiny2313. В даташитах к микроконтроллерам все эти фьюзы расписаны.
Главное правило при работе с фьюзами – не торопиться их выставлять, если вы точно не уверены в правильности своих действий.
Теперь распишем названия некоторых фьюзов, их обозначения и то, на что они влияют. Вообще, есть фьюзы для защиты программы от копирования (лок-биты), фьюзы, устанавливающие определенные функции, а так же так называемые «старшие» и «младшие» байты. Самый популярный фьюз, который выставляется практически всегда, это:
CKSEL, таких фьюзов с разными буквами всего четыре, это группа CKSEL0, CKSEL1, CKSEL 2 и CKSEL3, определяют частоту тактового генератора, и его тип, тактовые импульсы необходимы для работы практически любого микроконтроллера. Во многих микроконтроллерах есть внутренний генератор, но мы можем подключить внешний и фьюзы выставить для работы от внешнего генератора. Внешний кварцевый резонатор подключается на выводы XTAL1 и XTAL2, кроме того припаивается пара конденсаторов ~20пф одним концом на кварц, другим на минус. Если допустить ошибку при установке этих фьюзов, то микроконтроллер может «заблокироваться» для того чтобы восстановить контроллер, подают тактовый сигнал на ногу XTAL1, на данный момент придумано не мало схем для восстановления контроллеров, залоченных таким образом. Этот генератор можно сделать практически из любой логики или даже из таймера 555.
Есть простые схемы, с использованием 1 транзистора, пары резисторов и кварцевого резонатора, и более сложные, на микросхемах типа К155ЛА3. Данные способы 100% оживляют контроллеры с таким дефектом
Группа фьюзов SUT1 и SUT0 — fuse биты, управляющие режимом запуска тактовых генераторов МК, а так же задают скорость старта МК после подачи питания. Связаны с фьюзами CKSEL, а именно CKSEL0.
CKOPT — бит, определяет работу встроенного генератора для работы с кварцевыми резонаторами, устанавливает «амплитуду» колебаний тактового сигнала на кварце. Данный бит программируется достаточно часто.
RSTDISBL – очень опасный фьюз, ошибочная установка может отключить вывод RESET, после чего пропадет возможность программирования ISP программатором. Бит RSTDISBL превращает вывод RESET в порт ввода-вывода.
SPIEN – фьюз, который разрешает работу МК по интерфейсу SPI. Все микроконтроллеры выпускаются с уже установленным битом SPIEN. Считается опасным фьюзом.
EESAVE — Удобно читать как EEPROOM SAVE, дословно означает «сохранить EEPROOM», данный фьюз защищает EEPROM от стирания. Например когда в очередной раз заливаете прошивку в контроллер, можно поставить EESAVE = 0, и при стирании МК EEPROOM останется не тронутым.
BOOTSZ, состоит из группы битов BOOTSZ1 и BOOTSZ0, определяют размер области памяти записываемых программ, связан с битом BOOTRST.
BOOTRST, определяет адрес, с которого и будет начато исполнение программы. Если бит установлен т.е. если BOOTRST = 0, то начало программы будет с адреса области загрузчика (Boot Loader).
BODEN — бит, который при выставлении (BODEN=0), будет контролировать за питающим напряжением, на предельно низких напряжениях микроконтроллер может перезапускаться, глючить и так далее. Связан с BODLEVEL.
BODLEVEL. — определяет момент срабатывания детектора уровня питающего напряжения, при снижении напряжения питания ниже уровня, произойдет «перезагрузка» контроллера.
SELFPRGEN — бит, который разрешает (SELFPRGEN=0) или запрещает (SELFPRGEN =1) программе производить запись в память.
OCDEN – данный фьюз разрешает или запрещает чтение программы из памяти контроллера.
Я как то упоминал в своих статьях про то, что в некоторых программах фьюзы выставляются зеркально. Запомните, запрограммированный фьюз=0, а не запрограммированный=1. В программах Algorithm Builder, UniProf фьюзы выставляются одним образом, а в программах PonyProg, CodeVisionAVR, AVR Studio, SinaProg и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.
Уже давно на просторах Интернета появились так называемые «калькуляторы фьюзов», это специальные приложения, призванные помочь в конфигурировании микроконтроллера. Приложение интуитивно понятное, думаю разберетесь, в списке контроллеров выбираем нужный нам МК, далее выбираем необходимые функции, а ниже выставляются галочки фьюзов, все очень просто.
Данные приложения очень удобны, т.к. например в последнее время очень часто авторы своих проектов значения фьюзов пишут непонятными буквами или цифрами, или же словами, новичку не понятно, что это значит и какие фьюзы при этом нужно выставлять, (часто можно встретить комментарий к статье «а какие фьюзы выставлять?»). Калькулятор фьюзов нам в этом плане очень сильно помогает.
Думаю что теперь, если у вас спросят «что такое фьюзы, и зачем они нужны?», вы сможете объяснить человеку их назначение, а пока, на этом все!
Теги:
- Микроконтроллер
Доктор фьюзов для AVR
Всем привет! Наверное у каждого, кто занимается или занимался прошивкой микроконтроллеров были случаи, когда вы неправильно зашивали фьюз-биты и тем самым приводили микроконтроллер в «залоченное» состояние. В этой статье я расскажу о том, как сделать AVR doctor. AVR doctor – это устройство, которое позволяет вернуть к жизни микроконтроллер с неправильно прошитыми фьюзами. Идея собрать его появилась у меня после того, как испортил 3 микроконтроллера ATtiny2313. Выбросить их было жалко, поэтому и решил их «вылечить».
Схема доктора фузов
Вот принципиальная схема данного устройства:
Итак, приступим к сборке.
1) Печатная плата
Так как дорожки на плате не очень узкие, можно изготовить плату по технологии ЛУТ. Я так и сделал, но принтер у меня печатает не очень хорошо, поэтому получилось не совсем удачно. На фото процесс изготовления платы.
Сборка устройства
Для сборки нам понадобится:
1. Резисторы:
10к-1шт.
4,7к-2шт.
1к-19шт.
330 Ом – 1шт.
2. Конденсаторы:
100 мкФ 16в. – 1шт.
10 мкФ 16в. – 1шт.
10 нФ – 1шт.
3. Транзисторы:
BC547 – 1шт.
BC557 – 2шт.
4. Светодиоды – 2 шт. (красный и зеленый)
5. Панели под микроконтроллеры
40 выводов – 1шт.
28 выводов – 2шт.
20 выводов – 1шт.
6. Кнопка 4-х контактная – 1 шт.
7. Терминальный блок на 2 контакта – 1шт.
8. Стабилизатор напряжения 7805 в корпусе ТО-220 – 1 шт.
Вот собственно и все детали. Можно приступать к сборке АВР доктора.
Первым делом, нужно залудить контактные площадки на плате. Я обычно покрываю слоем припоя всю плату, так надежнее. Следует внимательно осмотреть плату на обрыв дорожек и другие дефекты. После того, как залудили плату, её нужно обмыть от флюса. Для этого можно воспользоваться водой с мылом или моющим средством. Если флюс не отмывается или вы использовали канифоль, следует промыть плату ацетоном или спиртом. Если нет не того, не другого, можете промыть плату перекисью водорода или на крайний случай растворителем. (при использовании растворителя, плата в дальнейшем будет иметь не очень приятный запах).
Когда все элементы впаяны, нужно еще раз промыть плату. После того как она высохнет, возьмите увеличительное стекло и внимательно осмотрите плату. Я иногда нахожу на плате сопли и непропаянные места. Если вы устраните все найденные дефекты до первого включения платы, вы можете избежать неприятностей. Вот так выглядит готовая плата:
Прошивка микроконтроллера
Следующим этапом будет прошивка микроконтроллера. Для этого вам нужно иметь:
- Микроконтроллер ATmega 8
- Программатор для AVR микроконтроллеров.
Чтобы прошить микроконтроллер нужно иметь программатор и компьютер с соответствующим программатору ПО. Я использую AVR Studio 4. Прошивку оставлю в архиве вместе с печатной платой и принципиальной схемой.
Фьюз-биты нужно установить следующим образом:
Lock Bits = 0x 3F; High Fuse = 0x D1; Low Fuse = 0x E1; Ext. Fuse = 0x 00
Если микроконтроллер успешно прошит, можно приступать к разблокировке микроконтроллеров. Для этого вставьте прошитую атмегу в панельку возле светодиодов. А «залоченный» мк вставьте в соответствующую ему пустую панельку. Далее нужно подключить питание к плате через терминальный блок, который вы припаяли. Напряжение следует подавать 6-12 вольт, иначе плата не запуститься. Когда питание подключили загорится красный светодиод (если конечно вы все правильно собрали).
Если светодиод горит, то нажимайте на кнопку. Должен загореться зеленый светодиод, а красный погаснет. Если все так и произошло, то поздравляю – плата собрана правильно и вы разблокировали микроконтроллер.
Теперь несколько слов о джампере, который стоит на плате. Если вы поставите на него перемычку, то при разблокировке МК также очиститься его память, то есть удалиться прошивка. Если же перемычки не будет – прошивка сохраниться.
Если при нажатии на кнопку не произошли действия описанные выше, то что-то пошло не так как нужно. Причина может быть в том, что вы ошиблись при сборке платы или прошивке атмеги.
attiny — подтверждение фьюз-бита AVR ATtiny2313
спросил
Изменено 9 лет, 3 месяца назад
Просмотрено 2к раз
\$\начало группы\$
Я программирую ATtiny2313 с некоторым шестнадцатеричным кодом для инфракрасного пульта IgorPlug с AVR через USB, я новичок в AVR и мне нужно подтвердить, что он относится к конфигурации предохранителей:
Q: Можно ли использовать ATtiny2313 вместо AT90S2313?
A: Устройство скомпилировано для AT90S2313, но работает и на ATtiny2313 — тот же HEX-файл (бинарно-совместимый). Для корректной работы на ATtiny2313 при программировании необходимо установить фьюзы: отключить деление внешних часов на 4 и включить высокоскоростной XTALL.
Так это правильно?
низкий: Oxff Высокий: 0xff Расширенный: 0xff
Мне нужно использовать xtal 12 МГц
- avr
- attiny
- предохранители
\$\конечная группа\$
\$\начало группы\$
CKDIV8
должно быть 1 (не запрограммировано), а CKSEL
должно быть %1111. Остальные биты предохранителей зависят от приложения, и вы должны прочитать техническое описание, чтобы определить, какими они должны быть.
\$\конечная группа\$
\$\начало группы\$
Существует множество сайтов, которые предоставляют калькуляторы фьюз-битов для AVR, вот один из них: http://www.
Вам нужно будет проверить таблицу данных (стр. 159) для их точного значения, но при входе в калькулятор он выдает настройки предохранителей по умолчанию для устройства (64 df ff)
\$\конечная группа\$
\$\начало группы\$
Я бы рекомендовал менять только те предохранители, которые нужно менять. Согласно http://www.engbedded.com/fusecalc значения по умолчанию:
- низкий: 0x64
- высокий: 0xDF
- доб: 0xFF
Как было сказано ранее, вы хотите изменить CKDIV8, но вы также можете изменить это во время выполнения в программном обеспечении. Другие биты, которые вы должны учитывать, — это SUT0 и SUT1, а также CKSEL0 — CKSEL3. Это зависит от вашей схемы, поэтому всегда полезно прочитать руководство. Вы видите, что все эти флаги находятся в нижнем предохранителе. Оставьте других нетронутыми. Достаточно установить эти предохранители один раз, они останутся в этом положении.
\$\конечная группа\$
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
. Конденсатор— внешний кварц ATtiny2313 2 МГц
спросил
Изменено 1 год, 2 месяца назад
Просмотрено 148 раз
\$\начало группы\$
Я хотел бы запустить свой ATtiny2313 с внешнего кристалла 2 МГц, но я не знаю, как это сделать. Я видел изображения и примеры, где есть конденсаторы, подключенные к земле после кристалла. Вот так:
Но я не понимаю, как определить размер конденсаторов.
Кроме того, когда я использовал внутренние 2 МГц, я записал загрузчик через Arduino IDE, но самый низкий уровень моего менеджера платы — это внешние часы 4 МГц. Поэтому я также не уверен, как настроить фьюзы для работы с внешними часами с частотой 2 МГц.
- конденсатор
- кристалл
- аттини
- биты предохранителя
\$\конечная группа\$
2
\$\начало группы\$
Вас могут заинтересовать рекомендации по применению Microchip (AN2519), в которых содержится дополнительная информация:
Соображения по проектированию аппаратного обеспечения микроконтроллера AVR®
В нем есть следующие разделы, относящиеся к вашим вопросам о кристаллах:
- Использование кристаллических и керамических резонаторов
- 5.1. Выбор источника тактового сигнала в AVR MCU
- 5.2. О кристаллах и керамических резонаторах
- 5.3. Рекомендуемые номиналы конденсаторов
- 5. 4. Несбалансированные внешние конденсаторы
- 5.5. Кристаллы RTC
- 5.6. Схема печатной платы
- Неиспользуемые контакты XTAL
В техническом описании ATtiny2313 также приведены некоторые рекомендуемые значения:
(стр. 24)
Проверьте также характеристики используемого резонатора и его нагрузочную емкость.
ATtiny2313 имеет внутренний RC-генератор с частотой 8 МГц. По умолчанию MCU работает на частоте 1 МГц от своих внутренних часов 8 МГц (а не 2 МГц, как вы упомянули):
Устройство поставляется с CKSEL = «0100», SUT = «10» и запрограммированным CKDIV8. Настройкой источника тактовой частоты по умолчанию является внутренний RC-генератор с самым большим временем запуска и начальным предварительным масштабированием системных тактовых импульсов, равным 8, что дает системные тактовые частоты 1,0 МГц.
См. следующие таблицы для выбора источника синхронизации и установки соответствующих фьюз-битов:
(стр. 23)
(стр. 160) хочу установить CKSEL3..0 = 1010
и CKDIV8 = 1
(не запрограммировано, чтобы отключить деление на 8).
CKSEL3..1 , установленный на 101
(вторая строка таблицы 4), означает, что он будет соответствовать частоте между 0,9и 3,0 МГц. Значения CKSEL3..0 1000
— 1111
(пятая строка таблицы 2) соответствуют внешнему кристаллу. Это сбивает с толку, потому что вам нужно проверить несколько мест в таблице данных, чтобы собрать эту информацию.
(Оставьте SUT1..0 как 10
, если по какой-либо причине вам не нужно изменить время запуска или использовать обнаружение отключения.)
задать это как отдельный вопрос; Я только попытался обратиться к аппаратным требованиям здесь.