Фьюзы микроконтроллеров AVR – как и с чем их едят. Микроконтроллеры avr: fuse-биты Основные правила для новичков

Фьюзы микроконтроллеров AVR – как и с чем их едят. Микроконтроллеры avr: fuse-биты Основные правила для новичков

09.03.2024
В данном обзоре рассмотрим, что же такое fuse-биты и для чего они нужны, так как это вызывает много непонимания (да и разработчики прошиващего софта вертят их как хотят). В результате этого контроллеры AVR кучами складываются в коробки до «лучших времен». Для примера рассмотрим fuse-биты на примере МК ATMega8. Для других типов назначение уточняются в даташите на конкретный МК (не ленитесь читать документацию). Итак, поехали! Все фьюз-биты МК разделены на 2 байта – старший (Fuse High Byte) и младший (Fuse Low Byte). Разбор конечно же начнем со старшего байта.
RSTDISBL – определение режима работы пина RESET. Данный пин может работать в 2-х режимах как вывод внешнего сброса или как порт ввода-вывода.
RSTDISBL=1 – пин настроен на работу как вывод внешнего сброса.
RSTDISBL=0 – пин работает как порт ввода-вывода. Данный режим работы отключит возможность последовательного программирования и поможет только параллельный программатор.
WDTON – включение и отключение сторожевого таймера (Watch Dog Timer), который выполняет защиту от зависания программы, выполняемой МК. В основном применяется в ответственных программах, где зависание нежелательно.
WDTON=1 – сторожевой таймер отключен (можно включить программно через бит WDT регистра WDTCR).
WDTON=0 – сторожевой таймер включен (программно отключить не получится).
SPIEN – разрешение последовательного программирования.
SPIEN=0 – последовательное программирование разрешено.
SPIEN = 1 – последовательное программирование запрещено.
Если отключить режим последовательного программирования, то сможет помочь только параллельный программатор. Во многих программах для прошивки данный бит изменить нельзя (чекбокс недоступен).
CKOPT – бит опций тактового генератора. Его разберем позже, когда доберемся до младшего байта.
EESAVE - бит защиты данных, хранящихся в EEPROM памяти при стирании микросхемы. Если данный бит не установлен, т.е. EESAVE = 1 , то при стирании микросхемы затрутся данные, хранящиеся в EEPROM.
BOOTSZ1…0 – биты определяющие объем flash-памяти, отводимой под бутлоадер.
Бутлоадер – это набор команд, даже точнее – это программа, которая болтается в конце flash-памяти МК, способная принимать данные от внешних устройств при наступлении какого-либо события и заносить их во flash-память. Бутлоадер применяется в основном для прошивки МК без использования спецпрограмматора.
BOOTRST – бит, определяющий с какого места начнется загрузка контроллера после сброса.
BOOTRST = 1 – загрузка начнется с нулевого адреса
BOOTRST = 0 – загрузка начнется с адреса начала области flash-памяти, выделенной под бутлоадер.
Вот и добрались до младшего байта.

BODLEVEL и BODEN – биты, управляющие схемой мониторинга напряжения питания контроллера (Vcc). Если напряжение опуститься ниже установленного битом BODLEVEL , то МК сброситься и будет держаться в режиме сброса, пока напряжение не превысит установленный порог.

BODLEVEL = 1 – пороговое напряжение равно 2,7В.
BODLEVEL = 0 – Пороговое напряжение равно 4В.
BODEN = 1 – схема мониторинга неактивна.
BODEN = 0 – схема мониторинга напряжения питания активна.
SUT1…0 – биты, определяющие время запуска микроконтроллера (см. режимы работы тактового генератора). После подачи на МК питания, выхода его из режима энергосбережения или после сброса, МК начинает работать не сразу, а по истечении определенного времени. Как раз это время и задают данные биты. Если время старта не важно, то ставим максимум SUT1…0 = 11 . Все операции, выполняемые контроллерам, производятся по импульсам, приходящим от тактового генератора. Тактовый генератор может быть встроенным в МК, либо быть внешним.

Внутренний генератор может работать в нескольких режимах:

С внутренней задающей RC-цепочкой;
- с внешней задающей RC-цепочкой;
- с внешним задающим кварцевым или керамическим резонатором.
При работе контроллера от внешнего тактового генератора на его вход XTAL1 подаются прямоугольные импульсы от какого-либо внешнего генератора:
Все эти режимы работы задаются битами CKSEL3…0 .


Все МК типа ATMega8 поставляются с завода со значением битов CKSEL3…0=0001 , т.е. настроены на работу с тактовой частотой 1 МГц от внутреннего генератора с внутренней задающей RC-цепочкой. Время старта в данном режиме работы определяется по таблице:



Согласно даташиту емкость конденсатора должна быть не менее 22 пФ. При условии, что CKOPT=0 между выводом XTAL1 и GND подключается внутренний конденсатор емкостью 36 пФ и внешний конденсатор можно исключить. Частота задающей RC-цепочки определяется соотношением f=1/(3RC). В соответствии с выбором RC-цепочки биты CKSEL3…0 устанавливаются в соответствии с таблицей:


Время старта в данном режиме определяется по таблице:



Частота тактового генератора будет определяться частотой кварца. При выбранной частоте кварца биты CKSEL3…1 выбираем из таблицы:


Комбинация CKSEL3…1 = 101 должна использоваться только с керамическим резонатором (см. примечание под таблицей). Время старта выбирается из таблицы:


При работе тактового генератора с внешним резонатором значение бита CKOPT определяет режим работы усилителя тактового генератора для раскачки резонатора. При CKOPT = 0 амплитуда колебаний максимальна, что дает устойчивость к помехам и возможность работать на всем диапазоне частот. При CKOPT = 1 амплитуда колебаний меньше (генератор работает в экономном режиме) и возможны сбои при работе контроллера из-за различных помех. Так что если нет жестких требований к энергосбережению устройства, то CKOPT = 0 . Кроме работы с высокочастотными резонаторами, контроллер способен работать также на частотах так называемых часовых кварцев (32768 Гц). Для этого значение CKSEL3…0 = 1001 . При CKOPT = 0 между XTAL1 и GND, и XTAL2 и GND подключаются внутренние конденсаторы, а внешние конденсаторы в данном случае можно исключить. Время старта определяется из таблицы:


Внешний тактовый генератор


Для выбора данного режима устанавливаем CKSEL3…0 = 0000 . Установка CKOPT = 0 позволяет подключить между XTAL1 и GND, и XTAL2 и GND внутренние конденсаторы 36 пФ (зачем?). Время старта опять же определяется из таблицы:


Кроме младшего и старшего fuse-байтов в окне прошивальщика можно увидеть Lock Bit Byte – так называемый байт защиты. С помощью изменения значения битов данного байта можно запрещать и разрешать доступ к памяти программ (flash-памяти), EEPROM и области бутлоадера. Можно сказать, что биты этого байта предназначены для защиты того, что есть в контроллере. В основном это надо разработчику, чтобы защитить свой интеллектуальный труд от кражи и обычному пользователю эти биты особо неинтеесны.

Немного о прошивающем софте


Немало косяков с залочкой контроллеров возникает из-за прошивающего софта. В каких-то программах галка в чекбоксе означает 0, а в каких-то 1. Перечислять значения галки в каждой программе бесполезно, так как этих программ навалом. Поэтому дам совет, как определить who is who. Берем МК и подключаем его к последовательному программатору, заходим в режим программирования fuse-битов и считываем все байты. Смотрим значение бита SPIEN . Т.к. последовательное программирование разрешено, то SPIEN = 0 . А теперь смотрим что стоит в чекбоксе напротив данного бита. Если стоит галка, то в данной программе это означает 0, если чекбокс пуст, то галка в данной программе означает 1. При прошивке всегда шейте первым делом прошивку, а fuse-биты в самую последнюю очередь, т.к. fuse-биты могут быть настроены не от работы тактового генератора с внутренней RC-цепочкой или вообще в данной схеме пин RESET используется как обычный порт. Перед прошивкой fuse-битов всегда делайте их считывание, т.к. при выставлении только нужных битов остальные зашьются как есть на экране. Автор статьи: skateman.

Все очень просто — небольшие комментарии на картинке помогут.

Вот такие инструменты есть для работы с фьюз битами. Выбирайте!


(Visited 149 580 times, 38 visits today)

Раздел:

Добрый день форумчане, прошу небольшой помощи в одном вопросе, наверное уже задавался такой но все же спрошу, пытаюсь залить прошивку в мегу 48, Sinaprog ее видит и пишет что все записано в контроллер, но как-то быстро это происходит примерно секунду, прошивка для подсветки ступенек лестницы. При попытке установки и прошивки фьюзбитов программа считывает заводские настройки, устанавливаю инверсно в соответствии с картинкой к нужной прошивке, пишет что все ок. но возвращает 00 и сигнатура также 000000. подскажите в чем может быть дело.

  • Valeriy

    Здравствуйте Евгений. Прошу помощи. Как будут выглядеть фьюзы в программе PONYPROG для этого
    устройства.РадиоКот-приставка» морской бриз» для вентилятора. Спасибо.


  • admin Автор записи

    Зайди в калькулятор http://www.engbedded.com/fusecalc/
    Выбери чип ATtiny13
    В самом низу будет установка фьюз байт
    Для High вводишь F9
    Для Low вводишь 5A
    — это из картинки статьи.
    Получишь все свои фьюзы. Ставить как есть

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

  • Что же такое 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 – очень опасный фьюз, ошибочная установка может отключить вывод RESE T , после чего пропадет возможность программирования 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 и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.

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

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

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

    Вопрос, который давно требует пояснений — что же такое 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 становится обычным портом ввода-вывода. В следствие чего становится не возможным использовать ее при последовательном программировании, т.е. микроконтроллер не возможно прошить без специального программатора .

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

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

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

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

  • © 2024 iteleradio.ru - Твой компьютер