|
|
![]() ![]() |
|
![]() ![]() ![]() ![]() |
|
Опции темы | Поиск в этой теме |
![]() ![]() |
![]() ![]() |
Увлеченный
|
![]()
Fuse биты - это биты которые настраивают некоторые параметры микроконтроллера, и не могут быть изменены из программы.
Не правильная конфигурация фьюзов может "заблокировать" МК после чего обычным программатором его прошить уже не получится. Тут поможет HVPP ( High Voltage Parallel Programming) для ATmega и ATiny2313, или HVSP (High Voltage Serial Programming) для ATiny (кроме Attiny 2313) И так рассмотрим их по-подробней... ( примеры буду приводить для ATmega88 ) Открываем даташит на конкретный МК, смотрим в разделе Memory programming - Fuse bits, видим следующее Вложение 4741 Вложение 4742 Как можно заметить из таблиц, эти биты выставляют инверсно ( 0 - установлен, 1 не установлен, это немного не логично, но не стоит забывать об этом) Рассмотрим что означает каждый бит: RESERVED — этот бит зарезервирован для каких-то неизвестных простым смертным целей фирмой Atmel. Ни при каких условиях не рекомендуется менять его состояние (т. е. надо оставлять его таким, как он установлен при изготовлении МК). В этой строке встречаются биты с другими названиями, как правило, это биты включения режима совместимости с устаревшими типами МК, на смену которым выпущены новые. Обычно в конце названия такого fuse-бита имеется символ С — от COMPATIBLE (совместимый). OCDEN — fuse разрешает работу схемы внутреннего отладчика (On Chip Debug ENable). Не оставляйте установленным этот бит в коммерческих продуктах! Иначе вашу программу можно будет считать из памяти МК. 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. К примеру нам нужно установить такую комбинацию RSTDISBL - (1) DWEN - (1) SPIEN + (0) WDTON - (1) EESAVE - (1) BODLEVEL2 - (1) BODLEVEL1 + (0) BODLEVEL0 - (1) CKDIV8 - (1) CKOUT - (1) SUT1 - (1) SUT0 + (0) CKSEL3 + (0) CKSEL2 + (0) CKSEL1 - (1) CKSEL0 + (0) получаем комбинацию High fuse byte: 11011101 Low fuse byte: 11100010 а дальше всё зависит от программатора, которым вы будете прошивать МК спасибо за внимание |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
|
![]()
Спасибо, интересно. +1.
__________________
Внимание! Это сообщение сгенерировано автоматически, отвечать на него не нужно. |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Новичок
Регистрация: 28.10.2012 Последняя активность: 14.11.2012 20:57
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
отличный рассказ, особенно для тех кто вообще не понимает что это такое
Спасибо! |
![]() |
![]() ![]() |