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

Флэш-память и ЭСППЗУ могут быть запрограммированы через последовательный интерфейс SPI. Последовательный интерфейс состоит из следующих сигналов: SCK, MOSI (вход) и MISO (выход). Для программирования МК, после подачи низкого уровня на вход RESET необходимо выполнить инструкцию разрешения программирования.

Расположение выводов последовательного программирования через SPI

Несмотря на то, что при последовательном программирования используется тот же модуль SPI, что и при обычной работы микроконтроллера, имеется одно важное отличие: выводы MOSI/MISO модуля ввода-вывода SPI, которые совмещены с PB2 и PB3, не используются при программировании. Вместо них используются PE0 и PE1 для ввода и вывода данных при последовательном программировании (см. табл. 128).

Таблица 128. Выводы интерфейса SPI при последовательном программировании

Обозначение

Вывод

Направление

Описание

MOSI (PDI)

PE0

ввод

Последовательный ввод данных

MISO (PDO)

PE1

вывод

Последовательный вывод данных

SCK

PB1

ввод

Синхронизация последовательной связи

Рисунок 144. Последовательное программирование и проверка(1)

Прим.:

  1. Если микроконтроллер тактируется внутренним генератором, то нет необходимости подключать тактовый источник к выводу XTAL1.

  2. VCC - 0.3В < AVCC < VCC + 0.3В, но AVCC должен находится в пределах 2.7 - 5.5В.

Во время программирования ЭСППЗУ функция стирания выполняется автоматически (только в режиме последовательного программирования) и, поэтому, нет необходимости первоначально выполнять команду "Стирание кристалла". Выполнение команды "Стирание кристалла" приводит к заполнению памяти программ и ЭСППЗУ кодом $FF.

Алгоритм последовательного программирования через SPI

Во время последовательной записи в ATmega128 данные тактируется нарастающим фронтом SCK. Во время чтения данных из ATmega128 данные тактируются падающим фронтом SCK. Временная диаграмма представлена на рисунке ниже.

Для программирования и проверки памяти ATmega128 в режиме последовательного программирования через SPI рекомендуется придерживаться следующей последовательности (см. четырехбайтный формат в таблице 145):

  1. Последовательность подачи питания: подать напряжение питания между VCC и GND, когда на входах RESET и SCK присутствует лог. 0. Пауза не менее 20 мс и разрешение последовательного программирования путем записи команды разрешения последовательного программирования через вход MOSI.

  2. блабла

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

  4. Массив памяти ЭСППЗУ программируется побайтно, при этом, в инструкции записи указывается адрес и данные. Перед записью данных первоначально автоматически стирается адресуемая ячейка ЭСППЗУ.

  5. Любую ячейку памяти можно проверить использованием инструкции чтения, которая возвращает содержимое ячейки по указанному адресу путем последовательной передачи на выходе MISO.

  6. По завершении программирования вход RESET должен быть переведен в высокое состояние для возобновления нормальной работы.

  7. Последовательность снятия питания (при необходимости): установка RESET = "1", отключить питание VCC.

Рисунок 145. Осциллограммы сигналов последовательного программирования интерфейса SPI

Для справки. Инструкции передаваемые через SPI

Набор инструкций последовательного программирования через SPI

Инструкция

Формат инструкции

Функция

Байт 1

Байт 2

Байт 3

Байт 4

Разрешение программирования

1010 1100

0101 0011

xxxx xxxx

xxxx xxxx

Разрешение последовательного программирования после подачи лог. 0 на RESET.

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

1010 1100

100x xxxx

xxxx xxxx

xxxx xxxx

Стирание ЭСППЗУ и флэш-памяти

Чтение памяти программ

0010 H000

aaaa aaaa

bbbb bbbb

oooo oooo

Чтение старшего (H=1) или младшего (H=0) байта данных o из памяти программ по адресу a:b.

Загрузка страницы памяти программ

0100 H000

xxxx xxxx

xbbb bbbb

iiii iiii

Запись старшего (H=1) или младшего (H=0) байта данных i в страницу памяти программ по адресу b. Мл. байт данных должен быть загружен перед старшим байтом по тому же адресу.

Запись страницы памяти программ

0100 1100

aaaa aaaa

bxxx xxxx

xxxx xxxx

Запись страницы памяти программ по адресу a:b.

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

1010 0000

xxxx aaaa

bbbb bbbb

oooo oooo

Чтение данных o из ЭСППЗУ по адресу a:b.

Запись ЭСППЗУ

1100 0000

xxxx aaaa

bbbb bbbb

iiii iiii

Запись данных i в ЭСППЗУ по адресу a:b.

Чтение бит защиты

0101 1000

0000 0000

xxxx xxxx

xxoo oooo

Чтение бит защиты. "0" - запрограммирован, "1" - не запрограммирован. См. табл. 116.

Запись бит защиты

1010 1100

111x xxxx

xxxx xxxx

11ii iiii

Запись бит защиты. Запись "0" приводит к программированию бита защиты. См. табл. 116.

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

0011 0000

xxxx xxxx

xxxx xxbb

oooo oooo

Чтение сигнатурного байта o по адресу b.

Запись конфигурационных бит

1010 1100

1010 0000

xxxx xxxx

iiii iiii

Указывайте "0" для программирования, "1" для стирания. См. табл. 120.

Запись старших конфигурационных бит

1010 1100

1010 1000

xxxx xxxx

iiii iiii

Указывайте "0" для программирования, "1" для стирания. См. табл. 120.

Запись расширенных конфигурационных бит

1010 1100

1010 0100

xxxx xxxx

xxxx xxii

Указывайте "0" для программирования, "1" для стирания. См. табл. 120.

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

0101 0000

0000 0000

xxxx xxxx

oooo oooo

Чтение конфигурационных бит. "0" - запрограммирован, "1" - не запрограммирован. См. табл. 120.

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

0101 0000

0000 1000

xxxx xxxx

oooo oooo

Чтение расширенных конфигурационных бит. "0" - запрограммирован, "1" - не запрограммирован. См. табл. 120.

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

0101 1000

0000 1000

xxxx xxxx

oooo oooo

Чтение старших конфигурационных бит. "0" = запрограммирован, "1" = не запрограммирован. См. табл. 119.

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

0011 1000

xxxx xxxx

0000 00bb

oooo oooo

Чтение калибровочного байта o по адресу b.

Соседние файлы в папке 5.3.3 Микропроцессоры в электронно-вычислительных средствах