Наименование сигналов
На рисунке 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. В этом случае придерживаются следующей последовательности:
Рекомендации по повышению эффективности программирования
Загружаемые команды и адрес запоминаются в микроконтроллере в процессе программирования. Для эффективности программирования необходимо учитывать следующее:
Если выполняется чтение или запись по нескольким адресам памяти, то команда может быть загружена однократно.
Если записываемое значение равно $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 |


