Когда дело доходит до прошивки программы в микроконтроллер 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-биты устанавливаются разными способами (галочками, списком или иначе), но всегдаи вездеЗАПРОГРАММИРОВАННОМУ состоянию бита соответствует НОЛЬ, а не единица.