Фьюз – Фьюзы микроконтроллеров AVR – как и с чем их едят

Фьюз – Фьюзы микроконтроллеров AVR – как и с чем их едят

AVR. Учебный Курс. Конфигурация FUSE бит

В прошлых статьях я советовал тебе не лезть к этим битам. И на это были свои основания, так как неправильно выставив эти биты ты можешь наглухо заблокировать контроллер для дальнейшей перепрошивки или вообще какого либо использования.
 

Но без знания этой особенности контроллера далеко не уедешь. Так что распишу все по порядку. У разных версий контроллеров число FUSES разное, какие то могут отсутствовать, но основные есть всегда. Вот по ним и пройдемся.
 

Конфигурационные биты находятся в особой области памяти и могут быть изменены только с помощью программатора при записи контроллера. Есть старший байт и младший байт. Младший байт обычно отвечает за частоту, а старший за всякие фенечки.
 

Итак, главное. Фьюзы микроконтроллеров AVR: настройка, программирование и распространенные ошибки

Что такое фьюзы AVR. Как настроить и запрограммировать фьюзы микроконтроллера. Какие бывают распространенные ошибки при работе с фьюзами AVR. На что влияют фьюзы и как их правильно использовать. Почему важно быть осторожным при изменении фьюзов.

Что такое фьюзы микроконтроллеров AVR

Фьюзы (fuses) — это специальные биты конфигурации в микроконтроллерах AVR, которые определяют различные режимы работы и настройки чипа. Основные особенности фьюзов:

  • Программируются только с помощью программатора
  • Влияют на базовые параметры работы микроконтроллера
  • Неправильная настройка может заблокировать чип
  • У разных моделей AVR набор фьюзов может отличаться
  • Активным считается фьюз, записанный в 0

Фьюзы позволяют гибко настроить микроконтроллер под конкретную задачу, но требуют аккуратного обращения. Рассмотрим подробнее, на что влияют основные фьюзы AVR.

Основные фьюзы микроконтроллеров AVR и их назначение

Наиболее важные и часто используемые фьюзы AVR:


CKSEL[3:0] — выбор источника тактирования

Эти 4 бита определяют, от какого источника будет тактироваться микроконтроллер:

  • Внутренний RC-генератор (разной частоты)
  • Внешний кварцевый или керамический резонатор
  • Внешний тактовый сигнал
  • Внешняя RC-цепочка

Правильная установка CKSEL критична для работы МК. Неверные значения могут полностью заблокировать чип.

SUT[1:0] — время запуска

Определяет задержку запуска МК после подачи питания или сброса. Связаны с CKSEL и влияют на стабильность запуска генератора.

CKDIV8 — предделитель тактовой частоты

При активации этого фьюза тактовая частота МК делится на 8. Позволяет снизить энергопотребление.

RSTDISBL — отключение вывода сброса

Отключает вывод RESET и превращает его в обычный порт ввода-вывода. Опасный фьюз, блокирующий ISP-программирование.

SPIEN — разрешение SPI-программирования

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

Как правильно программировать фьюзы AVR

При работе с фьюзами AVR важно соблюдать следующие правила:


  1. Внимательно изучите документацию на конкретный микроконтроллер
  2. Используйте специальные калькуляторы фьюзов для расчета значений
  3. Перед записью новых значений обязательно считайте текущие фьюзы
  4. Проверяйте, что в программаторе выбрана правильная модель МК
  5. Не отключайте питание во время записи фьюзов
  6. Будьте особенно осторожны с фьюзами CKSEL и RSTDISBL

Последовательность действий при программировании фьюзов:

  1. Подключите микроконтроллер к программатору
  2. Считайте текущие значения фьюзов
  3. Рассчитайте новые значения с помощью калькулятора
  4. Проверьте правильность всех битов
  5. Запишите новые значения в микроконтроллер
  6. Перечитайте фьюзы для проверки корректности записи

Распространенные ошибки при работе с фьюзами AVR

Наиболее частые ошибки, которые допускают при настройке фьюзов AVR:

1. Неправильная установка битов CKSEL

Ошибка в выборе источника тактирования может полностью заблокировать микроконтроллер. Например, если выбрать внешний кварц при его отсутствии, МК не запустится.

2. Активация фьюза RSTDISBL

Отключение вывода RESET блокирует возможность программирования через SPI. Восстановить работоспособность можно только с помощью высоковольтного программирования.


3. Некорректная установка битов SUT

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

4. Отключение бита SPIEN

Запрет SPI-программирования делает невозможной дальнейшую прошивку через обычный программатор.

5. Активация CKDIV8 при высокой частоте

Включение делителя частоты на 8 при тактировании от высокочастотного кварца может сильно замедлить работу МК.

Инструменты для работы с фьюзами AVR

Для корректной настройки и программирования фьюзов AVR используются следующие инструменты:

Программаторы

Аппаратные устройства для записи прошивки и фьюзов в микроконтроллер. Популярные модели:

  • USBasp
  • AVR ISP MkII
  • AVRISP
  • STK500

Программное обеспечение

ПО для управления программатором и настройки фьюзов:

  • AVRDUDE — консольная утилита
  • AVR Studio — среда разработки от Atmel
  • PonyProg — программа для программирования МК
  • progisp — простой интерфейс для USBasp

Калькуляторы фьюзов

Онлайн-сервисы для расчета значений фьюзов:


  • AVR Fuse Calculator
  • Engbedded Fuse Calculator
  • AVR Fuses

Использование специализированных инструментов значительно упрощает работу с фьюзами и снижает вероятность ошибок.

Рекомендации по безопасной работе с фьюзами AVR

Чтобы избежать проблем при настройке фьюзов микроконтроллеров AVR, следуйте этим рекомендациям:

  1. Всегда сохраняйте резервную копию текущих значений фьюзов перед изменением
  2. Используйте фьюз-калькуляторы для проверки корректности настроек
  3. Не меняйте фьюзы, назначение которых вам непонятно
  4. Будьте особенно осторожны с битами CKSEL, RSTDISBL и SPIEN
  5. Проверяйте питание и подключение программатора перед прошивкой
  6. Имейте под рукой высоковольтный программатор на случай блокировки чипа
  7. Тестируйте работу МК после изменения фьюзов

Соблюдение этих правил поможет избежать большинства проблем при работе с фьюзами AVR.


AVR. Учебный Курс. Конфигурация FUSE бит

В прошлых статьях я советовал тебе не лезть к этим битам. И на это были свои основания, так как неправильно выставив эти биты ты можешь наглухо заблокировать контроллер для дальнейшей перепрошивки или вообще какого либо использования.
 

Но без знания этой особенности контроллера далеко не уедешь. Так что распишу все по порядку. У разных версий контроллеров число FUSES разное, какие то могут отсутствовать, но основные есть всегда. Вот по ним и пройдемся.

 

Конфигурационные биты находятся в особой области памяти и могут быть изменены только с помощью программатора при записи контроллера. Есть старший байт и младший байт. Младший байт обычно отвечает за частоту, а старший за всякие фенечки.
 

Итак, главное:

В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.
 

Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE. Включил эту опцию и у тебя нога RESET превращается в порт ввода-вывода, но за это ты теряешь возможность перешить контроллер через ISP.
 

Так вот, чтобы выключить RESET (и получить большое западло с прошивкой в обмен на мелкую подачку в виде дополнительной ножки) в этот бит надо записать 0.

 

С одной стороны нелогично и криво. Как бы во всем мире принята нотация, что ноль это выключено, а тут, понимаешь, наоборот. С другой стороны, это их контроллер, что хотят то и делают. Один раз запомнить и все. Да и вообще, в электронике часто за сигнал берут ноль.

 

Однако контроллеры делают электронщики, а прошивающие программы — программисты. Как бы логично. И вот эти программисты взяли и заварили адскую путаницу с галочками. Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО (что, напомню, является нулем). И поэтому в одних прошивающих программах галочка означает, что опция включена (в FUSE бит записывается 0),в других, обычно написанных электронщиками, галочка означает единицу. Т.е. с точностью до наоборот.
 

А что будет если перепутать? А будет ОЧЕНЬ плохо. Контроллер войдет в неправильный режим и может заблокируется наглухо. Т.е. раз прошил и все. Приехал.
 

Нет, спасти его можно, но для этого тебе потребуются дополнительные ухищрения в виде высоковольтного программатора, JTAG адаптера или генератора тактов. Все зависит от того в какой режим ты загонишь контроллер своими неправильными настройками.

 

Новичку, обычно, бывает проще сходить и купить новый МК, чем оживить заблокированный. Но не спеши отправлять его в помойку. Пометь и отложи на будущее, разберешься оживишь.
 

Конфигурация тактового сигнала
По умолчанию все контроллеры AVR (кроме старых серий AT90S2313, AT90S8535 итд) сконфигурированы так, чтобы работать от внутреннего источника тактов. Т.е. стоить подать на них питание и они начинают работать. Ничего больше и не нужно.
 

За источник тактов отвечают биты CKSEL
Выставив их правильным образом можно выбрать частоту работы контроллера, а также источник тактового сигнала.
 

  • CKSEL3…0 = 0000 — Внешний источник сигнала.

Т.е. на вход XTAL1 подаются прямоугольные импульсы. Такое иногда делают в синхронных системах, когда несколько контроллеров работают от одного генератора.

 

Техническое отступление
В этот режим часто попадают, когда пытаются выставить контроллер на работу от внешнего кварца (CKSEL=1111), но либо путают нотацию, либо из-за прикола с обратной нотацией битов во всяких извратских прошивающих программах. Раз и кристалл заблокировался. Но, на самом деле, наглухо, с помощью CKSEL, заблокировать кристалл нельзя. Обычно все решается напайкой кварца и запуском от этого кварца. Худшее же что может случиться — потребуется внешний генератор тактов. Который бы оживил кристалл. Делается он за пять минут из любой микросхемы ТТЛ логики, например из К155ЛА3 — схем в инете навалом. Или на таймере 555, либо можно взять второй МК и на нем написать простую программку, дрыгающую ножкой. А если есть осциллограф, то с него можно поиметь сигнал контрольного генератора — его клемма должна быть на любом осциле. Землю осцила на землю контроллера, а выход генератора на XTAL1.

 

Но что делать если зуд нестерпимый, контроллер залочен, а никакой микросхемы для реанимации под рукой нету? Тут иногда прокатывает метод пальца. Прикол в том, что на тело человека наводится весьма нефиговая наводка частотой примерно 50Гц. Всякий кто хватался за щупы осциллографа руками помнит какие шняги тут же возникают на экране — вот это оно! А почему бы эту наводку не заюзать как тактовый сигнал? Так что припаиваешь к выводу XTAL1 провод, хватаешься за него рукой, и жмешь на чтение или запись контроллера 🙂 Предупреждаю сразу, метод работает через жопу, далеко не с первого раза, читает долго и порой с ошибками, но на перезапись FUSE битов в нужную сторону должно хватить. Пару раз у меня такой фокус получался.

CKSEL3…0 = 0100 – 8 MHz от внутреннего генератора(обычно по умолчанию стоят такие)
Для большинства AVR такая конфигурация CKSEL означает тактовку от внутреннего генератора на 8Мгц, но тут могут быть варианты. Так что в этом случае втыкай внимательно в даташит. В табличку Internal Calibrated RC Oscillator Operating Modes

 

Иногда нужно иметь внешний тактовый генератор, например, чтобы его можно было подстраивать без вмешательства в прошивку. Для этого можно подключить RC цепочку, как показано на схеме и подсчитать частоту по формуле f = 1/3RC, где f будет частотой в герцах, а R и С соответственно сопротивлением резистора и емкостью конденсатора, в омах и фарадах.

  • CKSEL3…0 = 0101 – для частот ниже 0.9 MHz
  • CKSEL3…0 = 0110 – от 0.9 до 3 MHz
  • CKSEL3…0 = 0111 – от 3 до 8 MHz
  • CKSEL3…0 = 1000 – от 8 до 12 MHz

Данная табличка справедлива только для ATmega16 у других МК может отличаться. Уточняй в даташите!
 

Проблема у внутреннего генератора и внешних RC цепочек обычно в нестабильности частоты, а значит если сделать на ней часы, то они будут врать, не сильно, но будут. Поэтому иногда полезно запустить контроллер на кварце, кроме того, только на кварце можно выдать максимум частоты, а значит и производительности проца.
 

  • CKSEL3…0 = 1001 — низкочастотный «часовой» кварц.

На несколько десятков килогерц.
Используется в низкоскоростных устройствах, особенно когда требуется точная работа и низкое потребление энергии.
 

Для обычных кварцев ситуация несколько иная. Тут максимальная частота кварца зависит также и от бита CKOPT когда CKOPT = 1 то:

  • CKSEL3…0 = 1010 или 1011 — от 0,4 до 0.9 MHz
  • CKSEL3…0 = 1100 или 1101 — от 0,9 до 3 MHz
  • CKSEL3…0 = 1110 или 1111 – от 3 до 8 MHz (либо от 1 до 16Мгц при CKOPT=0)

А если CKOPT равен 0 то при тех же значения CКSEL можно поставить кварц от 1 до 16MHz.
 

Разумеется, кварц на 16MHz можно поставить только на Мегу без индекса ”L”. (Хотя, как показывает практика, Lку тоже можно неслабо разогнать. У меня ATMega8535L заработала на 16Мгц, но были странные эффекты в работе. Поэтому я не стал так извращаться и разгон снял). Опять же, все выше сказанное в точности соответствует только Меге 16, у других может незначительно отличаться.
 

Бит CKOPT задает размах тактового сигнала. Т.е. амплитуду колебаний на выходе с кварца. Когда CKOPT = 1 то размах маленький, за счет этого достигается меньшее энергопотребление, но снижается устройчивость к помехам, особенно на высоких скоростях (а предельной, судя по таблице выше, вообще достичь нельзя. Точнее запуститься то он может запустится, но вот надежность никто не гарантирует). А вот если CKOPT активизировать, записать в него 0, то размах сигнала сразу же станет от 0 до питания. Что увеличит энергопотребление, но повысит стойкость к помехам, а значит и предельную скорость. При оверклокинге МК тем более надо устанавливать CKOPT в 0.
 

Также стоит упомянуть бит SCKDIV8 которого нет в Atmega16, но который часто встречается в других контроллерах AVR. Это делитель тактовой частоты. Когда он установлен, т.е. в нуле, то частота выставленная в битах CКSEL0…3 делится на 8, на чем в свое время прилично застрял Длинный, долго пытаясь понять чего это у него западло не работает. Вся прелесть в том, что этот делитель можно отключить программно, записав в регистр CLKPR нужный коэффициент деления, например один. Весь прикол в том, что SCKDIV8 активен по дефолту! Так что внимательней!

 

Биты SUT задают скорость старта МК после снятия RESET или подачи питания. Величина там меняется от 4ms до 65ms. Мне, за всю практику, пока не довелось эту опцию использовать — незачем. Так что ставлю на максимум 65ms — надежней будет.
 

Бит RSTDISBL способен превратить линию Reset в одну из ножек порта, что порой очень нужно когда на какой-нибудь крошечной Tiny не хватает ножек на все задачи, но надо помнить, что если отрубить Reset то автоматически отваливается возможность прошивать контроллер по пяти проводкам. И для перешивки потребуется высоковольтный параллельный программатор, который стоит несколько тысяч и на коленке сделать его проблематично, хотя и возможно.
 

Второй заподлянский бит это SPIEN если его поставить в 1, то у тебя тоже мгновенно отваливается возможность прошивать по простому пути и опять будет нужен параллельный программатор. Впрочем, успокаивает то, что сбросить его через SPI невозможно, по крайней мере в новых AVR (в старых, в AT90S*** было можно)
 

WDTON отвечает за Собачий таймер, он же Watch Dog. Этот таймер перезагружает процессор если его периодически не сбрасывать – профилактика зависаний. Если WDTON поставить в 0, то собаку нельзя будет выключить вообще.
 

BODLEVEL и BODEN — это режим контроля за напряжением. Дело в том, что при определенном пороге напряжения, ниже критического уровня, контроллер может начать сильно глючить. Самопроизвольно может запортачить, например, EEPROM или еще что откосить. Ну, а ты как думал, не покорми тебя с пару недель — тоже глючить начнешь 🙂
 
Так вот, для решения этой проблемы есть у AVR встроенный супервизор питания. Он следит, чтобы напруга была не ниже адекватного уровня. И если напруги не хватает, то просто прижимает RESET и не дает контроллеру стартовать. Вот эти два фуза и рулят этой фичей. BODEN включает, а BODLEVEL позволяет выбрать критический уровень, один из двух. Какие? Не буду раскрывать, посмотри в даташите (раздел System Control and Reset).
 

JTAGEN — Включить JTAG. По умолчанию активна. Т.е. JTAG включен. Из-за этого у MEGA16 (а также 32 и прочих, где есть JTAG) нельзя использовать вывода порта C, отвечающие за JTAG. Но зато можно подключать JTAG отладчик и с его помощью лезть контроллеру в мозги.
 

EESAVE — Защита EEPROM от стирания. Если эту штуку включить, то при полном сбросе МК не будет стерта зона EEPROM. Полезно, например, если в EEPROM записываются какие-либо ценные данные по ходу работы.
 

BOOTRST — перенос стартового вектора в область бутлоадера. Если эта галочка включена, то МК стартует не с адреса 00000, а с адреса бутсектора и вначале выполняет бутлоадер. Подробней про это было написано в статье про прошивку через лоадер.
 

BOOTSZ0..1 — группа битов определяющая размер бут сектора. Подробней смотри в даташите. От контроллера к контроллеру они отличаются.
 

Lock Bits
Это, собственно, и к фузам то отношения не имеет. Это биты защиты. Установка этих битов запрещает чтение из кристалла. Либо флеша, либо ЕЕПРОМА, либо и того и другого сразу. Нужно, только если ты продаешь свои устройства. Чтобы злые конкуренты не слили прошивку и не заказали в китае более 9000 клонов твоего девайса, оставив тебя без штанов. Опасности не представляют. Если ты заблокируешь ими кристалл, то выполни полное стирание и нет проблемы.
 

Характерной особенностью установленных лок битов является считываемая прошивка — в ней байты идут по порядку. Т.е. 00,01, 02, 03, 04… FF, 00… Видел такую срань? Значит не судьба тебе спереть прошивку — защищена =)
 

Техника безопасности
И главное правило при работе с FUSE битами — ВНИМАНИЕ, ВНИМАНИЕ и ЕЩЕ РАЗ ВНИМАНИЕ! Не выставляйте никогда FUSE не сверившись с даташитом, даже если срисовываете их из проверенного источника.
 

Мало ли в какой нотации указал их автор, в прямой или инверсной. Так что если повторяете какую-либо конструкцию, то перед тем как ставить фузы, проверьте то ли вы вообще ставите!
 

Обязательно разберитесь что означает галочка в прошивающей программе. Ноль или единицу. Включено или выключено! Стандарта нет!!!
 

Если фуз биты задаются двумя числами — старший и младший биты, то выставляются они как в даташите. Где 0 это включено.
 

Неплохой FUSE калькулятор
 

Второе, железное, правило работы с FUSE. Запомните это навсегда и не говорите, что я не учил.
 

ВНАЧАЛЕ ЧИТАЕМ ТЕ ЧТО ЕСТЬ, ПОТОМ ЗАПИСЫВАЕМ ТЕ КОТОРЫЕ НАДО НАМ
 

Чтение — модификация — запись. ТОЛЬКО так. Почему? Да просто часто бывает как — открыл вкладку FUSE, а программатор попался тупой и сам их не считал. Как результат — у тебя там везде пустые клеточки. Довольный, выставил только те, что тебе надо SKSEL, а потом нажал WRITE. Тут то и наступает, Обычно, кабздец. Т.к. в контроллер записываются не только те, что ты изменишь, а ввобще вся секция. С теми самыми пустыми клеточками. Представь какой трешняк там будет. То то же! А потом бегут жаловаться по комментам и форумам, мол я ничего такого не трогал — оно само. Ага, щаз!
 

Так что, еще раз — Чтение, Модификация, Запись!

 

Подсказка:
Как с одного взгляда определить какого типа (прямые или инверсные) fuse биты в незнакомой прошивающей проге?
Дедуктивный метод: Нажмите чтение Fuses и посмотрите на состояние бита SPIEN Этот бит всегда активен, а если он будет сброшен, то программатор контроллер даже определить не сможет. Если SPIEN в 1 — значит фьюзы инверсные, как в PonyProg. Если ноль — значит по нотации Atmel.

easyelectronics.ru

Что такое фьюзы ( Fuse ) ?

Что такое фьюзы ( Fuse ) ?

Fuse — это дополнительные настройки микроконтроллеров, например можно переключить микроконтроллер на использование внутреннего кварца,а освободившиеся выводы использовать в своих целях ,но некоторые параметры,например Reset Disabled и Serial program downloading отключать не рекомендуется если вы не имеете специальный программатор HVSP или HVPP- вы не сможете прошивать м/к.Востановление только через HVSP !! Для вычисления данных фьюзов используем калькулятор фьюзов где узнаем Low ,High и у некоторых имеется Extended  Action фьюз.

Перед тем как менять фьюзы обязательно читаем как шить через Arduino IDE или USBasp.

Пример порядка действий для изменения фьюзов через Arduino IDE:

1.берем из файла board.txt данные фьюзов того контроллера,для которого хотим что-то изменить, в строчках bootloader.low_fuses , bootloader.high_fuses и bootloader.extended_fuses (если есть) и вписываем в калькулятор ( в левой части страницы),только перед этим выбираем соотвествующий микроконтроллер.

2.Выбираем/меняем необходимые опции.

3.Создаем копию необходимого раздела в файле board.txt и меняем его имя в строчке name
4.Правим строчки fuses в board.txt (папка /hardware/arduino/ в Arduino IDE) в созданой копии,ставя те значения фьюзов,которые выдал калькулятор.

5.Выбираем программируемый микроконтроллер(как его назвали в пункте 3) в меню сервис-плата жмем прошить загрузчик.

 

Пример порядка действий для изменения фьюзов через avrdude (рекомендуется):

Для начала перейдем в консоль (cmd или bash) Вашей операционной системы в папку через команду cd путь_к_папке_ардуина_/hardware/tools/ и далее вводим команды.Данные о фьюзах по умолчанию можно взять из файла board.txt.

Установка фьюзов через Windows:

avrdude -C avrdude.conf -c avrisp -P COM1 -b 19200 -p m8 -U lfuse:w:0xХХ:m -U hfuse:w:0xХХ:m

Установка фьюзов через Linux:

./avrdude -C avrdude.conf -c avrisp -P /dev/ttyUSB0 -b 19200 -p m8 -U lfuse:w:0xХХ:m -U hfuse:w:0xХХ:m

Где ХХ — это соотвествующие фьюзы микроконтроллера.Шестнадцатеричное значение.

Где -c avrisp — тип программатора, что значит прошивка используя плату Arduino.Возможна прошивка и через другие программаторы,например через USBasp ,указав строку вида -с usbasp.

 

на заполнении..

  Будьте внимательны и не меняйте опции,в которых не понимаете — вы можете заблокировать микроконтроллер.

homes-smart.ru

Микроконтроллеры ATMEL. Фьюзы. Fuses. | Avislab

Фьюзы (Fuses) – это несколько специальных байт, которые можно прошить только программатором, и отвечают они за разные настройки микроконтроллера. У разных микроконтроллеров фьюзы могут отличаться. Поэтому более подробную информацию смотрите в документации. Поскольку это делается в последнюю очередь, я приведу здесь краткое описание фьюзов и перечислю наиболее часто встречающиеся ошибки при работе с фюзами.

Хочу заметить, что установленным считается бит, который сброшен в 0. Для начинающих это часто вносит путаницу, при работе с разными программами для прошивки.
Так как не всегда ясно установленная напротив фьюза птичка это 1 или 0 (в смысле, установлен). Разработчики ПО имели ввиду, если стоит птичка, значит, бит считается установленным (т.е. =0).

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

Семейство
ATtiny
Семейство
ATmega
231325/
45/
85
1326261/
461/
861
81648/
88/
168
12816932985158535

RESERVED
M103С+S8515СS8535С
OCDEN++++
JTAGEN++++

SELFPRGEN
+++++
DWEN++++++

EESAVE
+++++++++++++

SPIEN
+++++++++++++

WDTON
+++++++++++

BODLEVEL2
+++++

BODLEVEL1
+++++++

BODLEVEL0
+++BOD
LEVEL
+BOD
LEVEL
BOD
LEVEL
+BOD
LEVEL
++BOD
LEVEL
BOD
LEVEL

BODEN
++++++
RSTDISBL++++++++

CKDIV8
+++++++

CKOUT
++++++
SUT1+++++++++++++
SUT0+++++++++++++
CKOPT++++++
CKSEL3++++++++++++
CKSEL2++++++++++++
CKSEL1+++++++++++++
CKSEL0+++++++++++++

PLLCK
+
BOOTRST++++++++

BOOTSZ1
++++++++

BOOTSZ0
++++++++

В таблице fuse-биты популярных AVR. Слева названия fuse-битов по даташиту, в первых двух строках перечислены семейства и типы конкретных МК, а на пересечении строк и столбцов стоит знак плюс, если данный fuse-бит имеется в данном МК, или указано название, отличное от стандартного. Если какой-то бит отсутствует — в соответствующей клетке ничего нет.Назначение каждого фьюза AVR fuse бита:RESERVED — этот бит зарезервирован для каких-то неизвестных простым смертным целей фирмой Atmel. Ни при каких условиях не рекомендуется менять его состояние (т. е. надо оставлять его таким, как он установлен при изготовлении МК). В этой строке
встречаются биты с другими названиями, как правило, это биты включения режима совместимости с устаревшими типами МК, на смену которым выпущены новые. Обычно в конце названия такого fuse-бита имеется символ С — от COMPATIBLE (совместимый).

OCDEN — fuse разрешает работу схемы внутреннего отладчика (On Chip Debug ENable). Не оставляйте установленным этот бит в коммерческих продуктах! Иначе вашу программу можно будет считать из памяти МК.

JTAGEN — fuse бит разрешает работу интерфейса программирования-отладки JTAG. По сравнению с SPI-интерфейсом, JTAG обладает расширенными возможностями. Не рекомендуется без необходимости оставлять этот бит установленным, т. к. в этом случае потребляемый МК ток возрастает.

SELFPRGEN — бит, разрешающей программе МК производить запись в память программ, т. е. производить самопрограммирование.

DWEN — fuse бит, разрешающий работу DebugWire – это интерфейс отладки по одному проводу. Не рекомендуется оставлять его установленным в коммерческих изделиях.

EESAVE — fuse бит, после установки которого при стирании памяти МК содержимое EEPROM данных будет сохраняться нетронутым, т. е. не будет стерто.

SPIEN — fuse бит, разрешающий работу интерфейса внутрисхемного программирования МК по SPI. Этот бит может быть легко переустановлен при помощи параллельного программатора (или JTAG, если таковой разрешен и имеется в МК). Все МК выпускаются с установленным битом SPIEN, снять его по интерфейсу SPI невозможно.

WDTON — fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.

Группа fuse битов BODLEVEL. Может быть либо один такой бит, либо несколько, тогда они нумеруются, начиная с нуля. Значение этих fuse битов определяет порог срабатывания схемы BOD — детектора уровня питающего напряжения, при снижении напряжения питания ниже этого уровня произойдет “сброс” МК.

BODEN — fuse бит, включающий схему аппаратного детектора недопустимого уровня питающего напряжения, т.е. схему BOD.

RSTDISBL — fuse бит, отключающий сигнал внешнего сброса от вывода микроконтроллера и подключающий к нему схему порта ввода-вывода. Этот бит имеется только в тех МК, у которых вывод аппаратного сброса RESET совмещен с одинм из портов ввода-вывода. Ошибочная установка этого fuse бита может отключить RESET и вы не сможете больше прошивать по ISP. Не устанавливайте этот бит, если намерены продолжать работать с МК при помощи последовательных программаторов. “Оживить” МК с установленным RSTDISBL можно только параллельным программатором и не для всех МК.

