Программирование памяти
Биты защиты памяти программ и данных
ATmega128 содержит 6 битов защиты, которые можно оставить в незапрограммированном состоянии ("1") или же запрограммировать ("0") для активизации дополнительных функций, представленных в таблице 117. Стирание бит защиты (установка "1") может быть выполнена только командой стирание кристалла (Chip Erase).
Таблица 116. Байт с битами защиты
Биты защиты |
Разряд |
Описание |
Исходное значение |
|
7 |
- |
1 (незапрограммированный) |
|
6 |
- |
1 (незапрограммированный) |
BLB12 |
5 |
Бит защиты загрузочного сектора |
1 (незапрограммированный) |
BLB11 |
4 |
Бит защиты загрузочного сектора |
1 (незапрограммированный) |
BLB02 |
3 |
Бит защиты загрузочного сектора |
1 (незапрограммированный) |
BLB01 |
2 |
Бит защиты загрузочного сектора |
1 (незапрограммированный) |
LB2 |
1 |
Бит защиты |
1 (незапрограммированный) |
LB1 |
0 |
Бит защиты |
1 (незапрограммированный) |
Прим.: "1" означает незапрограммированное состояние, а "0" - запрограммированное.
Таблица 117. Режимы защиты
Биты защиты памяти |
Тип защиты |
Режим LB |
LB2 |
LB1 |
|
1 |
1 |
1 |
Нет защиты памяти. |
2 |
1 |
0 |
Дальнейшее программирование флэш-памяти и ЭСППЗУ отключено при параллельном и последовательном (SPI/JTAG) программировании. Конфигурационные биты защищены при любом способе программирования(1) |
3 |
0 |
0 |
Дальнейшее программирование и проверка флэш-памяти и ЭССПЗУ отключена как при параллельном, так и при последовательном программировании через SPI/JTAG. Конфигурационные биты защищены при любом способе программирования(1) |
Режим BLB0 |
BLB02 |
BLB01 |
|
1 |
1 |
1 |
Нет ограничений действия инструкций SPM или (E)LPM при адресации сектора прикладной программы. |
2 |
1 |
0 |
SPM не записывает данные в сектор прикладной программы. |
3 |
0 |
0 |
SPM не записывает данные в сектор прикладной программы, а выполнение инструкции (E)LPM в загрузочном секторе не позволяет считать данные из сектора прикладной программы. Если векторы прерываний размещены в загрузочном секторе, то при выполнении команд в секторе прикладной программы прерывания отключаются. |
4 |
0 |
1 |
Выполнение (E)LPM в загрузочном секторе не позволяет считать данные из сектора прикладной программы. Если векторы прерываний размещены в загрузочном секторе, то при выполнении команд в секторе прикладной программы прерывания отключаются. |
Режим BLB1 |
BLB12 |
BLB11 |
|
1 |
1 |
1 |
Нет ограничений действия инструкций SPM или (E)LPM при адресации загрузочного сектора. |
2 |
1 |
0 |
SPM не записывает данные в загрузочный сектор. |
3 |
0 |
0 |
SPM не записывает данные в загрузочный сектор, а выполнение инструкции (E)LPM в секторе прикладной программы не позволяет считать данные из загрузочного сектора. Если векторы прерываний размещены в секторе прикладной программы, то при выполнении команд в загрузочном секторе прерывания отключаются. |
4 |
0 |
1 |
Выполнение (E)LPM в секторе прикладной программы не позволяет считать данные из загрузочного сектора. Если векторы прерываний размещены в секторе прикладной программы, то при выполнении команд в загрузочном секторе прерывания отключаются. |
Прим.:
- Конфигурационные биты необходимо программировать перед программированием бит защиты.
- "1" означает незапрограммированное состояние, а "0" - запрограммированное.
Конфигурационные биты
ATmega128 имеет три конфигурационных байта. Таблицы 118 - 120 кратко описывают функционирование и расположение всех конфигурационных бит. Обратите внимание, что если конфигурационный бит запрограммирован, то при его считывании возвращается лог. 0.
Таблица 118. Расширенный конфигурационный байт
Наименование бита |
Разряд |
Описание |
Исходное значение |
- |
7 |
- |
1 |
- |
6 |
- |
1 |
- |
5 |
- |
1 |
- |
4 |
- |
1 |
- |
3 |
- |
1 |
- |
2 |
- |
1 |
M103C(1) |
1 |
Режим совместимости с ATmega103 |
0 (запрограммированное) |
WDTON(2) |
0 |
Активизация сторожевого таймера |
1 (незапрограммированное) |
Прим.:
- См. "Совместимость ATmega103 и ATmega128".
- См. "Регистр управления сторожевым таймером - WDTCR".
Таблица 119. Старший конфигурационный байт
Наименование бита |
Разряд |
Описание |
Исходное значение |
OCDEN(4) |
7 |
Включение встроенного блока отладки |
1 (незапрограммированное, функция встроенной отладки отключена) |
JTAGEN(5) |
6 |
Включение JTAG-интерфейса |
0 (запрограммированное, JTAG включен) |
SPIEN(1) |
5 |
Разрешение последовательной загрузки программы и данных |
0 (запрограммированное, программирование через SPI разрешено) |
CKOPT(2) |
4 |
Настройка генератора |
1 (незапрограммированное) |
EESAVE |
3 |
Запрет стирания ЭСППЗУ командой стирание кристалла |
1 (незапрограммированное, стирание кристалла вызывает стирание ЭСППЗУ) |
BOOTSZ1 |
2 |
Выбор размера загрузочного сектора (см. табл. 113) |
0 (запрограммированное) (3) |
BOOTSZ0 |
1 |
Выбор размера загрузочного сектора (см. табл. 113) |
0 (запрограммированное)(3) |
BOOTRST |
0 |
Выбор вектора сброса |
1 (незапрограммированное) |
Прим.:
- Конфигурационный бит SPIEN недоступен в режиме последовательного программирования через SPI.
- Функционирование конфигурационного бита CKOPT зависит от установок бит CKSEL. См. "Источники синхронизации".
- Исходное значение бит BOOTSZ1..0 соответствует выбору максимальному размеру загрузочного сектора. См. таблицу 113.
- Не забудьте отключить бит OCDEN перед поставкой готового изделия заказчику, независимо от того какие установки имеют биты защиты и конфигурационный бит JTAGEN. Если бит OCDEN будет запрограммирован, то некоторые части системы синхронизации микроконтроллера останутся в работе при переводе микроконтроллера в экономичные режимы командой sleep. В этом случае микроконтроллер будет потреблять повышенную мощность.
- Если интерфейс JTAG оставлен неподключенным, то конфигурационный бит JTAGEN должен быть по возможности отключен. Это позволит избежать статический ток через вывод TDO JTAG-интерфейса.
Таблица 120. Младший конфигурационный байт
Наименование бит |
Разряд |
Описание |
Исходное значение |
BODLEVEL |
7 |
Порог срабатывания супервизора питания |
1 (незапрограммированное) |
BODEN |
6 |
Разрешение супервизора питания |
1 (незапрограммированное, супервизор отключен) |
SUT1 |
5 |
Выбор времени запуска |
1 (незапрограммированное)(1) |
SUT0 |
4 |
Выбор времени запуска |
0 (запрограммированное)(1) |
CKSEL3 |
3 |
Выбор тактового источника |
0 (запрограммированное)(2) |
CKSEL2 |
2 |
Выбор тактового источника |
0 (запрограммированное)(2) |
CKSEL1 |
1 |
Выбор тактового источника |
0 (запрограммированное)(2) |
CKSEL0 |
0 |
Выбор тактового источника |
1 (незапрограммированное)(2) |
Прим.:
- Исходные установки SUT1..0 соответствуют выбору максимальному времени старта. Подробности представлены в таблице 14.
- Исходные установки CKSEL3..0 соответствуют выбору внутреннего RC-генератора частотой 1 МГц. Подробности представлены в таблице 6.
На состояние конфигурационных бит не оказывает влияния команда стирания кристалла "Chip Erase". Обратите внимание, что доступ к конфигурационным битам заблокирован, если запрограммирован бит защиты LB1. Поэтому, конфигурационные биты необходимо программировать перед программированием бит защиты.
Защита конфигурационных бит
Доступ к конфигурационным битам блокируется, если микроконтроллер перешел в режим программирования и изменение их значений не даст никакого эффекта до тех пор, пока микроконтроллер не выйдет из режима программирования. Данное не распространяется на бит EESAVE и он может быть запрограммирован в любой момент. Доступ к конфигурационным битам также блокируется при подаче питания в нормальном режиме работы (не программировании).
Сигнатурные байты
Все микроконтроллеры Atmel имеют трехбайтный сигнатурный код, который позволяет идентифицировать устройство. Код можно считать как в параллельном, так и в последовательном режимах программирования, в т.ч. когда микроконтроллер защищен. У каждого байта сигнатурного кода имеется свой собственный адрес и назначение.
Для ATmega128 сигнатурными байтами являются:
- $000: $1E (идентифицирует производителя: Atmel)
- $001: $97 (идентифицирует размер флэш-памяти: 128 кбайт)
- $002: $02 (идентифицирует тип микроконтроллера: ATmega128, если байт $001 равен $97)
Калибровочный байт
Внутри ATmega128 хранятся четыре различных калибровочных значений для внутреннего RC-генератора. Данные значения хранятся по адресам 0x000, 0x0001, 0x0002 и 0x0003 и соответствуют частотам генератора 1, 2, 4 и 8 МГц. В процессе сброса в регистр OSCCAL автоматически записывается значение калибровочного байта для частоты 1 МГц. Если используется другая частота, то соответствующее значение должно быть вручную записано в регистр OSCCAL (см. "Регистр калибровки генератора - OSCCAL").
Параметры параллельного программирования, расположение выводов и команды
В данном разделе описывается как у ATmega128 запрограммировать и проверить флэш-память, ЭСППЗУ, биты защиты и конфигурационные биты. Полагается, что длительность импульсов не менее 250 нс, если не имеется других указаний.
Наименование сигналов
На рисунке 135 и в таблице 121 показывается расположение и назначение выводов ATmega128, которые используются для параллельного программирования. Выводы XA1/XA0 определяют выполняемое действие при положительном фронте на выводе XTAL1 (см. табл. 123).
Подачей импульсов на WR или OE в зависимости от загруженной команды определяется выполняемое действие. Описание команд представлено в таблице 124.
Рисунок 135. Параллельное программирование
Таблица 121. Расположение и назначение выводов программирования
Наименование сигнала в режиме программирования |
Наименование вывода |
Направление |
Функция |
RDY/BSY |
PD1 |
Выход |
0 - микроконтроллер занят программированием;1 - микроконтроллер готов к загрузке новой команды |
OE |
PD2 |
Вход |
Разрешение вывода (активный низкий) |
WR |
PD3 |
Вход |
Строб записи (активный низкий) |
BS1 |
PD4 |
Вход |
Выбор байта 1 ("0" выбирает младший байт, "1" выбирает старший байт) |
XA0 |
PD5 |
Вход |
Код функции XTAL, разряд 0 |
XA1 |
PD6 |
Вход |
Код функции XTAL, разряд 1 |
PAGEL |
PD7 |
Вход |
Загрузка страницы данных в память программ и ЭСППЗУ |
BS2 |
PA0 |
Вход |
Выбор байта 2 ("0" выбирает младший байт, "1" выбирает 2-ой старший байт) |
DATA |
PB7-0 |
Вход/выход |
Двунаправленная шина данных (выводит данные, когда OE=0 ) |
Таблица 122. Состояния выводов, которые используются для входа в режим программирования
Вывод |
Обозначение |
Значение |
PAGEL |
Prog_enable[3] |
0 |
XA1 |
Prog_enable[2] |
0 |
XA0 |
Prog_enable[1] |
0 |
BS1 |
Prog_enable[0] |
0 |
Таблица 123. Назначение кодов XA1 и XA0
XA1 |
XA0 |
Выполняемая функция во время импульса на XTAL1 |
0 |
0 |
Загрузка адреса флэш-памяти или ЭСППЗУ (какой байт адреса, старший или младший определяется BS1) |
0 |
1 |
Загрузка данных (какой байт данных, старший или младший определяется BS1) |
1 |
0 |
Загрузка команды |
1 |
1 |
Нет никаких действий (холостой ход) |
Таблица 124. Коды команд
Код команды |
Функция |
1000 0000 |
Стирание кристалла (Chip Erase) |
0100 0000 |
Запись конфигурационных бит |
0010 0000 |
Запись бит защиты |
0001 0000 |
Запись флэш-памяти |
0001 0001 |
Запись ЭСППЗУ |
0000 1000 |
Чтение сигнатурных байт и калибровочного байта |
0000 0100 |
Чтение конфигурационных бит и бит защиты |
0000 0010 |
Чтение флэш-памяти |
0000 0011 |
Чтение ЭСППЗУ |
Таблица 125. Количество слов в странице и количество страниц во флэш-памяти
Размер флэш-памяти |
Размер страницы |
PCWORD |
Кол. страниц |
PCPAGE |
PCMSB |
64 кслов (128 кбайт) |
128 слов |
PC[6:0] |
512 |
PC[15:7] |
15 |
Таблица 126. Количество слов в странице и количество страниц в ЭСППЗУ
Размер ЭСППЗУ |
Размер страницы |
PCWORD |
Кол. страниц |
PCPAGE |
EEAMSB |
4 кбайт |
8 байт |
EEA[2:0] |
512 |
EEA[11:3] |
8 |