При программировании atmega 128
Биты защиты памяти программ и данных
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 | Нет никаких действий (холостой ход) |
Код команды | Функция |
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 |