Смекни!
smekni.com

Микроконтроллеры AVR (стр. 14 из 15)

3)Только в ATmega48x.

Идентификатор

Все микроконтроллеры фирмы Atmel имеют три 8-битные ячейки, содержимое которых позволяет идентифицировать устройство. В первой ячейке содержится код производителя $00, во второй — код объема FLASH-памяти $01, а в третьей — код устройства $02. Как и конфигурационные ячейки, ячейки идентификатора расположены в отдельном адресном пространстве, доступ к которому возможен только в режиме программирования. Однако в отличие от конфигурационных ячеек ячейки идентификатора, по понятным причинам, доступны только для чтения.

Значение кода устройства у разных моделей может совпадать. Поэтому устройство следует идентифицировать только по совокупности значений ячеек $01 и $02, так как именно эта пара чисел является уникальной для каждого микроконтроллера.

Калибровочные ячейки

В калибровочные ячейки при изготовлении микроконтроллера заносятся калибровочные константы, предназначенные для подстройки на номинальную частоту внутреннего RС-генератора. Количество этих ячеек зависит от того, на скольких частотах может работать внутренний RC-генератор. В моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x имеется четыре 8-битных ячейки, а в остальных моделях — одна ячейка. Располагаются они в старших байтах адресного пространства ячеек идентификатора.

Загрузка калибровочной константы в регистр OSCCAL осуществляется аппаратно при нахождении микроконтроллера в состоянии сброса. Однако в моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x генератор автоматически калибруется только на частоту 1 МГц. Поэтому при использовании другой частоты RС-генератора его калибровку необходимо осуществлять вручную. Для этого программатор во время программирования должен прочитать содержимое калибровочной ячейки и занести его по какому-либо адресу FLASH-памяти программ. А программа должна после старта считать это значение из памяти программ и занести его в регистр OSCCAL.

Организация памяти программ и данных

В микроконтроллерах семейства Mega используется страничная организация памяти программ. При программировании весь объем FLASH-памяти разбивается на 16-битные страницы, размер которых, а также их количество зависят от объема памяти программ микроконтроллера.

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

Аналогичным образом организована и EEPROM-память. Размер 8-битных страниц EEPROM-памяти.

Однако следует отметить, что во многих моделях страничная организация EEPROM-памяти используется только при программировании в параллельном режиме, а программирование по последовательному каналу осуществляется побайтно.

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

В режиме программирования по последовательному каналу программирование памяти программ и данных осуществляется по последовательному интерфейсу SPI. Как правило, этот режим используется для программирования (перепрограммирования) микроконтроллера непосредственно в устройстве.

Схема включения микросхем в режиме программирования по последовательному каналу приведена на рис. 9.2. На этом же рисунке показано два варианта разводки колодки для подключения программатора, рекомендуемые компанией Atmel.

Рис. 9.2. Включение микроконтроллеров в режиме программирования по последовательному каналу

Как видно из рис. 9.2, для обмена данными между программатором и устройством используются три линии: SCK (тактовый сигнал), MOSI (вход данных) и MISO (выход данных).

Как и в рабочем режиме, при программировании по последовательному каналу микроконтроллеру требуется источник тактового сигнала. В качестве такового может использоваться любой из допустимых для микроконтроллера источников. При этом должно выполняться следующее условие: длительность импульсов как НИЗКОГО, так и ВЫСОКОГО уровня сигнала SCK должна быть больше 2 периодов тактового сигнала микроконтроллера.

Программирование осуществляется путем посылки 4-байтных команд на вывод MOSI микроконтроллера. Результат выполнения команд чтения снимается с вывода MISO микроконтроллера. Передача команд и выдача результатов их выполнения осуществляются от старшего бита к младшему. При этом “защелкивание” входных данных выполняется по нарастающему фронту сигнала SCK, а “защелкивание” выходных данных – по спадающему.

Переключение в режим программирования

Для перевода микроконтроллера в режим программирования по последовательному каналу необходимо выполнить следующие действия:

-подать на микроконтроллер напряжение питания, при этом на выводах SCK и RESET должно присутствовать напряжение НИЗКОГО уровня. Выждать не менее 20 мс;

-послать на вывод MOSI команду “Разрешение программирования”;

-для контроля прохождения команды при посылке 3-го байта возвращается значение 2-го байта ($53).

-после завершения программирования на вывод RESET можно подать напряжение ВЫСОКОГО уровня для перевода микроконтроллера в рабочий режим либо выключить его.

В последнем случае необходимо выполнить следующую последовательность действий:

-подать на вывод XTAL1 напряжение НИЗКОГО уровня, если тактирование микроконтроллера осуществляется от внешней схемы;

-подать на вывод RESET напряжение ВЫСОКОГО уровня;

-отключить напряжение питания от микроконтроллера.

