Описание установки FUSE-битов

В энергонезависимой памяти AVR имеется несколько специализированных бит и байт. FUSE-биты позволяют задавать некоторые конфигурационные особенности микроконтроллера (режимы работы отдельных его узлов и микроконтроллера в целом). Для того что бы запрограммировать FUSE-бит в него необходимо записать значение 0. В зависимости от применяемого программного обеспечения для программирования микроконтроллера трактовка активного состояния этих битов может быть разной и иногда непонятной (вам может показаться что вы запутались). Поэтому перед использованием программы внимательно изучите документацию.

Ни в коем случае не перепрограммируйте биты RSTDISBL и SPIEN, так как после этого микроконтроллер перестанет программироваться при помощи ISP-адаптера! Бит SPIEN по умолчанию запрограммирован с завода, RSTDISBL соответственно незапрограммирован.

Установка Fuse-битов для старых блоков на ATmega32

Для правильной работы устройства должны быть запрограммированы только следующие FUSE-биты (без учета RSTDISBL, SPIEN):

  • SUT1
  • BODEN
  • BODLEVEL
  • CKOPT
  • EESAVE
  • BOOTRST
  • BOOTSZ0

Бит BOOTRST определяет куда будет передаваться управление после сброса. Когда он запрограммирован, после сброса запускается загрузчик, который проверяет состояние перемычки и если ее нет, передает управление основной программе. В SECU-3 используеться загрузчик (бутлоадер) размером 512 байт (mega16) и 1024 байт (mega32), в связи с этим BOOTSZ1 должен быть равен “1” (незапрограммирован), а BOOTSZ0 равен “0” (запрограммирован).

Командная строка AVReAl (адаптер подключен к LPT1) для программирования FUSE-битов выглядит следующим образом:

avreal32.exe -as -p1 +atmega16 -o16MHZ -w 
-fBODLEVEL=ON,BODEN=ON,SUT=01,CKSEL=F,CKOPT=ON,
EESAVE=ON,BOOTRST=ON,JTAGEN=OFF,BOOTSZ=2

Пример установки FUSE-битов в PonyProg:
FUSE-биты в PonyProg

Fuse-биты для блоков с ATmega644

LFUSE=0xD7
HFUSE=0xD4
EFUSE=0xFC

Или так:
CKDIV8=1
CKOUT=1
CKSEL3=0
CKSEL2=1
CKSEL1=1
CKSEL0=1
SUT1=0
SUT0=1
JTAGEN=1
SPIEN=0
OCDEN=1
WDTON=1
EESAVE=0
BOOTRST = 0
BOOTSZ1 = 1
BOOTSZ0 = 0
BODLEVEL2=1
BODLEVEL1=0
BODLEVEL0=0
“0” – означает что бит запрограммирован

В CodeVision:

ATmega644 fuse биты CodeVision AVR