ATmega128, atmega128L 8-разрядный avr-микроконтроллер с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт

Вид материалаДокументы
Подобный материал:
1   ...   38   39   40   41   42   43   44   45   46

Рисунок 149. Граф-автомат изменения/чтения слов данных


Виртуальный регистр загрузки страницы флэш-памяти

Виртуальный регистр загрузки флэш-памяти представляет собой виртуальную цепь сканирования с длиной равной количеству бит в одной странице флэш-памяти. Внутренний сдвиговый регистр 8-разрядный и данные автоматически передаются в страничный буфер побайтно. Слова инструкций вводятся сдвигом, начиная с младшего разряда первого слова инструкции и завершая старшим разрядом последней инструкции в пределах одной и той же страницы. Этим обеспечивается эффективный путь загрузки страничного буфера флэш-памяти перед выполнение операции "Запись страницы".


Рисунок 150. Виртуальный регистр загрузки страницы флэш-памяти


Виртуальный регистр чтения страницы флэш-памяти

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


Рисунок 151. Виртуальный регистр чтения страницы флэш-памяти


Алгоритм программирования

Ниже используются ссылки на коды инструкций "1a", "1b" и т.п. Информация о них представлена в таблице 131.

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

  1. Ввод JTAG-инструкции AVR_RESET и сдвиг 1 в регистр сброса.
  2. Ввод инструкции PROG_ENABLE и сдвиг 1010_0011_0111_0000 в регистр разрешения программирования.

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

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Отключение всех инструкций программирования вводом инструкции "нет операции" 11a.
  3. Ввод инструкции PROG_ENABLE и загрузка регистра разрешения программирования кодом 0000_0000_0000_0000.
  4. Ввод JTAG-инструкции AVR_RESET и сдвиг 0 в регистр сброса.

Выполнение стирания кристалла

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Запуск стирания кристалла вводом инструкции программирования 1a.
  3. Опрос завершения стирания кристалла с помощью инструкции программирования 1b или задержка на время tWLRH_CE (см. табл. 127).

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

Перед программированием флэш-памяти необходимо выполнить операцию "стирание кристалла" (см. "Выполнение стирания кристалла").

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение записи флэш-памяти, используя инструкцию программирования 2a.
  3. Загрузка старшего байта адреса с помощью инструкции программирования 2b.
  4. Загрузка младшего байта адреса с помощью инструкции программирования 2c.
  5. Загрузка данных с помощью инструкций программирования 2d, 2e и 2f.
  6. Повторение шагов 4 и 5 для всех слов инструкций загружаемой страницы.
  7. Запись страницы с помощью инструкции программирования 2g.
  8. Опрос завершения записи флэш-памяти, используя инструкцию программирования 2h или задержка на время tWLRH (см. табл. 127).
  9. Повторение шагов 3…7 до завершения программирования всех данных. Более эффективная передачи данных может быть достигнута с помощью инструкции PROG_PAGELOAD:

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение записи флэш-памяти с помощью инструкции программирования 2a.
  3. Загрузка адреса страницы с помощью инструкций 2b и 2c. PCWORD (см. табл. 124) используется для адресации в пределах одной страницы и в него необходимо записать 0.
  4. Ввод JTAG-инструкции PROG_PAGELOAD.
  5. Загрузка всей страницы путем загрузки в страницу всех слов инструкций сдвигом, начиная с младшего разряда первой инструкции текущей страницы и завершая старшим разрядом последней инструкции этой же страницы.
  6. Ввод JTAG-инструкции PROG_COMMANDS.
  7. Запись страницы с помощью инструкции программирования 2g.
  8. Опрос завершения записи флэш-памяти с помощью инструкции программирования 2h или задержка на время tWLRH (см. табл.127).
  9. Повторение шагов 3…8 до завершения программирования всех данных.

Чтение флэш-памяти

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение чтения флэш-памяти, используя инструкцию программирования 3a.
  3. Загрузка адреса с помощью инструкций программирования 3b и 3c.
  4. Чтение данных с помощью инструкции программирования 3d.
  5. Повторение шагов 3 и 4 до завершения чтения всех данных.

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

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение чтения флэш-памяти с помощью инструкции программирования 3a.
  3. Загрузка адреса страницы с помощью инструкций программирования 3b и 3c. PCWORD (см. табл. 124) используется для адресации в пределах одной страницы и должен быть записан также.
  4. Ввод JTAG-инструкции PROG_PAGEREAD.
  5. Чтение всей страницы путем сдвига всех слов инструкций в странице, начиная с младшего разряда первой инструкции и завершая старшим разрядом последней инструкции. Помните, что первые 8 сдвигаемых бит необходимо игнорировать.
  6. Ввод JTAG-инструкции PROG_COMMANDS.
  7. Повторение шагов 3…6 до завершения чтения всех данных.

Программирование ЭСППЗУ

Перед программированием ЭСППЗУ должно быть выполнено "стирание кристалла". См. "Выполнение стирания кристалла".

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение записи ЭСППЗУ с помощью инструкции программирования 4a.
  3. Загрузка старшего байта адреса с помощью инструкции программирования 4b.
  4. Загрузка младшего байта адреса с помощью инструкции программирования 4c.
  5. Загрузка данных с помощью инструкций 4d и 4e.
  6. Повторение шагов 4 и 5 для всех байт данных в странице.
  7. Запись данных с помощью инструкции программирования 4f.
  8. Опрос завершения программирования ЭСППЗУ с помощью инструкции программирования 4g или задержка на время tWLRH (см. табл. 127).
  9. Повторите шаги 3…8 до завершения программирования всех байт данных.

Обратите внимание, что инструкция PROG_PAGELOAD не может быть использована для программирования ЭСППЗУ.

Чтение ЭСППЗУ

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение чтения ЭСППЗУ с помощью инструкции программирования 5a.
  3. Загрузка адреса с помощью инструкции программирования 5b и 5c.
  4. Чтение данных с помощью инструкции программирования 5d.
  5. Повторение шагов 3 и 4 до завершения считывания всех данных.

Обратите внимание, что инструкция PROG_PAGEREAD не может быть использована для чтения ЭСППЗУ.

Программирование конфигурационных бит

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение записи конфигурационных бит с помощью инструкции 6a.
  3. Загрузка байта данных с помощью инструкции программирования 6b. Запись "0" приводит к программированию соответствующего конфигурационного бита, а запись "1" приводит к разпрограммированию конфигурационного бита.
  4. Запись расширенного конфигурационного байта с помощью инструкции программирования 6c.
  5. Опрос завершения записи конфигурационных бит с помощью инструкции программирования 6d или пауза tWLRH (см. табл. 127).
  6. Загрузка байта данных с помощью инструкции программирования 6e. Запись "0" приводит к программированию соответствующего конфигурационного бита, а запись "1" приводит к разпрограммированию конфигурационного бита.
  7. запись старшего конфигурационного байта с использованием инструкции программирования 6f.
  8. Опрос завершения записи конфигурационных бит с помощью инструкции программирования 6g или пауза tWLRH (см. табл. 127).
  9. Загрузка байта данных с помощью инструкции программирования 6h. Запись "0" приводит к программированию конфигурационного бита, а запись "1" приводит к разпрограммированию конфигурационного бита.
  10. Запись младшего конфигурационного байта с помощью инструкции программирования 6i.
  11. Опрос завершения записи конфигурационных бит с помощью инструкции программирования 6j или пауза tWLRH (см. табл. 127).

Программирование бит защиты

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение записи бита защиты с помощью инструкции программирования 7a.
  3. Загрузка данных с помощью инструкции 7b. Загрузка "0" приводит к программирования бита защиты, а "1" оставляет его состояние неизменным.
  4. Запись бит защиты с помощью инструкции программирования 7c.
  5. Контроль завершения программирования бит защиты с помощью инструкции 7d или задержка на время tWLRH (см. табл.127).

Чтение конфигурационных бит и бит защиты

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение чтения конфигурационного бита/бита защиты, используя инструкцию 8a.
  3. Для чтения всех конфигурационных бит и бит защиты используйте инструкцию программирования 8f.

Для чтения только расширенного конфигурационного байта используйте инструкцию программирования 8b.

Для чтения только старшего конфигурационного байта используйте инструкцию программирования 8c.

Для чтения только младшего конфигурационного байта используйте инструкцию программирования 8d.

Для чтения только бит защиты используйте инструкцию программирования 8e.

Чтение сигнатурных байт

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение чтения сигнатурного байта, используя инструкцию программирования 9a.
  3. Загрузка адреса $00 с помощью инструкции программирования 9b.
  4. Чтение первого сигнатурного байта при помощи инструкции программирования 9c.
  5. Повторяем шаги 3 и 4 с адресами $01 и $02 для чтения 2-го и 3-го сигнатурного байта, соответственно.

Чтение калибровочного байта

  1. Ввод JTAG-инструкции PROG_COMMANDS.
  2. Разрешение чтения калибровочного байта, используя инструкцию программирования 10a.
  3. Загрузка адреса $00, используя инструкцию программирования 10b.
  4. Чтение калибровочного байта, используя инструкцию программирования 10c.