Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры > AVR

реклама

 




Мероприятия:




30.12. Внешнее программирование

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

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

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

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

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

  1. Запишите в регистр RESET контроллера PDI значение 0x59 (сигнатура сброса).
  2. Запишите корректный NVM-ключ в PDI.
  3. Дождитесь равенства единицы бита NVMEN регистра статуса PDI (PDI STATUS).

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

.

30.12.2. Программирование NVM

30.12.2.1. Адресация NVM

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

30.12.2.2. Занятость NVM

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

30.12.3. 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 Нет Нет

Прим.:

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

30.12.3.1. Стирание всей памяти

Данная команда предназначена для стирания Flash-памяти программ, EEPROM и Lock-бит. При необходимости из этого перечня можно исключить EEPROM. Для этого нужно запрограммировать fuse-бит EESAVE (см. 4.16.5 "FUSEBYTE5 - конфигурационный байт 5 энергонезависимой памяти"). Данная инструкция не влияет на сигнатурный код пользователя, калибровочные данные и Fuse-биты.

  1. Запишите в регистр NVM CMD команду стирания всей памяти.
  2. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Сразу после запуска этой операции происходит отключение PDIBUS, а бит NVMEN в регистре PDI STATUS вплоть до завершения операции имеет нулевое значение. Убедиться в возобновлении работы PDIBUS можно путем опроса бита NVMEN (должен быть равен 1).

Флаг BUSY в регистре NVM STATUS вплоть до завершения операции остается равным единице.

30.12.3.2. Чтение NVM

Данная команда предназначена для чтения Flash-памяти, EEPROM, Fuse-бит, сигнатурного кода и калибровочных данных.

  1. Запишите в регистр NVM CMD команду чтения NVM.
  2. Прочитайте выбранный адрес памяти путем выполнения операции чтение PDI.

Для чтения различных секторов памяти также можно использовать команды чтения EEPROM, чтения Fuse-бит, чтения сигнатурного кода и чтения калибровочных данных. Алгоритм выполнения этих команд идентичен команде чтения NVM.

30.12.3.3. Стирание страничного буфера Flash-памяти/EEPROM

Данные команды предназначены для стирания страничных буферов Flash-памяти и EEPROM.

  1. Запишите в регистр NVM CMD команду стирания страничного буфера Flash-памяти/EEPROM.
  2. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается установленным вплоть до завершения выполнения операции.

30.12.3.4. Загрузка страничного буфера Flash-памяти/EEPROM

Данные команды предназначены для записи одного байта данных в страничные буферы Flash-памяти и EEPROM.

  1. Запишите в регистр NVM CMD команду загрузки страничного буфера Flash-памяти/EEPROM.
  2. Выполните операцию запись PDI для записи по выбранному адресу памяти.

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

На время выполнения команды работа интерфейса PDI автоматически приостанавливается, чтобы избежать выполнения следующей PDI-инструкции.

30.12.3.5. Стирание страницы Flash-памяти/EEPROM

Команды стирания страницы сектора прикладной программы, стирания страницы загрузочного сектора, стирания сигнатурного кода пользователя и стирания страницы EEPROM предназначены для стирания одной страницы выбранного пространства памяти.

  1. Запишите в регистр NVM CMD команду стирания страницы сектора прикладной программы/загрузочного сектора/сигнатурного кода пользователя/EEPROM.
  2. Запишите выбранную страницу путем выполнения операции запись PDI. Для записи страницы необходимо адресоваться к любой её ячейке.

Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.

30.12.3.6. Запись страницы Flash-памяти/EEPROM

Команды записи страницы сектора прикладной программы, записи страницы загрузочного сектора, записи сигнатурного кода пользователя и записи страницы EEPROM предназначены для записи загруженного страничного буфера Flash-памяти/EEPROM в выбранное пространство памяти.

  1. Запишите в регистр NVM CMD команду записи страницы сектора прикладной программы/загрузочного сектора/сигнатурного кода пользователя/EEPROM.
  2. Запишите выбранную страницу путем выполнения операции запись PDI. Для записи страницы необходимо адресоваться к любой её ячейке.

Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.

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

С помощью данных команд можно за один подход выполнить стирание и запись страницы сектора прикладной программы, стирание и запись страницы загрузочного сектора или стирание и запись страницы EEPROM.

  1. Запишите в регистр NVM CMD команду стирание и запись страницы сектора прикладной программы/загрузочного сектора/сигнатурного кода пользователя/EEPROM.
  2. Запишите выбранную страницу путем выполнения операции запись PDI. Запись страницы сектора выполняется при условии адресации любой его ячейки.

Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.

30.12.3.8. Стирание сектора прикладной программы/загрузочного сектора/EEPROM

Данные команды предназначены для стирания всего выбранного сектора.

  1. Запишите в регистр NVM CMD команду стирания сектора прикладной программы/загрузочного сектора/EEPROM.
  2. Запишите выбранный сектор с помощью операции запись PDI. Запись страницы сектора выполняется при условии адресации любой его ячейки.

Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции. 30.12.3.9. Проверка CRC в секторе прикладной программы/загрузочном секторе

Данные команды предназначены для проверки содержимого выбранного сектора Flash-памяти после их программирования.

  1. Запишите в регистр NVM CMD команду проверки CRC в секторе прикладной программы/загрузочном секторе.
  2. Установите бит CMDEX в регистре NVM CTRLA с помощью привязанной ко времени последовательности CCP.

Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции. Результат вычисления контрольной суммы CRC доступен в регистре NVM DATA.

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

Данная команда предназначена для проверки содержимого Flash-памяти программ после её программирования. Возможность выполнения команды не зависит от состояния lock-бит.

  1. Запишите в регистр NVM CMD команду проверки CRC Flash-памяти.
  2. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Сразу после запуска операции отключается шина PDIBUS, а бит NVMEN регистра PDI STATUS удерживается в сброшенном состоянии вплоть до завершения операции. Убедиться в возобновлении работы шины PDIBUS можно путем опроса бита NVMEN (должен быть равен единице).

Флаг BUSY регистра NVM STATUS остается в установленном состоянии до завершения операции. Результат вычисления контрольной суммы CRC доступен в регистре NVM DATA.

30.12.3.11. Запись Fuse-/Lock-бит

Данные команды предназначены для записи fuse- и lock-бит (только в направлении усиления защиты).

  1. Запишите в регистр NVM CMD команду записи Fuse-/ Lock-бит.
  2. Запишите выбранные fuse- или Lock-биты путем выполнения операции запись PDI.

Флаг BUSY в регистр NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.

30.13. Описание регистров

Полное описание регистров NVM-контроллера см. в 4.15 "Описание регистров контроллера энергонезависимой памяти".

Полное описание регистров PDI см. в 29.7 "Описание регистров управления и статуса PDI".

30.14. Обзор регистров

Обзор регистров NVM-контроллера см. в 4.21 "Обзор регистров контроллера энергонезависимой памяти", а обзор регистров контроллера PDI см. в 29.8 "Обзор регистров".



<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники