Наименование сигналов

На рисунке 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

Параллельное программирование

Ввод режима программирования

Для ввода параллельного режима программирования необходимо выполнить действия в следующей последовательности:

Подать напряжение 4.5 - 5.5В между VCC и GND, задержка не менее 100 мкс. Подаем лог. 0 на вход сброса "RESET" и переключаем вход XTAL1 не менее ШЕСТИ раз. Устанавливаем на входах "Prog_enable" (см. табл. 122) код "0000" и ожидаем 100 нс. Подаем напряжение 11.5 - 12.5В на "RESET". Если в течение 100 нс после подачи +12В на RESET произойдет изменения состояния входов Prog_enable, то это вызовет сбой режима программирования.

Обратите внимание, если используется внешний кварцевый резонатор или внешняя RC-цепь, то нет возможности приложить импульсы к XTAL1. В этом случае придерживаются следующей последовательности:

Установить код "0000" на входах Prog_enable. Подать напряжение 4.5 - 5.5В между VCC и GND одновременно с подачей напряжения 11.5 - 12.5В на RESET. <>Ожидаем 100 мкс. Перепрограммируем конфигурационные биты для выбора в качестве источника синхронизации внешнего генератора (CKSEL3:0 = 0b0000). Если запрограммированы биты защиты, то предварительно необходимо выполнить команду стирания кристалла (Chip Erase). Выходим из режима программирования выключением питания или путем подачи лог. 0 на RESET. Ввод режима программирования, описанного выше.

Рекомендации по повышению эффективности программирования

Загружаемые команды и адрес запоминаются в микроконтроллере в процессе программирования. Для эффективности программирования необходимо учитывать следующее:

*  Если выполняется чтение или запись по нескольким адресам памяти, то команда может быть загружена однократно.

*  Если записываемое значение равно $FF, то его запись можно пропустить, т. к. после выполнения команды стирания кристалла все ячейки ЭСППЗУ (если конфигурационный бит EESAVE запрограммирован) и флэш-памяти заполнены этим кодом.

*  Старший байт адреса необходимо загружать только перед началом программирования или чтения новых 256 слов флэш-памяти и 256 байт ЭСППЗУ. Данное распространяется также на чтение сигнатурных байт.

Стирание кристалла

Выполнение команды стирания кристалла приводит к очистке содержимого флэш-памяти и ЭСППЗУ (1), а также бит защиты. Очистка бит защиты происходит только после полного стирания памяти программ. Конфигурационные биты при этом не изменяются. Стирание кристалла необходимо выполнять перед перепрограммированием флэш-памяти и/или ЭСППЗУ.

Прим.:

Память ЭСППЗУ не изменяется, если конфигурационный бит EESAVE запрограммирован.

Ввод команды "Стирание кристалла":

Установка на XA1, XA0 кода "10". Этим разрешается команда загрузки. Установка BS1 ="0". Установка данных "1000 0000". Это команда "Стирание кристалла". Формируем положительный фронт на XTAL1. Этим загружается команда. Формируем отрицательный фронт WR. Этим запускаем механизм стирания кристалла. RDY/BSY переходит в низкое состояние. Ожидаем, когда RDY/BSY перейдет в единичное состояние, а затем загружаем новую команду.

Программирование флэш-памяти

Флэш-память имеет постраничную организацию (см. табл. 124). Во время программирования флэш-памяти данные помещаются в страничный буфер. Это позволяет за один подход записать всю страницу. Ниже описана процедура программирования всей флэш-памяти:

Загрузка команды "Запись флэш-памяти " Установка XA1, XA0 = "10". Этим разрешается загрузка команды. Установка BS1 = "0". Установка ДАННЫХ = "0001 0000". Это команда записи флэш-памяти. Формируем положительный фронт на XTAL1. Этим загружается команда. Загрузка младшего адресного байта Установка XA1, XA0 = "00". Это разрешает загрузку адреса. Установка BS1 = "0". Этим выбирается младший адрес. Установка ДАННЫХ = мл. байт адреса ($00 - $FF). Формируем положительный фронт на XTAL1. Этим загружается младший байт адреса. Загрузка младшего байта адреса. Установка XA1, XA0="01". Это разрешает загрузку данных. Установка ДАННЫХ = мл. байт адреса ($00 - $FF). Формируем положительный фронт на XTAL1. Этим загружается байт данных. Загрузка старшего байта данных Установка BS1 = "1". Этим выбирается старший байт данных. Установка XA1, XA0 = "01". Этим выбирается загрузка данных. Установка ДАННЫХ = ст. байт данных ($00 - $FF). Формируем положительный фронт на XTAL1. Этим загружается байт данных. Загрузка данных. Установка BS1 = "1". Этим выбирается старший байт данных. Формируем положительный фронт на PAGEL. Этим защелкиваются байты данных (см. форму сигналов на рисунке 137). Повторяем B-E до заполнения всего буфера или до завершения загрузки данных в пределах страницы. Если младшие разряды адреса адресуют слова в пределах страницы, то старшие разряды адреса адресуют страницы в пределах флэш-памяти. Это иллюстрируется на рисунке 136. Обратите внимание, что если требуется менее 8-разрядов для адресации слов в странице (размер страницы < 256), то старшие разряды младшего адресного байта адресуют к странице при выполнении страничной записи. G. Загрузка старшего адресного байта. Установка XA1, XA0 = "00". Этим разрешается загрузка адреса. Установка BS1 = "1". Этим выбирается старший байт адреса. Установка ДАННЫХ = ст. адресному байту ($00 - $FF). Формируем положительный фронт на XTAL1. Этим загружаем ст. адресный байт. Программируем страницу Установка BS1 = "0". Формируем отрицательный фронт на WR. Этим инициируем программирование всей страницы данных. RDY/BSY переходит в низкое состояние. Ожидаем появление лог. 1 на RDY/BSY (см. осциллограммы сигналов на рисунке 137). Повторяем B-H до завершения программирования всей флэш-памяти. Завершения программирования страницы. Установка XA1, XA0 = "10". Этим разрешается загрузка команды. Установка ДАННЫХ = "0000 0000". Это команда "нет операции". Формируем положительный фронт на XTAL1. Этим загружаем команду и сбрасываем внутренние сигналы записи.

Адресация флэш-памяти со страничной организацией
Рисунок 136. Адресация флэш-памяти со страничной организацией

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66