Когда дело доходит до прошивки программы в микроконтроллер AVR, наибольшие проблемы, как правило, вызывают загадочные и непонятные fuse-биты… И зачем только фирма Atmel их придумала?! Многие, кто сгоряча решил установить их как-нибудь, горько пожалели потом, ибо их МК «умер» — перестал определяться программатором и не работал в собранной схеме…
Теперь несколько слов о назначении каждого бита. По порядку.
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-биты устанавливаются разными способами (галочками, списком или иначе), но всегда и везде ЗАПРОГРАММИРОВАННОМУ состоянию бита соответствует НОЛЬ, а не единица.
http://www.engbedded.com/fusecalc/
fred1144