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

Все что нужно знать о Fuse- и Lock-битах AVR микроконтроллеров

Установка Fuse- и Lock-битов (битов конфигурации и блокировки) микроконтроллеров (МК) семейства Atmel AVR, особенно для начинающих, является достаточно сложной задачей и не редко может вызывать путаницу при настройке и программировании МК. Если вы какой-то бит пропустили или установили неверно, это может привести к неправильной работе программы или, что еще хуже, к невозможности запрограммировать МК внутрисхемно по последовательному интерфейсу.

Несмотря на то, что в технической документации на каждый МК дается исчерпывающая информация по Fuse- и Lock-битам, новички часто чувствуют себя несколько неуверенно перед выполнением команды записи битов конфигурации и блокировки. В статье мы рассмотрим основные особенности битов конфигурации МК семейства AVR.

Fuse- и Lock-биты

Перед тем как мы приступим к подробному разбору битов конфигурации, нужно уяснить и запомнить один момент:

  • Fuse-бит = 1, означает, что он незапрограммирован (сброшен, неактивен);
  • Fuse-бит = 0, означает, что он запрограммирован (установлен, активен).

Это один из основных источников возникающей путаницы в процессе программирования Fuse- и Lock-битов. Мы привыкли думать, что установить значение какого-либо параметра означает записать 1, верно? С Fuse-битами AVR – наоборот, установка какого-либо бита означает запись 0, и это нужно помнить.

Биты конфигурации расположены в отдельной области энергонезависимой памяти. К примеру, МК ATmega328P имеет четыре конфигурационных байта, которые необходимо запрограммировать для корректного функционирования. Один из этих байтов содержит биты блокировки, оставшиеся три (часто именуемые старший, младший и расширенный) – содержат конфигурационные биты. Этот набор битов устанавливает начальные настройки МК: источник тактового сигнала, область загрузчика, функционирование аппаратного сброса, сторожевого таймера и пр. Сначала мы рассмотрим биты блокировки (Рисунок 1).

Рисунок 1. Lock-биты микроконтроллеров AVR.

В зависимости от типа микроконтроллера AVR количество Lock-битов может быть различным, но два младших бита всегда присутствуют. Биты LB1 и LB2 используются для блокировки доступа к встроенной Flash-памяти. Вы, наверное, знаете, что разработчики каких-либо устройств практически всегда блокируют чтение прошивки МК, чтобы защитить свою интеллектуальную собственность и предотвратить создание дубликатов и подделок. Чтение заблокированного микроконтроллера – это как конфета для аппаратных хакеров, но это отдельная тема. Так, если нужно защитить свою прошивку от копирования, необходимо заблокировать содержимое памяти микроконтроллера, в противном случае оставьте биты без изменения. Другие биты блокировки (BLB01, BLB02, BLB11 и BLB11) могут использоваться для блокировки записи/чтения в/из Flash-памяти, как из области приложения, так и из секции загрузчика. Биты блокировки довольно редко программируются (зависит от специфики приложения), мы не будем на них заострять внимание. Даже если вы запрограммируете любой из них – биты блокировки сбрасываются (устанавливаются в 1) во время выполнения команды полного стирания кристалла (Chip Erase).

Больше всего нас интересуют биты конфигурации, с ними вам придется иметь дело очень часто, хотите вы этого или нет. Расположение определенных Fuse-битов в трех байтах конфигурации отличается в зависимости от используемого МК. Для примера, мы рассмотрим ATmega328P, имеющий три байта конфигурации (Рисунок 2).

Посмотрите на состав младшего байта. Вы видите группу из 4 одинаковых битов CKSEL0, CKSEL1, CKSEL2, CKSEL3. Они используются для выбора типа источника тактовых сигналов для микроконтроллера МК. По-умолчанию (заводские установки) микроконтроллер настроен на работу от внутреннего RC осциллятора 8 МГц. Логически это самый безопасный вариант работы с микроконтроллером. Но, как известно, приборы семейства AVR могут работать от различных источников тактовой частоты:

  • калиброванный внутренний RC осциллятор (по умолчанию 8 МГц);
  • внешний RC осциллятор;
  • внешний керамический или кварцевый резонатор;
  • внешний низкочастотный кварц;
  • внешний источник тактового сигнала.

