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

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

материалы в категории

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

Что такое FUSE биты? Слово вроде знакомое, при прошивке микроконтроллера многие с ними сталкивались, но не вникая в особенности просто выставляли их как надо и все…
Но так как нас постоянно предупреждают что при прошивке необходимо правильно выставлять все фьюзы (иначе микроконтроллер просто зависнет), то давайте уделим немного внимания что-же такое фьюзы и зачем они нужны

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

фьюзы расписаны.

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

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

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

XTAL1 и XTAL2, кроме того припаивается пара конденсаторов  ~20пф одни концом на кварц, другим на минус. Если допустить ошибку при установке этих фьюзов, то микроконтроллер может «зависнуть» и для того чтобы восстановить контроллер, подают тактовый сигнал на ногу XTAL1.
На данный момент придумано не мало схем для восстановления контроллеров, залоченных таким образом. Этот генератор можно сделать практически из любой логики или даже из таймера 555 или на простейшей логике типа К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 и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.

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

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


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

radio-uchebnik.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

Фьюзы что это? — Мои статьи — Каталог статей

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

FUSE – биты (с англ. Предохранительные биты) —  это конфигурационные программируемые биты, которые определяют дальнейший режим работы МК. Эти биты или ячейки сгруппированы в несколько байтов: cтарший конфигурационный байт, младший конфигурационный байт и бывает еще дополнительный конфигурационный байт. 

И так вы приступили к программированию фьюзов, перед вами появились перечень их: BODLEVEL, BODEN, SUT1, SUT0, CKSEL3, CKSEL2, CKSEL1, CKSEL0, S8515С, WDTON, SPIEN, CKOPT, EESAVE, BOOTSZ1,BOOTSZ0, BOOTRST, RESERVED,  OCDEN, JTAGEN, SELFPRGEN, DWEN, RSTDISBL, CKDIV, CKOUT,PLLCK. Процесс программирования фьюзов обычно выглядит так: установка галочки в окошке напротив названия бита.

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

BODLEVEL2…0 — порог срабатывания супервизора питания.

Этот бит предназначены для задания номинального значения порога срабатывания супервизора питания (BOD). Во время подачи питания МК удерживается в состоянии сброса до тех пор, пока напряжение VCC не достигнет запрограммированного порога срабатывания супервизора BOD. Порог срабатывания супервизора питания, даже если он неактивен, должен быть установлен ниже уровня VCC.

BODEN— бит, включающий схему аппаратного детектора недопустимого уровня питающего напряжения, т. е. схему BOD (0 – разрешение, 1- запрещение).

SUT1, SUT0— (STARTUPTIME) служат для определения длительности задержки сброса. Биты, управляющие режимом запуска тактовых генераторов МК. Связаны с битами, определяющими тип и частоту тактового генератора. При ошибочной их установки возможны ситуации неустойчивого запуска генератора или неоднократного сброса МК в процессе подачи на него питания. Другими словами их используют для задания задержки времени с момента деактивации всех источников сброса и до момента деактивации внутреннего сброса, инициированного счетчиком длительности задержки. Данный счетчик синхронизируется с выхода ULP-генератора частотой 1 кГц.

 CKSEL[3..0] – биты определяющие режим тактирования МК, а именно источник тактового сигнала и его частоту. При неверной установки этих битов , МК может не обнаруживаться последовательным программатором. Для выхода из этого состояния потребуется параллельный программатор.  По умолчанию они настроены на работу МК от внутреннего тактового генератора  1 МГц, при установки всех битов в единицу, МК будет тактироватся от внешнего кварцевого резонатора.


WDTON – бит включения и отключения сторожевого таймера/счетчика. (0 – всегда включен. В этом случае программно его не выключить. 1 – может управляется программно. Имеется ввиду в тексте вашей программы).

SPIEN – бит, который разрешает или запрещает программирования МК через интерфейс SPI (0 – разрешено, 1- запрещено). То есть программирование через последовательный программатор.

CKOPT— этот  конфигурационный бит выбирает один из двух режимов усилителя генератора. Если CKOPT запрограммирован, то амплитуда колебаний выходного сигнала генератора будет ограничена уровнями питания. Данный режим рекомендуется использовать при высоком уровне окружающих шумов или при использовании выхода XTAL2 в качестве источника синхронизации внешней схемы. Данный режим характеризуется широким частотным диапазоном. Если CKOPT – незапрограммирован, то амплитуда выходных колебаний генератора снижается. Использование данного режима позволяет существенно снизить потребляемую мощность, но при этом ограничен частотный диапазон и нельзя XTAL2 использовать для внешней синхронизации. При использовании резонаторов максимальная частота равна 8 МГц, если CKOPT – незапрограммирован, и 16 МГц, если CKOPT- запрограммирован. Вот еще табличка,  которая может быть полезная:

EESAVE – Определяет влияния  команды «стирания кристала» Если установить в 0, то при стирании памяти кристалла, содержимое EEPROM не сотрется. Если 1 – то при стирании кристалла, вместе с памятью программ и сотрутся все данные EEPROM.

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

