Несколько слов про FUSE-биты |
Автор ARV | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
07.01.2008 г. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Когда дело доходит до прошивки программы в микроконтроллер AVR, наибольшие проблемы, как правило, вызывают загадочные и непонятные fuse-биты... И зачем только фирма Atmel их придумала?! Многие, кто сгоряча решил установить их как-нибудь, горько пожалели потом, ибо их МК "умер" - перестал определяться программатором и не работал в собранной схеме... Так что же это такое - fuse-биты? Зачем они нужны? Как их использовать? Именно об этом сейчас и пойдет речь.
В этой таблице перечислены все 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) | Просмотров: 59932
Только зарегистрированные пользователи могут оставлять коментарии. |
« Пред. | След. » |
---|