CKDIV8 — fuse бит, включающий предварительное деление частоты кварцевого (или иного имеющегося) тактового генератора на 8. То есть при включенном этом бите и применении кварцевого резонатора на 8 МГц реальная тактовая частота МК составит1 МГц.

CKOUT — fuse бит, разрешающий вывод тактовой частоты на один из выводов МК (для тактирования других устройств).

SUT1 и SUT0 — fuse биты, управляющие режимом запуска тактовых генераторов МК. Связаны с нижеописываемыми битами, определяющими тип и частоту тактового генератора, причем связь весьма хитрая и запутанная. При ошибочной их установке возможны ситуации неустойчивого запуска генератора или неоднократного сброса МКв процессе подачи на него питания.

CKOPT — бит, определяющий режим работы встроенного генератора тактовой частоты для работы с кварцевыми резонаторами. Реально изменяет коэффициент усиления встроенного инвертора в схеме генератора и, следовательно, – выходное напряжение на ножке XTAL2. Ошибочная установка может приводить к неустойчивому запуску кварцевого генератора, вплоть до возбуждения его не на той гармонике, что надо (из-за этого бита кварц запускался или только при питании МК напряжением не выше 3,6В, или только после прикосновения к выводу XTAL1 пинцетом)

Группа битов CKSEL0CKSEL3 — fuse биты, комбинация которых определяет тип и частоту работающего тактового генератора. Всего возможно до 16 комбинаций, однако не все определены для всех типов МК. Ошибочная установка комбинации этих битов может сделать МК «мертвым» — он не будет работать в схеме без подачи тактового сигнала на ножку XTAL1.

PLLCK — fuse бит, разрешающий использование встроенного синтезатора частоты для тактированияядра МК.

BOOTRST — fuse бит, определяющий адрес, с которого будет начато исполнение программы после сброса — если бит установлен, то начало программы будет не с адреса 0000h (как обычно), а с адреса области загрузчика (Boot Loader).

Группа fuse битов BOOTSZ — два fuse бита, определяющие размер области памяти программ, выделяемой для загрузчика (Boot Loader). Комбинация этих битов, в частности, определяет точку начала исполнения программы после сброса, если установлен бит BOOTRST.

Наиболее частые ошибки при настройке фюзов:

1. Установка фюза RSTDISBL. Ошибочная установка этого fuse бита отключает RESET, и Вы не сможете больше прошивать по ISP. Для этого потребуется последовательный программатор или что-то попроще для сброса фьюзов к заводским настройкам.

2. Неправильная установка CKSEL0, CKSEL1, CKSEL2, CKSEL3. Эти фьюзы определяют источник тактирования микроконтроллера. Если Вы случайно выбрали не ту частоту внутреннего RC генератора, это не смертельно. Программирование через ISP будет возможным, и вы сможете исправить ситуацию. А если случайно установить тактирование от внешнего источника, RC цепочки или кварцевого резонатора, а у Вас таких в схеме нет, то программирование по ISP тоже станет невозможным. По сути, микроконтроллер будет ожидать тактирования от несуществующей схемы. Как выйти из этого положения? Очень просто – дать микроконтроллеру источник тактирования и исправить фьюзы. Чаще всего устанавливают CKSEL все нули – тактирование от внешнего генератора. В этом случае можно собрать схему, генерирующую меандр (частота особой роли не играет, главное, чтобы она лежала пределах возможности микроконтроллера) и подать на ногу XTAL1. После чего микроконтроллер можно будет прошить через ISP. Первое, что надо сделать, – сбросить фьюзы к заводским настройкам. Если CKSEL все установлены в 1 – тактирование от внешнего кварца. Навесьте кварц после чего микроконтроллер снова будет доступен через ISP.

Ну и напоследок, найденные в интернете калькуляторы Фюзов. Иногда очень полезная штука:

http://fusecalc.mirmk.net/
http://payalo.at.ua/c_fuse/calc.html

www.avislab.com