Во всех микроконтроллерах семейства, кроме ATmega48x, имеется четыре дополнительные ячейки защиты — BLB02, BLB01, BLB12 и BLB11. Ячейки BLB02:BLB01 определяют уровень доступа из секции загрузчика к коду, расположенному в секции прикладной программы, а ячейки BLB12:BLB11, наоборот, определяют уровень доступа из секции прикладной программы к коду, расположенному в секции загрузчика. Отсутствие указанных ячеек в модели ATmega48x обусловлено отсутствием у последней выделенной секции загрузчика. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в табл. 9.3 и табл. 9.4 соответственно.
Таблица 9.3. Режимы защиты секции прикладной программы
№ режима | Ячейки защиты | Описание | |
BLB02 | BLB01 | ||
1 | 1 | 1 | Нет никаких ограничений по доступу к коду, расположенному в секции прикладной программы |
2 | 1 | 0 | Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы |
3 | 0 | 0 | Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы, и команда LPM (ELPM), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы.Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены |
4 | 0 | 1 | Команда lpm (elpm), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы.Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены |
Таблица 9.4. Режимы защиты секции загрузчика
№ режима | Ячейки защиты | Описание | |
BLB12 | BLB11 | ||
1 | 1 | 1 | Нет никаких ограничений по доступу к коду, расположенному в секции загрузчика |
2 | 1 | 0 | Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика |
3 | 0 | 0 | Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика, и команда LPM (ELPM), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика. Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены |
4 | 0 | 1 | Команда 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 | ||||||
Название | * | Название | * | Название | * | Название | * | Название | * | Название | * | |
Младший конфигурационный байт | ||||||||||||
7 | BODLEVEL | 1 | BODLEVEL | 1 | BODLEVEL | 1 | BODLEVEL | 1 | BODLEVEL | 1 | CKDIV8 | 0 |
6 | BODEN | 1 | BODEN | 1 | BODEN | 1 | BODEN | 1 | BODEN | 1 | CKOUT | 1 |
5 | SUT1 | 1 | SUT1 | 1 | SUT1 | 1 | SUT1 | 1 | SUT1 | 1 | SUT1 | 1 |
4 | SUT0 | 0 | SUTO | 0 | SUTO | 0 | SUTO | 0 | SUTO | 0 | SUTO | 0 |
3 | CKSEL3 | 0 | CKSEL3 | 0 | CKSEL3 | 0 | CKSEL3 | 0 | CKSEL3 | 0 | CKSEL3 | 0 |
2 | CKSEL2 | 0 | CKSEL2 | 0 | CKSEL2 | 0 | CKSEL2 | 0 | CKSEL2 | 0 | CKSEL2 | 0 |
1 | CKSEL1 | 0 | CKSEL1 | 0 | CKSEL1 | 0 | CKSEL1 | 0 | CKSEL1 | 0 | CKSEL1 | 1 |
0 | CKSEL0 | 1 | CKSELO | 1 | CKSELO | 1 | CKSELO | 1 | CKSELO | 1 | CKSELO | 0 |
Старший конфигурационный байт | ||||||||||||
7 | S8515C | 1 | S8535C | 1 | RSTDISBL | 1 | OCDEN | 1 | OCDEN | 1 | RSTDISBL | 1 |
6 | WDTON | 1 | WDTON | 1 | WDTON | 1 | JTAGEN | 0 | JTAGEN | 0 | DWEN | 1 |
5 | SPIEN | 0 | SPIEN | 0 | SPIEN | 0 | SPIEN | 0 | SPIEN | 0 | SPIEN | 0 |
4 | СКОРТ | 1 | CKOPT | 1 | CKOPT | 1 | CKOPT | 1 | CKOPT | 1 | WDTON | 1 |
3 | EESAVE | 1 | EESAVE | 1 | EESAVE | 1 | EESAVE | 1 | EESAVE | 1 | EESAVE | 1 |
2 | BOOTSZ1 | 0 | BOOTSZ1 | 0 | BOOTSZ1 | 0 | BOOTSZ1 | 0 | BOOTSZ1 | 0 | BODLEVEL2 | 1 |
1 | BOOTSZ0 | 0 | BOOTSZO | 0 | BOOTSZO | 0 | BOOTSZO | 0 | BOOTSZO | 0 | BODLEVEL1 | 1 |
0 | BOOTRST | 1 | BOOTRST | 1 | BOOTRST | 1 | BOOTRST | 1 | BOOTRST | 1 | BODLEVELO | 1 |
Дополнительный конфигурационный байт | ||||||||||||
7 | –– | — | 1 | — | ||||||||
6 | — | 1 | — | |||||||||
5 | — | 1 | — | |||||||||
4 | — | 1 | — | |||||||||
3 | — | 1 | — | |||||||||
2 | — | 1 | — | |||||||||
1 | M103C | 0 | — | |||||||||
0 | WDTON | 1 | SELFPRGEN | |||||||||
* Значение бита. |
Таблица 9.6. Назначение конфигурационных ячеек
Название | Назначение | |
RSTDISBL | Определяет функционирование 1 вывода микроконтроллера, совмещенного с выводом аппаратного сброса (0 — контакт порта ввода/вывода, 1 — вывод сброса) | |
CKSEL | Определяет режим работы тактового генератора, а также длительность задержки сброса tTout | |
BODLEVEL | Определяет порог срабатывания схемы BOR | |
BODEN | Разрешает/запрещает функционирование схемы BOR (0 — разрешено, 1 — запрещено) | |
SPIEN11) | Разрешает/запрещает программирование по интерфейсу SPI (0 — разрешено, 1 — запрещено) | |
SUT | Определяет длительность задержки сброса tTout | |
WDTON | Определяет режим работы сторожевого таймера (0 — всегда включен, 1 — может быть выключен программно) | |
СКОРТ | Определяет функционирование тактового генератора, действие зависит от установок ячеек CKSEL | |
EESAVE2) | Определяет влияние команды “Стирание кристалла” на EEPROM-память 0 — не стирает, 1 — стирает) | |
BOOTSZ | Определяет размер секции загрузчика | |
BOOTRST | Определяет положение вектора сброса | |
DWEN | Разрешает/запрещает работу отладочного интерфейса debugWire (0 — разрешена, 1 — запрещена) | |
OCDEN | Разрешает/запрещает внутрисхемную отладку (0 — разрешена, 1 — запрещена) | |
JTAGEN | Разрешает/запрещает использование интерфейса JTAG (0 — разрешен, 1 — запрещен) | |
CKDIV8 | Определяет начальное состояние делителя системного тактового сигнала | |
CKOUT | Определяет состояние выходного буфера системного тактового сигнала (0 — подключен к выводу микроконтроллера, 1 — отключен) | |
SELFPRGEN3)) | Разрешение самопрограммирования (0 — разрешено) | |
S8515C | Включает/выключает режим совместимости с микроконтроллерами AT90S4414/8515 семейства Classic (0 — включен, 1 — выключен) | |
S8535C | Включает/выключает режим совместимости с микроконтроллерами AT90S8535 семейства Classic (0 — включен, 1 — выключен) | |
М161С | Включает/выключает режим совместимости с микроконтроллерами ATmega 161х семейства Mega (0 — включен, 1 — выключен) | |
М103С | Включает/выключает режим совместимости с микроконтроллерами ATmega 103x семейства Mega (0 - включен, 1 - выключен) |
1) Недоступна при программировании по последовательному каналу
2) Изменение состояния этой ячейки вступает в силу сразу же после ее программирования.