26.04.2017 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Несколько слов про FUSE-биты Печать E-mail
Рейтинг: / 66
ХудшаяЛучшая 
Автор ARV   
07.01.2008 г.

Когда дело доходит до прошивки программы в микроконтроллер AVR, наибольшие проблемы, как правило, вызывают загадочные и непонятные fuse-биты... И зачем только фирма Atmel их придумала?! Многие, кто сгоряча решил установить их как-нибудь, горько пожалели потом, ибо их МК "умер" - перестал определяться программатором и не работал в собранной схеме...

Так что же это такое - fuse-биты? Зачем они нужны? Как их использовать? Именно об этом сейчас и пойдет речь.

 

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

 

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

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

Теперь несколько слов о назначении каждого бита. По порядку.

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Группа битов CKSEL0...CKSEL3 - биты, комбинация которых определяет тип и частоту работающего тактового генератора. Всего возможно до 16 комбинаций, однако не все определены для всех типов МК. Ошибочная установка комбинации этих битов может сделать МК "мертвым" - он не будет работать в схеме и не будет обнаруживаться последовательными программаторами - это вторая наиболее частая беда начинающих.

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

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

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

Вот и все биты. Разумеется, тут дана очень краткая информация об их назначении, но ее достаточно, чтобы выделить 3 группы fuse-битов: безопасные, относительно безопасные и опасные. Разумеется, эти степени опаснеости условны и отражают лишь степень возможных последствий для начинающих при неаккуратной работе с ними. В группу опасных можно выделить биты CKSELx и RSTDSBL, особенно последний, т.к. ошибочная установка его может навсегда (или очень надолго) умертвить ваш МК. Относительно безопасными можно считать биты BOOTRST, CKOPT, SUTx, JTAGEN, OCDEN и DWEN - неаккуратная работа с ними может немного попортить вам нервы, но к катастрофе не приведет (то есть МК не "потеряется"). Ну а все прочие - это безопасные fuse-биты, вряд ли они смогут доставить вам слишком много проблем.

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

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

 


Добавить в любимые (5) | Просмотров: 51708

  Коментарии (7)
 1 Написал(а) Anonim, в 16:28 10.01.2008
Спасибо за помошь
 2 Написал(а) dem-vr, в 19:57 10.01.2008
Благодарим за разьяснение, очень полезно! 
Когда порадуете параллельным и высоковольтным режимоми  
программирования для ChipBoom
 3 Написал(а) валерий, в 12:45 30.03.2008
спосибо за помощь
 4 Написал(а) OLEG, в 13:26 22.03.2010
Спасибо за разьяснение,очень помогло!
 5 Написал(а) nikolai, в 15:41 02.04.2010
спосибо
 6 Написал(а) Виталий, в 13:39 05.04.2010
присоединяюсь к словам благодарности-весьма полезная и обобщенная информация !
 7 Написал(а) Евгений, в 09:43 20.02.2011
большое и огромное спасибо!

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

 
« Пред.   След. »