Для каждого из представленных режимов тактирования имеется диапазон установок Fuse-битов CKSEL0..3, которые используются для управления частотой тактового генератора и временем выхода микроконтроллера на рабочий режим из режима пониженного энергопотребления. Эти биты тесно связаны с битами SUT0 и SUT1, фактически управляющими временем запуска микроконтроллера после подачи питания. Задержка запуска необходима для стабилизации генерации керамических резонаторов и кварцев. Точные значения времени выхода микроконтроллера на рабочий режим приводятся в технической документации.

Конфигурационный бит CKOUT разрешает/запрещает вывод тактовой частоты на один из выводов МК; для ATmega328P на вывод PORTB0 (для тактирования других устройств), причем независимо от того, какой используется источник тактирования МК. Если бит запрограммирован, то для пользовательского приложения основная и альтернативные функции порта PB0 недоступны.

Последний бит в младшем байте – CKDIV8. По умолчанию этот бит установлен, что означает подключение к внутреннему RC осциллятору 8 МГц делителя частоты с коэффициентом 8, поэтому системная тактовая частота МК в этом случае будет равна 1 МГц. Если вам нужна тактовая частота 8 МГц, бит CKDIV8 нужно сбросить.

Теперь акцентируем внимание на старшем конфигурационном байте.

Первый бит – BOOTRST, который по умолчанию сброшен. Если этот бит установить, то после подачи питания на микроконтроллер или после сброса микроконтроллер начнет выполнение программы из загрузочного сектора. Проще говоря, если в приложении требуется выполнение функций загрузчика из Flash-памяти, то этот бит нужно запрограммировать. Если необходимо просто запрограммировать микроконтроллер по внутрисхемному интерфейсу, то можно оставить этот бит нетронутым.

При использовании загрузчика немаловажное значение приобретают биты BOOTSZ0 и BOOTSZ1. Они задают область Flash-памяти для загрузчика. Если программный код загрузчика вашего приложения имеет маленький объем, то с помощью битов конфигурации можно выделить область Flash-памяти меньшего размера для загрузчика, а остальное оставить для приложения.

Следующий бит EESAVE. Если его запрограммировать (0), то содержимое энергонезависимой памяти данных EEPROM останется нетронутым во время процедуры стирания кристалла (Chip Erase). В большинстве случаев это полезная функция, например, когда в EEPROM хранятся важные данные или калибровочные параметры и необходимо выполнить обновление прошивки, то перед заменой прошивки запрограммируйте бит EESAVE.

После установки бита WDTON сторожевой таймер микроконтроллера включается сразу после подачи питания, и выключить программно его невозможно. В этом случае сторожевой таймер будет постоянно выполнять свою функцию периодического сброса микроконтроллера, если в коде программы не выполнять специальную команду сброса сторожевого таймера. Если бит WDTON не установлен, то включение/отключение сторожевого таймера осуществляется программно.

Бит SPIEN предназначен для отключения последовательного интерфейса программирования микроконтроллера. На самом деле вы не сможете изменить состояние этого бита используя последовательный интерфейс (МК AVR поддерживают еще два режима параллельного программирования), но известны случаи изменения состояния бита SPIEN при некорректной работе или сбое внутрисхемного программатора.

Аналогичная ситуация с битом RSTDSBL – он используется для отключения функции аппаратного сброса, другими словами вывод сброса МК используется как порт ввода/вывода. В некоторых ситуациях (МК с малым числом линий ввода/вывода) это очень удобно, но в целом не рекомендуется. Ошибочная установка бита RSTDSBL может лишить вас возможности программировать микроконтроллер по SPI, т. к. наличие сигнала сброса – обязательное условие включения режима программирования.

Бит DWEN используется для включения специального отладочного интерфейса DebugWire микроконтроллеров AVR. Изменить состояние битов SPIEN, RSTDSBL и DWEN по последовательному интерфейсу невозможно, для этого потребуется параллельный программатор с поддержкой высоковольтного режима программирования или подключение по интерфейсу DebugWire.

Следует отметить еще бит CKOPT в старшем байте конфигурации (в ATmega328P он отсутствует, но есть в других МК AVR), управляющий режимом работы усилителя тактового генератора. Если бит запрограммирован (0), то выходной сигнал тактового генератора имеет размах (амплитуду), равный напряжению питания. Использовать эту опцию можно, когда микроконтроллер будет работать в обстановке с высоким уровнем помех, а также когда планируется подключить еще один микроконтроллер к выводу XTAL2. В других случаях этот режим нужно отключить (CKOPT=1), поскольку увеличивается энергопотребление микроконтроллера, а это не приветствуется в устройствах с батарейным питанием.

Последний конфигурационный байт (расширенный). Для микроконтроллера Atmega328P в нем содержатся три бита: BODLEVEL0, BODLEVEL1, BODLEVEL2. Эти биты предназначены для установки порога срабатывания схемы детектора напряжения питания: когда напряжения питания достигнет установленного уровня, произойдет сброс микроконтроллера.

Калькулятор значений Fuse-битов

Читайте также  Устройство предотвращающее разряд аккумулятора

Когда вам потребуется запрограммировать новый МК, для установки Fuse-битов вы можете воспользоваться техническим описанием на микроконтроллер. Но есть более удобный и простой способ – калькулятор Fuse-битов – онлайн инструмент, разработанный Марком Хаммерлингом (Рисунок 3). Вы самостоятельно выбираете тип микроконтроллера и включаете/выключаете необходимые опции, а конфигурация Fuse-битов будет обновляться автоматически.

Рисунок 3. В онлайн калькуляторе Fuse-битов МК AVR пользователь может самостоятельно выбирать необходимые опции.

Кроме того, вы можете индивидуально устанавливать Fuse-биты в отдельной форме, значения младшего, старшего и расширенного байта конфигурации также будут обновляться автоматически (Рисунок 4), одновременно генерируются команды для программатора AVRDude.

Рисунок 4. При индивидуальной установке Fuse-битов значения байтов конфигурации обновляются автоматически.

Если у вас есть мобильный телефон или планшетный ПК с ОС Android, можно воспользоваться бесплатным приложением AVR Fuse Calculator, которое выполняет те же функции и генерирует команды для программатора AVRDude. В базе данных программы 144 МК AVR.

Основные правила для новичков:

  • Никогда не изменяйте состояние битов DWEN, SPIEN и RSTDSBL. Фактически, по последовательному интерфейсу программирования к ним нет доступа;
  • Дважды проверьте биты CKSEL. Неправильная установка типа тактового генератора вызывает множество проблем;
  • Если вы не производите коммерческие продукты, не меняете состояние Lock-битов;
  • Если не уверены в правильности установки Fuse-битов, лучше обратитесь к технической документации или задайте вопрос на форуме специалистам.

Перевод: Vadim по заказу РадиоЛоцман

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

Что же такое FUSE биты? Слова вроде бы знакомые, но многие толком и не знают их предназначение, ставят галочки и прошивают, работает устройство да и ладно. Я вам хочу рассказать немного про эти FUSE биты.

FUSE биты (фьюзы) – ну если по простому, то они настраивают определенные параметры микроконтроллеров, это некий инструмент для их тонкой настройки Фьюзы включают или настраивают такие параметры как:
— частота генератора, внешний или внутренний генератор
— запрет на чтение прошивки микроконтроллера
— включение или выключение таймеров
— деление частоты кварцевого генератора
— защита EEPROOM от стирания
…и так далее. У каждого микроконтроллера выставляются свои фьюзы, у разных микроконтроллеров разный список фьюзов, например в ATmega8 нет фьюза CKOUT, но он присутствует в ATtiny2313. В даташитах к микроконтроллерам все эти фьюзы расписаны.

Главное правило при работе с фьюзами – не торопиться их выставлять, если вы точно не уверены в правильности своих действий.

Теперь распишем названия некоторых фьюзов, их обозначения и то, на что они влияют. Вообще, есть фьюзы для защиты программы от копирования (лок-биты), фьюзы, устанавливающие определенные функции, а так же так называемые «старшие» и «младшие» байты. Самый популярный фьюз, который выставляется практически всегда, это:

CKSEL , таких фьюзов с разными буквами всего четыре, это группа CKSEL 0, CKSEL 1, CKSEL 2 и CKSEL 3 , определяют частоту тактового генератора, и его тип, тактовые импульсы необходимы для работы практически любого микроконтроллера. Во многих микроконтроллерах есть внутренний генератор, но мы можем подключить внешний и фьюзы выставить для работы от внешнего генератора. Внешний кварцевый резонатор подключается на выводы XTAL 1 и XTAL 2 , кроме того припаивается пара конденсаторов

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 и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.

Уже давно на просторах Интернета появились так называемые «калькуляторы фьюзов», это специальные приложения, призванные помочь в конфигурировании микроконтроллера. Приложение интуитивно понятное, думаю разберетесь, в списке контроллеров выбираем нужный нам МК, далее выбираем необходимые функции, а ниже выставляются галочки фьюзов, все очень просто.