BOOTRST — управление переносом вектора сброса в загрузочный сектор. Конфигурационный бит BOOTRST программируют при необходимости переноса вектора сброса в начало загрузочного сектора Flash-памяти. В таком случае, после сброса МК, выполнение программы начнется из загрузочного сектора.


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

OCDEN – разрешает или запрещает внутрисхемную отладку. (0– разрешен, 1– запрещен).

JTAGEN-  разрешение или запрещения использования интерфейса JTAG (0– разрешен, 1– запрещен).

SELFPRGEN—  разрешение самопрограммирования (0– разрешен, 1– запрещен).

DWEN —  разрешение или запрещения использования отладочного интерфейса debagWire (0– разрешен, 1– запрещен).

RSTDISBL —  определяет функционирования вывода МК, совмещенного с аппаратным выводом сброса. (0 – контакт порта ввода/вывода, 1- вывод сброса)/

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

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

PLLCK—  использования выходного сигнала схемы ФАПЧ в качестве тактового.

Рисунок 1 А так выглядит установка FUSE- бит в программе PonyProg. Ставим галочку — 0, снимаем галочку -1. Не путать!!!!

При программировании  наибольшую опасность для МК, при неправильной установки фьюзов вызывают фьюзы CKSEL3..0 и RSTDISBL. Эти фьюзы нужно програмировать с особой внимательностью.

Состояния фьюзов не изменяется после выполнения операции «стирания кристала».

  Новичкам советую изменять только биты CKSEL3..0. Если не используйте кварц, то и вовсе не стоит что-то изменять. Оставьте заводские настройки. Ну а если подкинули кварц, хотите чтоб ваш МК тактировался частотой свыше 1 МГц, тогда запишите в биты CKSEL3…0 все еденички, что на логике микроконтроллеров означает незапрограммированное состояние.

  Есть еще кое какие неудобства при программировании фьюзов: установленным считается fuse-бит, равный нулю, а сброшенным – равный единице. Это связано с общим принципом работы с любой памятью – от ПЗУ до МК – стертая (т. е. чистая) память содержит все единицы, и только нолики могут быть в нее записаны. Никогда не забывайте об этом! Как правило в разных программаторах fuse-биты устанавливаются по разному (галочками, списком или иначе), но всегда и везде ЗАПРОГРАММИРОВАННОМУ состоянию бита соответствует НОЛЬ, а не единица!!!

 


microelectronic.at.ua

Программирование микроконтроллеров. Фьюzzы — DRIVE2

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

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

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

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

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

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

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

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

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

WDTCR=0x1F;
WDTCR=0x0F;

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

#asm(«wdr»)

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 интерфейсу.

www.drive2.ru

МИКРОКОНТРОЛЛЕРЫ AVR: FUSE-БИТЫ

   В данном обзоре рассмотрим, что же такое fuse-биты и для чего они нужны, так как это вызывает много непонимания (да и разработчики прошиващего софта вертят их как хотят). В результате этого контроллеры AVR кучами складываются в коробки до «лучших времен». Для примера рассмотрим fuse-биты на примере МК ATMega8. Для других типов контроллеров AVR назначение уточняются в даташите на конкретный МК (не ленитесь читать документацию). Итак, поехали! Все фьюз-биты МК разделены на 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.

Внутренний генератор с внутренней задающей RC-цепочкой


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


   Внутренний генератор с внешней задающей 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.

el-shema.ru

024-Что такое Fuse bits AVR микроконтроллеров. — GetChip.net

В посте про тестовые прошивки, рядом с самой прошивкой для микроконтроллера лежит картинка с названием «Фьюзы для тестовой прошивки ATMega48/88/168». Зачем эта картинка нужна? Что обозначают галочки в чекбоксах?

Fuse bits называют область (4 байта) в AVR микроконтроллерах отвечающую за начальную (глобальную) конфигурацию. Этими битами мы указываем микроконтроллеру, с каким задающим генератором ему работать (внешним|внутренним), делить частоту генератора на коэффициент или не нужно, использовать ножку сброса как сброс или как дополнительный порт ввода-вывода, количество памяти для загрузчика и другое. У каждого контроллера свой набор фьюзов.

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

Например:

— разрешить использование SPI — интефейса. Должно быть без галочки иначе станет невозможным последовательное программирование;

— запретить использование сброса. Ножка сброса станет еще одним портом ввода-вывода. Должно быть с галочкой, иначе станет невозможным последовательное программирование.

— разрешить использование debugWIRE. Ножка сброса используется как канал для отладки. Должно быть с галочкой, иначе станет невозможным последовательное программирование.

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

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

Почему так? Объясню. Сейчас конфигурационные байты записываются во флеш памяти и поменять их можно сколько угодно раз. Раньше, в суровые времена, когда флеш памяти еще не было, для конфигурации какого-либо чипа в его архитектуре имелись специальные перемычки (fuse) которые разово физически сжигались. Вот поэтому, по старинке, если перемычка цела-«1» значит эта функция не задействована и наоборот – перемычку спалили-«0» значит функция задействована.

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

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

(Visited 9 568 times, 1 visits today)

www.getchip.net