Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
374
Добавлен:
21.05.2015
Размер:
7.55 Mб
Скачать
    1. Внешнее программирование

Внешнее программирование - способ программирования энергонезависимой памяти данных и памяти программ с помощью внешнего программатора или отладчика. Программирование может выполняться либо внутри системы (внутрисистемное программирование), либо на специальных производственных программаторах. Для выполнения такого программирования необходимо придерживаться ограничений по максимальным и минимальным напряжению и частоте, значения которых приводятся в документации на МК.

Доступ к микроконтроллеру при внешнем программировании осуществляется через контроллер PDI, который внешне доступен через электрический интерфейс JTAG или PDI. Более детально о разрешении работы и использовании интерфейсов PDI и JTAG см. в 20 "Интерфейс программирования и отладки". Далее по тексту полагается, что разрешение работы электрического интерфейса контроллера PDI выполнено корректно. Через PDI внешний программатор имеет возможность доступа к любой энергонезависимой памяти и NVM-контроллеру по шине PDI, при этом, и память программ и память данных образуют единое линейное пространство памяти PDI. На рисунке 30.4 показано пространство памяти PDI и базовые адреса каждого пространства памяти МК.

Рисунок 30.4. Карта памяти PDI

      1. Разрешение работы интерфейса внешнего программирования

Программирование NVM через PDI требует разрешения работы, что можно сделать следующим образом.

  • Запишите в регистр RESET контроллера PDI значение 0x59 (сигнатура сброса).

  • Запишите корректный NVM-ключ в PDI.

  • Дождитесь равенства единицы бита NVMEN регистра статуса PDI (PDI STATUS).

Если бит NVMEN в регистре PDI STATUS станет равным единице, это означает, что интерфейс NVM готов для использования контроллером PDI.

      1. Программирование nvm

        1. Адресация nvm

После разрешения работы интерфейса PDI NVM все запоминающие устройства МК становятся доступными в адресном пространстве PDI. В дальнейших упоминаниях о чтении и записи памяти данных или памяти программ полагается использование адресации в соответствии с картой памяти, представленной на рисунке 30.4. Контроллер PDI использует только побайтную адресацию. Это означает, что любой адрес памяти является адресом байта. При заполнении страничного буфера Flash-памяти или EEPROM, для определения адресуемой ячейки страничного буфера используются только младшие биты адреса. В остальных случаях, в целях гарантирования корректности отображения адресов, требуется указание полного адреса страницы Flash-памяти или EEPROM.

        1. Занятость nvm

Во время программирования (стирание страницы и запись страницы) , когда NVM находится в занятом состоянии, блокируется возможность чтения всей NVM.

      1. NVM-команды

NVM-команды, которые можно использовать для доступа к энергонезависимым запоминающим устройствам при внешнем программировании, представлены в таблице 30.5. Для внешнего программирования доступен более обширный набор команд, чем при самопрограммировании. При внешнем программировании, для исполнения команд с запуском по действию необходимо установить бит CMDEX в регистре NVM CTRLA. Исполнение команд с запуском по чтению происходит при выполнении инструкций прямого или косвенного чтения (LDS или LD) из PDI (чтение PDI). Наконец, команды с запуском по записи исполняются при выполнении инструкции прямой или косвенной записи (STS или ST) из PDI (запись PDI).

Детальное описание алгоритма выполнения каждой NVM-команды представлено в подразделах 30.12.3.1…30.12.3.11. Возможность выполнения большинства команд зависит от состояния Lock-бит. После активизации защиты от чтения и записи можно выполнить только команды стирания всей памяти и проверки CRC Flash-памяти.

Таблица 30.5. NVM-команды, доступные при внешнем программировании

CMD[6:0]

Наименование команды

Запуск

Защита от изменения

Занятость NVM

0x00

Нет операции

-

-

-

0x40

Стирание всей памяти(1)

CMDEX

Есть

Занято

0x43

Чтение NVM

Чтение PDI

Нет

Нет

Страничный буфер Flash-памяти

0x23

Загрузка страничного буфера

Запись PDI

Нет

Нет

0x26

Стирание страничного буфера

CMDEX

Есть

Занято

Flash-память

0x2B

Стирание страницы Flash-памяти

Запись PDI

Нет

Занято

0x2E

Запись страницы Flash-памяти

Запись PDI

Нет

Занято

0x2F

Стирание и запись страницы Flash-памяти

Запись PDI

Нет

Занято

0x78

Проверка CRC Flash-памяти

CMDEX

Есть

Занято

Сектор прикладной программы

0x20

Стирание сектора прикладной программы

Запись PDI

Нет

Занято

0x22

Стирание страницы сектора прикладной программы

Запись PDI

Нет

Занято

0x24

Запись страницы сектора прикладной программы

Запись PDI

Нет

Занято

0x25

Стирание и запись страницы сектора прикладной программы

Запись PDI

Нет

Занято

0x38

Проверка CRC в секторе прикладной программы

CMDEX

Есть

Занято

Загрузочный сектор

0x68

Стирание загрузочного сектора

Запись PDI

Нет

Занято

0x2A

Стирание страницы загрузочного сектора

Запись PDI

Нет

Занято

0x2C

Запись страницы загрузочного сектора

Запись PDI

Нет

Занято

0x2D

Стирание и запись страницы загрузочного сектора

Запись PDI

Нет

Занято

0x39

Проверка CRC в загрузочном секторе

NVMAA

Есть

Занято

Секторы калибровочных данных и сигнатурного кода пользователя

0x03

Чтение сигнатурного кода пользователя

Чтение PDI

Нет

Нет

0x18

Стирание сигнатурного кода пользователя

Запись PDI

Нет

Занято

0x1A

Запись сигнатурного кода пользователя

Запись PDI

Нет

Занято

0x02

Чтение калибровочных данных

Чтение PDI

Нет

Нет

Fuse- и Lock-биты

0x07

Чтение Fuse-бит

Чтение PDI

Нет

Нет

0x4С

Запись Fuse-бит

Запись PDI

Нет

Занято

0x08

Запись Lock-бит

CMDEX

Есть

Занято

Страничный буфер EEPROM

0x33

Загрузка страничного буфера EEPROM

Запись PDI

Нет

Нет

0x36

Стирание страничного буфера EEPROM

CMDEX

Есть

Занято

EEPROM

0x30

Запись EEPROM

CMDEX

Есть

Занято

0x32

Стирание страницы EEPROM

Запись PDI

Нет

Занято

0x34

Запись страницы EEPROM

Запись PDI

Нет

Занято

0x35

Стирание и запись страницы EEPROM

Запись PDI

Нет

Занято

0x06

Чтение EEPROM

Чтение PDI

Нет

Нет

Прим.:

  • Если fuse-бит EESAVE запрограммирован, выполнение команды стирания всей памяти не повлияет на содержимое EEPROM.

Соседние файлы в папке Архитектура ЭВМ