Содержимое FLASH-памяти программ, а также содержимое EEPROM-памяти данных может быть защищено от записи и/или чтения посредством программирования ячеек защиты (Lock Bits) LB1 и LB2. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в табл. 8.2.
Таблица 8.2. Режимы защиты
№ режима
Ячейки защиты
Описание
LB1
LB2
Защита кода и данных отключена
Запись FLASH и EEPROM запрещена
Запрещены запись и чтение FLASH и EEPROM
В режимах 2 и 3 запрещается также изменение конфигурационных ячеек. Поэтому включение защиты следует выполнять в самую последнюю очередь, после программирования остальных областей памяти микроконтроллера.
Во всех микроконтроллерах семейства, кроме ATmega48x, имеется четыре дополнительные ячейки защиты — BLB02, BLB01, BLB12 и BLB11. Ячейки BLB02:BLB01 определяют уровень доступа из секции загрузчика к коду, расположенному в секции прикладной программы, а ячейки BLB12:BLB11, наоборот, определяют уровень доступа из секции прикладной программы к коду, расположенному в секции загрузчика. Отсутствие указанных ячеек в модели ATmega48x обусловлено отсутствием у последней выделенной секции загрузчика. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в табл. 9.3 и табл. 9.4 соответственно.
Таблица 9.3. Режимы защиты секции прикладной программы
№ режима
Ячейки защиты
Описание
BLB02
BLB01
Нет никаких ограничений по доступу к коду, расположенному в секции прикладной программы
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы, и команда LPM (ELPM), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы.
Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены
Команда lpm (elpm), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы.
Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены
Таблица 9.4. Режимы защиты секции загрузчика
№ режима
Ячейки защиты
Описание
BLB12
BLB11
Нет никаких ограничений по доступу к коду, расположенному в секции загрузчика
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика, и команда LPM (ELPM), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика. Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены
Команда lpm (elpm), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика.
Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены
Все перечисленные ячейки защиты сгруппированы в одном байте. Расположение ячеек защиты в нем для разных моделей приведено на Рис. 14.1.
Рис. 9.1. Байт ячеек защиты
В исходном (запрограммированном) состоянии во всех ячейках защиты содержится 1, после программирования – 0. Стирание ячеек (запись в них лог. 1) может быть произведено только при выполнении команды “Стирание кристалла”, уничтожающей также содержимое FLASH- и EEPROM-памяти.
Конфигурационные ячейки
Как следует из названия, конфигурационные ячейки (Fuse Bits) определяют различные параметры конфигурации микроконтроллера. Эти ячейки расположены в отдельном адресном пространстве, доступном только при программировании. Все конфигурационные ячейки сгруппированы в несколько байтов, а состав этих ячеек зависит от конкретной модели микроконтроллера. Наличие тех или иных ячеек в конкретном микроконтроллере можно определить по табл. 9.5, где в столбцах, отмеченных “звездочкой”, указаны состояния конфигурационных ячеек по умолчанию.
Краткое назначение всех конфигурационных ячеек приведено в табл. 9.6. Подробное описание их назначений было приведено в соответствующих главах книги.
Для изменения содержимого конфигурационных ячеек используются специальные команды программирования. Команда “Стирание кристалла” на состояние этих ячеек не влияет. Напоминаю, что при запрограммированной ячейке защиты LB1 конфигурационные ячейки блокируются. Поэтому конфигурацию микроконтроллера необходимо задавать до программирования ячеек защиты.
Таблица 9.5. Конфигурационные ячейки микроконтроллеров семейства
Бит
ATmega8515x
ATmega8535x
ATmega8x
ATmegal6x/
32x
ATtaega64x/ 128x
ATmega48x
Название
*
Название
*
Название
*
Название
*
Название
*
Название
*
Младший конфигурационный байт
BODLEVEL
BODLEVEL
BODLEVEL
BODLEVEL
BODLEVEL
CKDIV8
BODEN
BODEN
BODEN
BODEN
BODEN
CKOUT
SUT1
SUT1
SUT1
SUT1
SUT1
SUT1
SUT0
SUTO
SUTO
SUTO
SUTO
SUTO
CKSEL3
CKSEL3
CKSEL3
CKSEL3
CKSEL3
CKSEL3
CKSEL2
CKSEL2
CKSEL2
CKSEL2
CKSEL2
CKSEL2
CKSEL1
CKSEL1
CKSEL1
CKSEL1
CKSEL1
CKSEL1
CKSEL0
CKSELO
CKSELO
CKSELO
CKSELO
CKSELO
Старший конфигурационный байт
S8515C
S8535C
RSTDISBL
OCDEN
OCDEN
RSTDISBL
WDTON
WDTON
WDTON
JTAGEN
JTAGEN
DWEN
SPIEN
SPIEN
SPIEN
SPIEN
SPIEN
SPIEN
СКОРТ
CKOPT
CKOPT
CKOPT
CKOPT
WDTON
EESAVE
EESAVE
EESAVE
EESAVE
EESAVE
EESAVE
BOOTSZ1
BOOTSZ1
BOOTSZ1
BOOTSZ1
BOOTSZ1
BODLEVEL2
BOOTSZ0
BOOTSZO
BOOTSZO
BOOTSZO
BOOTSZO
BODLEVEL1
BOOTRST
BOOTRST
BOOTRST
BOOTRST
BOOTRST
BODLEVELO
Дополнительный конфигурационный байт
––
—
—
—
—
—
—
—
—
—
—
—
—
M103C
—
WDTON
SELFPRGEN
* Значение бита.
Таблица 9.6. Назначение конфигурационных ячеек
Название
Назначение
RSTDISBL
Определяет функционирование 1 вывода микроконтроллера, совмещенного с выводом аппаратного сброса (0 — контакт порта ввода/вывода, 1 — вывод сброса)
CKSEL
Определяет режим работы тактового генератора, а также длительность задержки сброса tTout
BODLEVEL
Определяет порог срабатывания схемы BOR
BODEN
Разрешает/запрещает функционирование схемы BOR (0 — разрешено, 1 — запрещено)