Данные приложения очень удобны, т.к. например в последнее время очень часто авторы своих проектов значения фьюзов пишут непонятными буквами или цифрами, или же словами, новичку не понятно, что это значит и какие фьюзы при этом нужно выставлять, (часто можно встретить комментарий к статье «а какие фьюзы выставлять?»). Калькулятор фьюзов нам в этом плане очень сильно помогает.

Думаю что теперь, если у вас спросят «что такое фьюзы, и зачем они нужны?», вы сможете объяснить человеку их назначение, а пока, на этом все!

CAMOKAT-BETEPAHA › Блог › Программирование микроконтроллеров. Фьюzzы

Любой новичок при программировании микроконтроллеров Атмел слышал про установку фьюзов и про большие опасности, которые ждут, если галочку не там поставить.

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

Для просмотра и настройки байтов конфигурации микроконтроллеров я советую пользоваться онлайн калькулятором: homes-smart.ru/fusecalc/?…=avrstudio&part=ATtiny13A Ссылка сразу же ссылается на ATtiny13A Выбираем нужные строчки или ставим нужные галки в конфигурации и ниже видим биты конфигурации, а в левом верхнем углу видим байты конфигурации. Можно делать наоборот: выставить например байт конфигурации и посмотреть получившиеся строчки. В интернете есть выбор онлайн калькуляторов, можно подобрать себе по вкусу, погуглив фразу «онлайн калькулятор фьюзов»

Байт конфигурации бывает нижним LOW и верхним HIGHT. Правда есть еще extended байт, но конкретно в ATtiny13A этот байт фьюзов не используется — про него молчим.

Нижний байт конфигурации, от старшего бита к младшему:

SPIEN. — разрешение последовательного программирования. Если используете последовательный SPI программатор, то этот бит не изменить. Логично. По умолчанию разрешено.

Читайте также  Методика проверки трансформаторов (3 способа)

EESAVE — разрешить сохранение содержимого EEPROM при стирании чипа, при прошивке. Тут объяснять ничего не нужно. По умолчанию запрещено. Бывает полезно выставлять этот бит при отладке, когда часто заливается правленная прошивка а заливать каждый раз еепром — лишние движения.

WDTON — включить сторожевой таймер. Если используете сторожевой таймер, то необходимо разрешить этот бит. По умолчанию запрещен.

Напоминаю, чтоб сторожевой таймер работал в коде программы, необходимо его проинициализировать и выбрать предделитель, например

говорит о том, что сторожевой таймер включен с делителем 256k с выключеным прерыванием по таймауту. Затем в теле программы втыкаем ассемблерные вставки сброса сторожевого таймера

CKDIV8 Включалка делителя на 8 тактовой частоты. По умолчанию включено!
Бит CKDIV8 определяет начальное значение CLKPS бита. CLKPS бит — это регистр предделителя тактовой частоты. Если CKDIV8 бит во фьюзах выключен, то первоначальная установка делителя CLKPS равна нулю. Если CKDIV8 бит установлен, то делитель регистра CLKPS сбрасывается при старте микроконтроллера в состояние 1100, что включает делитель на 8. То есть в проекте задали частоту 4.8 МГц, выставили во фьюзах CKSEL1 CKSEL0 и оставили включеным CKDIV8, то тактовая частота будет 4.8/8=600 кГц

Самое главное: не нужно использовать излишне высокую частоту тактирования, если в этом нет необходимости. Как правило, в большинстве случаев хватает дефолтной установки тактовой частоты — 1.2МГц.
Помните: чем выше частота — тем больше ток потребления в активном режиме. Нужно поморгать светодиодами — частота по дефолту. А вот нужно реализовать программный ШИМ, что б яркость регулировать — тактовую частоту нужно поднять, (к примеру сняв галочку CKDIV8 — будет 9.6МГц от дефолтной) ибо частоты ШИМа будет не хватать.

SUT1 и SUT0 — Выбор времени запуска внутреннего тактового генератора при запуске микроконтроллера .

Рекомендованные значения из даташита:
00 При использовании фьюза BODLEVEL (Brown-out Detector)
01 При быстрой подаче напряжения (напряжение питания нарастает быстро)
10 При медленной подаче напряжения. (по умолчанию)
11 Неиспользуется.

