Site Loader

Atmega8 fuse по умолчанию. Микроконтроллеры avr: fuse-биты. Fuse- и Lock-биты

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

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

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

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

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

Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE.

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

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

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


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

Т.е. с точностью до наоборот.

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

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

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

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

За источник тактов отвечают биты

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

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

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

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

Землю осцила на землю контроллера, а выход генератора на XTAL1.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

BODLEVEL и BODEN — это режим контроля за напряжением. Дело в том, что при определенном пороге напряжения, ниже критического уровня, контроллер может начать сильно глючить. Самопроизвольно может запортачить, например, EEPROM или еще что откосить. Ну, а ты как думал, не покорми тебя с пару недель — тоже глючить начнешь:)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опубліковано 16.07.2012

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

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

Семейство
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
+++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 разрешает работу схемы внутреннего отладчика (O n C hip D ebug EN able). Не оставляйте установленным этот бит в коммерческих продуктах! Иначе вашу программу можно будет считать из памяти МК.

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 пинцетом )

Группа битов CKSEL0 CKSEL3 — 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 .

Что же такое 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МГц

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

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

(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 остался нетронутым.

  • Atmega8 фьюзы по умолчанию

    В данном проекте приводится введение во fuse-биты ATmegaP и показывается, как установить их для использования внешнего кварцевого резонатора 16 МГц. Fuse-биты, также известные как фьюзы или биты конфигурации, — это настройки микроконтроллера для управления определенными действиями, которые обычно не изменяются во время выполнения программного кода. В данной статье вкратце объясняется, какие действия находятся в ATmegaP, и как их устанавливать. Fuse-биты для выбора источника тактового сигнала будут рассмотрены более подробно, в том числе, как и зачем выбрать внешний кварцевый резонатор 16 МГц.


    Поиск данных по Вашему запросу:

    Схемы, справочники, даташиты:

    Прайс-листы, цены:

    Обсуждения, статьи, мануалы:

    Дождитесь окончания поиска во всех базах.

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

    Содержание:

    • Калькулятор фьюзов AVR
    • Конфигурация FUSE битов
    • Фьюзы микроконтроллеров AVR – как и с чем их едят
    • Как восстановить заводские настройки фьюзов ATmega8-16
    • Комментарии: 059-Исправляем AVR фьюзы при помощи «Atmega fusebit doctor».
    • Как настроить мк AVR на частоту 1Мгц без кварцевого резонатора?

    ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Как разблокировать Atmega8 через Fusebit doctor

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


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

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

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

    Не могу понять, в чем же причина? Пробовал как управляющую микруху использовать мегу8 и р. Результат всегда один и тот же. Стоит только сопли пожевать, как всё начинает работать… Загадка Все контроллеры оживлены, только вот не побеждены кракозябры в терминале.

    What to do? На 1 и 3 он может не реагировать. Нужно полностью очистить чип. Это процедура включает и сброс фьюзов до заводских настроек. Are you the publisher? Claim or contact us about this channel. Embed this content in your HTML. Report adult content:. Account: login. More Channels. Channel Catalog Subsection Catalog. Articles on this Page showing articles 1 to 10 of Channel Description: Готовые решения для твоих электронных проектов.

    Contact us about this article. Your IP : — Country : — City:. Самое странное, что кракозябры и в линуксе, и в винде. Может скорость порта стоит не та? Adult Image? Browsing the Latest Snapshot. Browse All Articles Articles. Live Browser.


    Конфигурация FUSE битов

    При прошивке фьзов. Микроконтроллер сразу перестал работать, а при попытке установить фьзы по умолчанию и другими способами. Уже не получалось восстановить. Ну раз установлен внешний осциллятор — придется его подключить. Без задающего генератора не прошить даже фьюзы. Как определяется какая нога куда идет? Где об этом почитать?

    FUSE-бит, Назначение, Значение по умолчанию. RSTDISBL, Определяет является 6-ой вывод порта «С» выводом для приёма сигнала сброса (RESET.

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

    Re: пассики для проигрывателей винила Re: Динамическая индикация на LCD дисплее Re: Пассик на пленочный магнитофон Re: Продам набор SMD конденсаторов в корпусе Re: ШИМ-регулятор на Attiny13 Исторически сложилось так, что даже самые первые модели микроконтроллеров имели программируемые ячейки защиты информации. Микроконтроллеры AVR так же имеют такую защиту. Это специальные ячейки, построенные по принципу Flash-памяти то есть, энергонезависимой памяти с электрическим стиранием информации. Каждый микроконтроллер имеет как минимум две защитные ячейки LB1 и LB2. Запись и чтение этих ячеек возможна только в режиме программирования.

    Как восстановить заводские настройки фьюзов ATmega8-16

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

    Выбор микроконтроллера. Выберите контроллер.

    Комментарии: 059-Исправляем AVR фьюзы при помощи «Atmega fusebit doctor».

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

    Как настроить мк AVR на частоту 1Мгц без кварцевого резонатора?

    Прошу понять меня правильно. Мы с google перепробовали десяток вариантов статей и я уже запутался какая удачная. Откинув их всех как мусор иду к вам на поклон. Помогите настроить FUSE биты для проццов atmega 8 atmegs и atmega В этой процедуре ничего сложного.

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

    Сканируйте QR-код и установите это приложение непосредственно на ваше Android-устройство. This fuse calculator for AVR microcontroller supports devices. You can set the fuse bits manually supported are low, high and extended fuse or use predefined settings. Those features make it very easy to set the fuses.

    Дневники Файлы Справка Социальные группы Все разделы прочитаны. Как восстановить заводские настройки фьюзов ATmega Доброго времени суток!! При прошивке atmega8 по невнимательности прошил все fuse — В С Е! Программатор перестал видеть МКС.

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

    Поиск новых сообщений в разделах Все новые сообщения Компьютерный форум Электроника и самоделки Софт и программы Общетематический. Только где эта спец прога с прошивкой. А насчет дыма я не видел. Просто я еще и пытался прошить СVAVR, там вообще темный лес особенно для меня ,который в этом деле не волокет ни яху Может я и наварочил что нибудь с этими экспери ментами. Сообщение от mig Залочил МЕГА 8, аж 7 штук. Почему в архиве прошивки для 8, 88, и для куда их?

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


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

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

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

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

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

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

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

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

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

     

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     

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

    Установка AVR Fuse Bits

    Все мы знаем о том, как тактируется чип AVR ATmega32A. Во всех наших предыдущих уроках мы использовали внутреннюю тактовую частоту 1 МГц для управления чипом AVR. Это настройка часов по умолчанию, с которой микросхема ATmega поставляется с завода. В этом уроке мы научимся настраивать биты предохранителей AVR для использования разной тактовой частоты для различных приложений. Это важно там, где нам требуется очень точная и точная синхронизация, например, для реализации последовательного UART, связи USB. У нас есть предохранительные биты в микроконтроллерах AVR. Мы можем использовать эти фьюз-биты для тактирования микроконтроллера с желаемой частотой.

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

    Что такое плавкие биты AVR?

    Как мы все знаем, микроконтроллер AVR имеет три области памяти: FLASH, которая предназначена для программного кода, SRAM для переменных времени выполнения и EEPROM, которая может использоваться пользовательским кодом для хранения данных, которые должны быть сохранены. когда MCU выключен. Теперь замок/предохранители вместе образуют четвертую область памяти, доступную для программирования. Это содержит несколько байтов для предохранителей: младший байт, старший байт.

    Прежде чем мы начнем анализировать биты фьюза и блокировки. Мы должны помнить, что бит, установленный в «0», означает, что он запрограммирован, а бит, установленный в «1», означает, что он не запрограммирован. Это немного сложно и очень важно отметить, прежде чем мы продолжим.

    В этом уроке мы хотим показать, как можно синхронизировать микроконтроллер с разной частотой (настройка фьюз-битов avr). Обычно имеется только два байта предохранителя: старший и младший. Мы больше сосредоточимся на его использовании. Практический пример в этом руководстве позволит вам полностью понять концепцию, и вы будете готовы к дальнейшим экспериментам самостоятельно. Мы рассмотрим биты блокировки в следующем уроке. Расположение конкретных фьюз-битов различается среди всех фьюз-байтов в зависимости от используемой микросхемы AVR. Поэтому обязательно запишите их перед установкой. В качестве примера возьмем микроконтроллер ATmega32A и вот все байты фьюза для него.

    Low Fuse Byte-AVRHigh Fuse Byte-AVR

    Значение по умолчанию для бита предохранителя ATmega32/32A равно 0x99E1, т.е. старший предохранитель: 0x99 и низкий предохранитель: 0xE1, при этой настройке по умолчанию частота установлена ​​на 1 МГц, внутренний RC-генератор, время запуска: 6CK+64ms:

    Отказ от ответственности:  Это руководство предназначено для информационных целей; делайте настройки фьюзов на свой страх и риск.

    Объяснение каждого бита предохранителя:

    BODLEVEL: С помощью этого бита предохранителя можно выбрать уровень срабатывания BOD (обнаружение отказа). Когда запрограммировано (0), уровень запуска составляет 4 В, а когда не запрограммирован (1), уровень запуска составляет 2,7 В.

    BODEN: ATmega32A имеет встроенную схему обнаружения пониженного напряжения (BOD) для контроля уровня VCC во время работы путем сравнения его с фиксированным уровнем срабатывания. Когда BOD включен (запрограммирован BODEN) и VCC снижается до значения ниже уровня срабатывания, немедленно активируется сброс по отключению питания. Когда VCC увеличивается выше уровня запуска, он снова запускает микроконтроллер.

    SUT1:0: Эти биты выбирают время запуска. Значение по умолчанию SUT1:0 приводит к максимальному времени запуска (6CK и дополнительная задержка 65 мс после RESET [см. таблицу: 8-9)., стр. №: 30].

    CLKSEL [3-0]: Эти биты используются для выбора различных доступных параметров синхронизации. Значение по умолчанию CLKSEL[3..0] равно 0001, т.е. внутренний RC-генератор работает на частоте 1 МГц. Если вы хотите добавить внешний кварц, вам необходимо изменить значение в соответствии с [Таблица 8-1, страница №:26]. Некоторые общие значения фьюз-битов приведены в конце этой статьи.

    OCDEN: Этот контакт используется для включения или отключения встроенной отладки. Это позволяет эмулировать работу микроконтроллера в реальном времени в целевой системе. По умолчанию он отключен, так как «1» означает, что он не запрограммирован.

    JTAGEN: Встроенные интерфейсы JTAG для отладки. Он включен в новом микроконтроллере. По этой причине некоторые новички говорят: «PORTC ATmega32 не работает должным образом», отключите его, если вы не используете JTAG, установив JTAGEN бит 1 (высокий).

    SPIEN: Значение 0 (запрограммировано) означает, что последовательное программирование ATmega32/32A включено. Не изменяйте это, если у вас нет параллельного программатора! Потому что однажды отключенный ATmega32A не может быть запрограммирован с помощью последовательного программатора.

    CKOPT: Предохранитель CKOPT выбирает один из двух разных режимов усилителя генератора. Когда CKOPT запрограммирован, выход генератора будет колебаться с полным размахом от рельса к рельсу на выходе. Когда он не запрограммирован, осциллятор имеет меньший выходной размах. Если вы используете внешний генератор, лучше запрограммировать CKOPT, т. е. CKOPT = 0

    EESAVE: Если запрограммировано (0), это сохранит EEPROM от стирания во время стирания чипа, иначе EEPROM также будет стерт флэш-памятью.

    BOOTSZ0 и BOOTSZ1: Эти биты используются для установки размера загрузчика.

    Пример: Установка битов предохранителя AVR

    Теперь вы готовы синхронизировать микроконтроллер с разными частотами. В этом примере мы будем генерировать звуковой сигнал с помощью пьезодиска. И влияние будет показано с точки зрения изменения звуковых сигналов. Давайте посчитаем фьюз-биты для разных тактовых частот. Вот замечательная программа для расчета фьюз-битов для вас AVR Fuse Calculator

    Случай 1: 1 МГц Внутренние часы (по умолчанию), Низкий предохранитель: 0xe1 Высокий предохранитель: 0x99

    Корпус 2: 8 МГц Внутренние часы, .

    Случай 3: 16 МГц Внешний кристалл, Low Fuse: 0xFF High Fuse: 0x99

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

    Вот видео, которое представляет собой пошаговую инструкцию. Также влияние было продемонстрировано в ходе демонстрации в режиме реального времени: Установка битов предохранителя AVR

    Об Умеше Локханде

    Умеш Лоханде имеет степень магистра в области научного приборостроения Йенского университета прикладных наук, Германия. и ранее работал в Orbotech, Alere Technologies и т. д. Умеш также является основателем и первым автором BINARYUPDATES.COM

    .

    Предыдущая настройка Eclipse под Linux для микроконтроллеров AVR

    Следующая USART в микроконтроллере AVR ATmega32A

    Учебное пособие по AVR — Предохранители

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

    Комментарии? Предложения? Пишите на форум!

    Вы знаете о flash, eeprom и RAM как о частях чипа. Чего я не упомянул, так это того, что есть также 3 байта постоянного (под постоянным я подразумеваю, что они остаются после отключения питания, но вы можете менять их столько раз, сколько хотите) хранилища, называемого предохранителями. Предохранители определяют, как будет действовать чип, есть ли у него загрузчик, на какой скорости и напряжении он предпочитает работать и т. д. Обратите внимание, что, несмотря на то, что они называются «предохранителями», они переустанавливаются и не имеют ничего общего с защитой от перегрузки. (как предохранители в доме).

    Предохранители задокументированы в таблицах данных, но лучший способ изучить предохранители — это посмотреть на калькулятор предохранителей, такой как калькулятор предохранителей avr из проекта palmavr

    Щелкните эту ссылку в новом окне и выберите ATtiny2313 для расчетов предохранителей

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

     

    Первый вариант — это то, как чип тактируется. Каждый ЦП использует часы. Часы отслеживают время для чипа, как правило, одна инструкция ассемблерного кода запускается каждый такт. В вашем ПК часы работают на частоте 1 ГГц или выше. Этот маленький чип работает намного медленнее. Если вы посмотрите на меню, то увидите огромный список опций, но присмотревшись, вы увидите две группы: Источник тактовой частоты , Запуск тактовой частоты

    Источник тактовой частоты может быть одним из следующих:
    Внешняя тактовая частота, внутренняя тактовая частота 8 МГц, внутренняя тактовая частота 4 МГц, внутренняя тактовая частота 128 кГц, внешний кристалл (0,4–0,9 МГц), Внешний кристалл (0,9–3,0 МГц), Внешний кристалл (3,0–8,0 МГц)
    или Внешний кристалл (8,0 МГц +)

    Clock Startup может быть одним из следующих:
    14CK + 0 мс , 14CK + 4 мс, 14CK + 65 мс
    .

    Внешний тактовый сигнал означает, что прямоугольная волна подается на контакт CLOCK-IN . Это довольно редко, если у вас нет чипа, генерирующего часы. Не используйте это, если вы не уверены, что имеете в виду
    Внутренние часы. означает, что внутри чипа есть небольшой генератор, он не очень точный, но подходит для большинства проектов, у которых нет проблем с синхронизацией. Часы меняются в зависимости от температуры и напряжения питания. Вы можете выбрать тактовую частоту 8 МГц, 4 МГц или 128 кГц. Тактовая частота 128 кГц предназначена для приложений с очень низким энергопотреблением, где очень медленная работа чипа помогает экономить энергию. Наличие внутреннего генератора означает, что нам не нужно подключать кварцевый кристалл, и мы можем использовать тактовые контакты для своих гнусных целей.
    Внешний кварц
    Если вам нужна особая тактовая частота, например 3,58 МГц или 12 МГц, или высокоточные часы, которые не будут дрейфовать при изменении температуры, вам понадобится внешний кварц или осциллятор.

    Кристаллы выглядят примерно так: Керамические генераторы выглядят так:

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

    Startup Time — это время, необходимое источнику тактового сигнала для успокоения с момента первого включения питания. Всегда используйте самую длинную настройку 14CK + 65 мс , если вы точно не знаете, что вашему источнику синхронизации требуется меньше времени, а 65 мс слишком долго ждать.

    По умолчанию микросхемы, которые поставляются с завода, имеют внутреннюю тактовую частоту 8 МГц с 14CK + 65 мс при запуске.

    Следующая опция — Clock Out on PortD2 , что означает, по сути, что каким бы ни был тактовый вход (внутренний, внешний, кварцевый и т. д.), прямоугольная волна той же частоты появится на контакте 9.0019 Д2 . Это полезно, если вы отлаживаете тактовую частоту или хотите использовать часы для управления другим чипом.

    По умолчанию чипы, которые поставляются с завода, отключены.

    Этот предохранитель заставляет микросхему делить тактовую частоту на 8. Таким образом, если в качестве источника тактовой частоты установлено значение Internal 8MHz и у вас установлен этот предохранитель, то вы действительно будете работать на частоте 1 МГц.

    По умолчанию на заводских чипах эта функция включена.

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

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

    Например, attiny2313 может работать так же быстро на частоте 20 МГц, но только при напряжении питания от 4,5 В до 5,5 В. Если напряжение ниже этого значения, он может работать нестабильно, стирая или перезаписывая ОЗУ и ЭСППЗУ. Также может запуститься случайный фрагмент программы flash. Чтобы этого не произошло, установите напряжение отключения на 4,3 В, тогда, если напряжение упадет, чип выключится, пока напряжение не вернется. Затем он перезагрузится и начнется заново.

    Если микросхема предназначена для работы при напряжении 5 В, установите параметр снижения напряжения на 4,3 В. Если микросхема может работать при напряжении до 3,3 В, вы можете установить снижение напряжения до 1,8 В. Если чип является чипом, совместимым с низким напряжением, таким как attiny2313V (который может работать до 1,8 В, если его тактовая частота составляет 4 МГц или меньше), вы можете установить снижение напряжения до 1,8 В. Вы можете прочитать классы скорости и напряжения на первой странице таблицы данных.

    alexxlab

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *