Разделы

В сети

Пользователей: 143
Из них просматривают:
Аналоги: 90. Даташиты: 15. Инструкции: 4. Новости: 15. Остальное: 2. Партнёры: 1. Производители: 1. Профиль пользователя: 2. Теги: 2. Форум: 11.
Участников: 3
Гостей: 140

MACTEP , Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

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

Написал MACTEP 31.03.2010 3:10:00 (Просмотров: 10558)

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



 

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

Расположение выводов последовательного программирования через 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.

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

Длительность низкого уровня:
- больше двух тактов ЦПУ, если fck < 12 МГц;
- больше трех тактов ЦПУ, если fck і 12 МГц.
Длительность высокого уровня:
- больше двух тактов ЦПУ, если fck < 12 МГц;
- больше трех тактов ЦПУ, если fck і 12 МГц.

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

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

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

  1. Последовательность подачи питания: подать напряжение питания между VCC и GND, когда на входах RESET и SCK присутствует лог. 0. В некоторых системах, программатор не может гарантировать, что SCK = 0 при подаче питания. В этом случае необходимо сформировать положительный импульс на RESET длительностью не менее двух тактов ЦПУ после того, как SCK принял низкое состояние. Альтернативно сигналу RESET можно использовать вывод PEN. В этом случае будет важно только значение PEN во время сброса при подаче питания. Если программатор не гарантирует, что при подаче питания SCK =0, то использование PEN недопустимо. При использовании данного метода микроконтроллер может вернутся к нормальному режимы работы только снятием и возобновлением питания.
  2. Пауза не менее 20 мс и разрешение последовательного программирования путем записи команды разрешения последовательного программирования через вход MOSI.
  3. Инструкции последовательного программирования не выполняются, если последовательная связь не вошла в синхронизацию. Вход в синхронизацию индицирует прием значения второго байта ($53) при записи третьего байта инструкции разрешения последовательного программирования. В зависимости от того корректно или нет принятое значение передаются все четыре байта инструкции. Если принятое значение не равно $53, то формируется положительный импульс на входе RESET и вводится новая команда разрешения последовательного программирования.
  4. Флэш-память программируется постранично. Размер страницы показан в таблице 125. Страница памяти загружается побайтно, при этом в инструкции "загрузки страницы памяти программ" указываются данные и адрес в семи младших разрядах. Чтобы гарантировать корректность загрузки страницы сначала необходимо записать младший байт, а затем старший байт данных по каждому адресу. Запись страницы памяти программ инициируется вводом инструкции "запись страницы памяти программ", где в 9-ти старших разрядах указывается адрес страницы. Если опрос не используется, то программист должен предусмотреть задержку не менее tWD_FLASH перед вводом новой страницы (см. табл. 129).

    Прим.: если какая-либо другая команда, кроме опроса (чтения), вводится перед завершением любой операции записи (флэш-память, ЭСППЗУ, биты защиты, конфигурационные биты) программирование может завершиться некорректно.

  5. Массив памяти ЭСППЗУ программируется побайтно, при этом, в инструкции записи указывается адрес и данные. Перед записью данных первоначально автоматически стирается адресуемая ячейка ЭСППЗУ. Если опрос не используется, то программист должен предусмотреть задержку tWD_EEPROM перед вводом следующего байта (см. табл. 129). По стирания памяти микроконтроллера необходимо записывать только данные неравные $FF.
  6. Любую ячейку памяти можно проверить использованием инструкции чтения, которая возвращает содержимое ячейки по указанному адресу путем последовательной передачи на выходе MISO.
  7. По завершении программирования вход RESET должен быть переведен в высокое состояние для возобновления нормальной работы.
  8. Последовательность снятия питания (при необходимости): установка RESET = "1", отключить питание VCC.

Опрос данных флэш-памяти

После того, как страница полностью запрограммирована во флэш-память, при чтении по адресам в пределах запрограммированной страницы возвращается $FF. Микроконтроллер готов к записи новой страницы, если запрограммированное значение считано корректно. Это используется для определения момента, когда может быть загружена следующая страница. Обратите внимание, что запись выполняется всей страницы одновременно и любой адрес в пределах страницы может использоваться для опроса. Опрос данных флэш-памяти не действует для значения $FF, т.к. при записи этого значения пользователь может не вводить задержку tWD_FLASH перед программированием новой страницы. Данная возможность объясняется тем, что очищенная память микроконтроллера содержит $FF во всех ячейках. Значение tWD_FLASH представлено в таблице 129.

Опрос данных ЭСППЗУ

При чтении значения по адресу, который использовался для записи нового байта и последующего его программирования в ЭСППЗУ, возвращается значение $FF. В это же время, микроконтроллер готов к записи нового байта, если запрограммированное значение корректно считывается. Это используется для определения момента, когда может быть осуществлена запись следующего байт. Данное не распространяется на значение $FF, но программист должен обратить внимание на следующее: поскольку очищенная память заполнена $FF по всем адресам, то программирование ячейки значением $FF может быть пропущено. Пропуск нельзя делать, если ЭСППЗУ перепрограммируется без предварительного стирания всей памяти. В этом случае, значение $FF нельзя использовать для опроса данных и программист должен предусмотреть задержку не менее tWD_EEPROM перед программированием следующего байта. В таблице 129 представлен о значение tWD_EEPROM.

Таблица 129. Минимальные длительности задержек перед записью очередной ячейки флэш-памяти и ЭСППЗУ

Обозначение Минимальная задержка
tWD_FLASH 4.5 мс
tWD_EEPROM 9.0 мс
tWD_ERASE 9.0 мс

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

Таблица 130. Набор инструкций последовательного программирования через 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.

Прим.:

a - адрес старших разрядов;
b - адрес младших разрядов;
H - 0 - мл. байт, 1 - ст. байт;
o - вывод данных;
i - ввод данных;
x - произвольное значение.

Характеристики последовательного программирования через интерфейс SPI

Характеристики модуля SPI представлены в разделе "Временные характеристики интерфейса SPI".

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

Теги:

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Разное

https://saratov.seowizard.ru seo продвижение сайта в саратове.

Интересно

Паяльник в дежурном нагреве включайте через диод, этим Вы значительно продлите ему жизнь.

Похожие статьи