Подали питание — микроконтроллер ожил — смотрим фьюзы SUT1 и SUT0 — делаем задержку, если в этих фьюзах указанно — запускаем тактовый генератор — микроконтроллер заработал.

CKSEL1 CKSEL0 — Выбор источника тактового сигнала или выбор частоты внутреннего тактового генератора.

00 — используется внешний тактовых генератор
01 — используется внутренний генератор на 4.8 МГц
01 — используется внутренний генератор на 9.6 МГц
11 — используется внутренний генератор на 128 кГц

Старший байт конфигурации:

Здесь три старших бита не используются, поэтому начинаем с 4 бита:

SELFPRGEN Self Programming Enable, Разрешение самопрограммирования. По умолчанию выключен.

Хитрожопый фьюз, ибо в понипроге и CVARe он обзывается SPMEN
Нужен для того, чтоб в течении четырех тактов изменить регистр SPM — Store Program Memory

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

DWEN DebugWire — интерфейс для отладки. По умолчанию отключен. Использует порт ножки ресета. Нужно помнить, что даже если поставить Lock биты, если DWEN включен, то он так и будет работать.

BODLEVEL1 и BODLEVEL0 Brown-out Detector trigger level, он же «коричневый выход», а если серьезно это сброс микроконтроллера по провалу напряжения питания. Если напряжение питания упадет ниже указанного порога более чем на 2 микросекунды — хана, микроконтроллер отресетится. Самое главное, что нужно помнить, то что с включенным BODLEVELом в спящем режиме микроконтроллер жрет больше электричества. По умолчанию отключен.

11 — отключен
10 — 1.8 вольта
01 — 2.7 вольта
00 — 4.3 вольта

RSTDISBL — отключение ножки ресета. По умолчанию выключена. Если отключить ножку ресета, то появиться работоспособный порт PB5, но при этом последовательное программирование по SPI больше не будет работать — программирование будет возможно только высоковольтным последовательным программатором. Я часто отключаю ресет, ибо не боюсь, у меня есть высоковольтная оживлялка ATTiny13.

Многие думают, что при подачи нуля на вход ресет и удержании низкого уровня микроконтроллер теряет сознание, лежит лапками к верху и не шевелится — не подавая признаков жизни. Это не так! Наличие низкого уровня на ножке ресет всего лишь переводит микроконтроллер в режим готовности к программированию, ожидая команд по SPI интерфейсу.
Если ножку ресет отключить, то вход в режим программирования будет недоступен, микроконтроллер не будет переводится в режим программирования. Но возможность прошить микроконтроллер остается — нужно активировать режим высоковольтного программирования. Высоковольтным он называется всего лишь из за того, что чтобы его активировать нужно подать 12 Вольт на ножку ресет. Данные при этом передаются тоже последовательно, но уже не по SPI интерфейсу.

Fuse bit в AVR микроконтроллерах

Вопрос, который давно требует пояснений — что же такое fuse bit (далее фьюзы) и как их использовать. Для простоты понимания, назовем их настройкой для микроконтроллера, которую можно изменить только при прошивке.

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

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

Например, хотим работать от внешнего кварца на 8МГц, для CAVR смело убираем галочки CKSEL0-3 (т.е их значения будут 1111). Схема для подключения кварца. Конденсаторы 12-22 пФ.

Или хотим работать от внутреннего генератора на 8МГц, видим диапазон значений для CKSEL, крутим вниз даташит и видим подробное описание:

Т.е. в нашем случае подойдет последний вариант, смело заносим в CKEL0-3=0010 и радуемся супер скорости.

Если вы случайно установили тактирование от внешнего источника, а у вас его нет, то — увы микроконтроллер становится не доступным для чтения и программирования. Но расстраиваться не стоит, стоит подцепить внешний кварц и atmega снова оживет.

CKOPT — используется только совместно с битами CKSEL, позволяет включить «режим усиления». Микроконтроллер в таком режиме имеет повышенное энергопотребление, однако более помехозащищен. Установка данного бита позволяет работать на частотах выше 8МГц, если сам микроконтроллер поддерживает такие частоты.

SUT0-SUT1 — эти биты отвечают за задержку, перед началом работы микроконтроллера. Насколько я понял из даташита, рекомендации в отношении этих битов касаются в основном питания и в том числе бита BODEN

BODEN — при установке бита, микроконтроллер контролирует напряжение питания. При снижении напряжения ниже определенного уровня, микроконтроллер сбрасывается.

BODLEVEL — определяет тот самый уровень напряжения, если фьюз установлен, то нижний предел питания 4В, если не установлен 2,6В.

BOOTRST — позволяет начать выполнение программы не с начала, а с определенной области BOOTLOADER.

BOOTSZ0-BOOTSZ1 — также относятся к бутлоадеру, определяют размер памяти отведенный загрузчика.

EESAVE — если бит установлен, то во время выполнения команды Erase Chip, EEProm память не будет стерта.

WDTON — позволяет использовать сторожевой таймер.

RSTDISBL — отвечает за назначение вывода reset. Если он установлен, то ножка reset становится обычным портом ввода-вывода. В следствие чего становится не возможным использовать ее при последовательном программировании, т.е. микроконтроллер не возможно прошить без специального программатора .

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

Настоятельно рекомендую перед изменением фьюзов, прочитать уже установленные фьзы: Tools-Chip Programmer-Read-Fuse Bit, так меньше шанс ошибиться.

Для внешнего кварца на 8МГц

Для внешнего кварца 8-16МГц

Для внутреннего на 8МГц

4a4ik

30 октября 2013 г.

Как настроить Фьюзы на AVR и для чего они нужны

Фьюзы или fuse-биты, с их помощью можно настраивать некоторые параметры микроконтроллеров, как частота, зашита от копирования прошивки и т.д. Их 2 байта старший и младший.

Фьюзы различаются от МК к МК. Самое лучшее описание нужно всегда искать в даташите на определённый микроконтроллер.

Читайте также  Краткая инструкция по установке антенны нтв+

В Atmel AVR принято что за состояние ВКЛЮЧЕНО отвечает 0 а ОТКЛЮЧЕНО 1. Что не много раздражает, т.к. привычнее наоборот. Это нужно учитывать при чтении документации и при записи фьюзов, так как разные прошивальщики используют разные нотации, у некоторых как в Atmel, у некоторых наоборот.

Перед изменением Фьюзов, ВСЕГДА нужно сначала прочитать какие биты уже выставлены, проверить бит SPIEN, он всегда активен иначе программатор не определит МК. По нему можно узнать какая нотация используется в программе. Если там нет галочки или 0 то нотация Атмеловская и можно копировать с даташита, иначе инверсная.

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

CKOPT — бит, определяющий амплитуду колебаний на выходе кварца, влияет на энергопотребление, если включить, то размах напряжения на кварце будет от 0 до напряжения питания и МК будет устойчивее к помехам, если отключить снизится энергопотребление.

RESERVED — этот бит зарезервирован фирмой Atmel. Ни при каких условиях не рекомендуется менять его состояние (т. е. надо оставлять его таким, как он установлен при изготовлении МК).

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

JTAGEN — Разрешает подключение отладчика к JTAG, можно видеть что происходит в МК. Когда активен МК потребляет больше тока и нельзя использовать выводы отвечающие за JTAG.

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

DWEN — Разрешающий работу DebugWire — это интерфейс отладки по одному проводу.

EESAVE — Позволяет сохранять данные в EEPROM после перепрошивки.

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

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

Группа fuse битов BODLEVEL. Перезагружает МК если напряжение упадёт ниже уровня прописанного в этих битах.

BODEN — Включает BODLEVEL.

RSTDISBL — Превращает ножку RESET в обычный порт ввода/вывода, но пропадает возможность программировать МК.

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

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

SUT1 и SUT0 — Определяет скорость старта МК после рестарта или при подаче питания, от 4 до 65 мс.

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

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

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

Фьюз (Fuse) биты микроконтроллеров

Фьюз (Fuses) биты микроконтроллера предназначены для настройки микроконтроллера на определенную работу . Включая или выключая те или иные биты, мы может тем самым менять настройки микроконтроллера. К примеру настроить в нутренний делитель, включить старожевой таймер и другие.

Но знать их необходимо, базовыми знаниями тут не обойтись.

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

    произвести выбор задающего генератора; какой будет использоваться внутренний или внешний; выключить возможность прошивки или чтения данных микронтроллера; включить/выключить таймеры; задать частоту генератора (деление частоты генератора); защитить память EEPROOM от стирания; и другие настройки.

У каждого микроконтроллера свои fuse-биты, как они называется и за что отвечают можно посмотреть в даташитах на микроконтроллер. Там все подробно расписано, перед тем как прошивать камень нужно знать какие биты выставлять нужно ознакомиться с документацией.
Настройка или установка этих битов осуществляется при помощи программатора.

Тут есть одна тонкость: Бит считается установленным если его значение равно нулю.

Этот момент нужно просто запомнить и привыкнуть, что если мы установили значение бита в ноль то значит мы его включили.Выставление битов при помощи программы AVRDUDE_PROG 3.3


Фьюз биты микрокотроллеров AVR

CKSEL

Чаще всего настраивается фьюзы CKSEL0, CKSEL, CKSEL2, CKSEL3 они настраивают частоту с которой работает тактовый генератор и его тип. Выставляя то или ной бит можно сделать 16 разных комбинаций. Но опять же нужно посмотреть в datasheet.

С этими битами нужно быть осторожнее можно к примеру можно выставит биты таким образом что МК будет работать от внешнего генератора который подключается на ножки XTAL1 и XTAL2. И в случае его отсутствия, микроконтроллер станет «заблокирован»

По умолчанию большинство микроконтроллеров AVR настроены на работу от внутреннего источника тактов

SUT

Фьюзы SUT0 и SUT1 необходимя для настройки режимов старта тактовых генераторов. Довольно мудреные биты, если не правильно выставить эти биты то могут быть тормоза с запуском тактового генератора либо сбросы МК в момент полачи патания.

CKOPT

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

OCDEN

Этот бит необходим для разрешения или запрета чтения данных из памяти микроконтроллера.

SELFPRGEN

При помощи этого бита мы можеи запретить или наоборот разрешить запись данных в память.

BODLEVEL

Этот фьюз бит устанавливает момент уровень напряжения питания при котором происходит рестарт микроконтроллера.

BODEN

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

BOOTRST

Отправная точка начала исполнения программы. Установка адреса с которого начинает работать исполняемая программ. Если это фьюз бит выставить то программа стартует с адреса области загрузчика

RSTDISBL

С этим битом нужно быть осторожным. Если не так выставить то можно вырубить вывод RESET, в результате чего больше не сможете программировать по ISP. Это бит преобразует вывод RESET в порт ввода-вывода. Не понятно зачем придумали этот бит, наверно на случай если не хватает выводов. Но как по мне то его лучше вообще не трогать.

BOOTSZ

Состоит из BOOTSZ1 и BOOTSZ0 выставляют размер области памяти записываемых программ

EESAVE

Этот бит предназначен для защиты памяти EEPROM от стирания. Если выставить этот бит то при очистке МК память EEPROM останется не тронутой.

SPIEN

Это бит разрешает МК работать по интерфейсу SPI. У всех МК этот бит по умолчанию выставлен.

В приведенной ниже таблице fuse-биты микрокнтроллеров семейства ATtiny и ATmega. Знаком плюс указано наличие данного бита у МК.

Таблица фьюз битов микроконтроллеров AVR

Фьюз бит Семейство
ATtiny
Семейство
ATmega
2313 25/
45/
85
13 26 261/
461/
861
8 16 48/
88/
168
128 169 329 8515 8535
RESERVED M103С + S8515С S8535С
OCDEN + + + +
JTAGEN + + + +
SELFPRGEN + + + + +
DWEN + + + + + +
EESAVE + + + + + + + + + + + + +
SPIEN + + + + + + + + + + + + +
WDTON + + + + + + + + + + +
BODLEVEL2 + + + + +
BODLEVEL1 + + + + + + +
BODLEVEL0 + + + BODLEVEL + BODLEVEL BODLEVEL + BODLEVEL + + BODLEVEL BODLEVEL
BODEN + + + + + +
RSTDISBL + + + + + + + +
CKDIV8 + + + + + + +
CKOUT + + + + + +
SUT1 + + + + + + + + + + + + +
SUT0 + + + + + + + + + + + + +
CKOPT + + + + + +
CKSEL3 + + + + + + + + + + + +
CKSEL2 + + + + + + + + + + + +
CKSEL1 + + + + + + + + + + + + +
CKSEL0 + + + + + + + + + + + + +
PLLCK +
BOOTRST + + + + + + + +
BOOTSZ1 + + + + + + + +
BOOTSZ0 + + + + + + + +

Калькулятор фьюз битов микроконтроллеров

Калькулятор фьюзов AVR помогает быстро установить нужные биты, скачать офлайн версию программы можно по ссылке ниже.