Управление процессом программирования FLASH-памяти

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

Фактическое программирование страницы FLASH-памяти осуществляется после загрузки буфера страницы по команде “Запись страницы FLASH-памяти”.

Следует помнить, что дальнейшее программирование памяти можно будет выполнять только после завершения записи страницы. Определить момент окончания записи можно тремя способами. Первый и наиболее простой способ — выдерживать между посылкой команд паузу. Второй способ заключается в контролировании содержимого любой из записываемых ячеек после посылки команды записи, а третий способ — опрос флага готовности RDY c помощью соответствующей команды.

Управление процессом программирования EEPROM-памяти

Во всех старых моделях программирование EEPROM-памяти осуществляется обычным способом – побайтно. А в новых моделях появился альтернативный способ записи EEPROM-памяти – постраничный. Содержимое страницы побайтно заносится в буфер по командам “Загрузка страницы EEPROM-памяти”, а затем осуществляется фактическое программирование страницы EEPROM-памяти по команде “Запись страницы EEPROM-памяти”. Значения адресов, передаваемые в этих командах, определяются так же, как и при программировании FLASH-памяти. Для определения момента окончания записи можно использовать любой из описанных выше способов.

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

В режиме параллельного программирования от программатора к микроконтроллеру передаются одновременно все биты кода команды или байта данных. Этот режим задействует большое число выводов микроконтроллера и требует использования дополнительного источника повышенного напряжения. Поэтому программирование в параллельном режиме осуществляется специализированными программаторами. Основное применение этого режима — “прошивка” микроконтроллеров перед установкой их на плату в условиях массового производства.

Схема включения микросхем в режиме параллельного программирования приведена на рис. 9.3.

Рис. 9.3. Включение микроконтроллеров в режиме параллельного программирования

Таблица 9.7. Обозначение и функции выводов, используемых при программировании в параллельном режиме

Сигнал Вывод Вход/Выход Назначение
RDY/BSY PD1 Выход Состояние устройства:0 – занято (выполняется предыдущая команда);1 – готово к приему следующей команды.
ОЕ PD2 Вход Управление режимом работы шины данных РВ7...РВ0: 0 — выход, 1 — вход
WR PD3 Вход Сигнал записи (активный уровень — лог. 0)
BS1 PD4 Вход Выбор байта (см. Табл. 14.14)
ХАО PD5 Вход Определяют действие, выполняемое по положительному импульсу на выводе XTAL1
ХА1 PD6 Вход
PAGEL PD7 Вход Сигнал загрузки страницы памяти
BS2 РАО Вход Выбор байта (см. Табл. 14.14)
DATA РВ7...РВ0 Вход/Выход Двунаправленная шина данных

В общих чертах процесс программирования в этом режиме состоит из многократного выполнения следующих операций:

-загрузка команды;

-загрузка адреса;

-загрузка данных;

-выполнение команды.

Последовательность подачи сигналов на выводы микроконтроллера при выполнении различных базовых операций приведена в табл. 9.8.

Таблица 14.7. Базовые операции программирования в параллельном режиме

Название операции Действия
1 Загрузка команды 1.Установить выводы ХА1, ХАО в состояние 10.2.Подать на вывод BS1 напряжение лог. 0.3.Выставить на шину DATA код команды.4.Подать на вывод XTAL1 положительный импульс.
2 Загрузка адреса 1.Установить выводы ХА1, ХАО в состояние 00 (загрузка адреса).2.Установить выводы BS2:BS1 в состояние 00 (загрузка младшего байта), 01 (загрузка старшего байта) или 10 (загрузка дополнительного байта).3.Выставить на шину DATA байт адреса.4.Подать на вывод XTAL1 положительный импульс.
3 Загрузка данных 1.Установить выводы ХА1, ХАО в состояние 01 (загрузка данных).2.Подать на вывод BS1 напряжение лог. 0 (загрузка младшего байта) или лог. 1 (загрузка старшего байта).3.Выставить на шину DATA содержимое байта данных.4.Подать на вывод XTAL1 положительный импульс.
4 Запись данных в буфер страницы 1.Подать на вывод BS1 напряжение лог. 1.2.Подать на вывод PAGEL положительный импульс.
5 Запись байта конфигурации 1.Установить выводы BS2:BS1 в состояние 00 (запись младшего байта), 01 (запись старшего байта) или 10 (запись дополнительного байта). 2.Подать на вывод WR отрицательный импульс; при этом на выводеRDY/BSY появляется сигнал НИЗКОГО уровня.3.Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня.
Запись страницы 1.Установить выводы BS2:BS1 в состояние 00.2.Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня.3.Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня.

Переключение в режим параллельного программирования

Первой операцией при программировании микроконтроллера является его перевод в режим программирования. Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия: