47600 (597343), страница 13
Текст из файла (страница 13)
2) Изменение состояния этой ячейки вступает в силу сразу же после ее программирования.
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 сигнала ВЫСОКОГО уровня.  |  
-  
 -  
 -  
Переключение в режим параллельного программирования
 
Первой операцией при программировании микроконтроллера является его перевод в режим программирования. Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия:
-  
подать на микроконтроллер напряжение питания;
 -  
подать на вывод RESET напряжение НИЗКОГО уровня и сформировать не менее трех импульсов на выводе XTAL1;
 -  
подать на выводы PAGEL, XA1, ХА0, BS1 напряжение НИЗКОГО уровня на время не менее 100 нс;
 -  
подать напряжение 11.5... 12.5 В на вывод RESET и удерживать напряжение НИЗКОГО уровня на выводах PAGEL, XA1, ХА0, BS1 в течение, как минимум, 10 мкс. Любая активность на указанных выводах в течение этого времени приведет к тому, что микроконтроллер не перейдет в режим программирования выждать не менее 300 мкс перед посылкой следующей команды.
 
-  
 -  
Стирание кристалла
 
Команда “Стирание кристалла” должна выполняться перед каждым перепрограммированием микроконтроллера. Данная команда полностью уничтожает содержимое FLASH- памяти и EEPROM-памяти, а затем сбрасывает ячейки защиты (записывает в них 1). Однако на состояние конфигурационных ячеек данная команда не влияет. Кроме того, в ряде моделей микроконтроллеров семейства Mega можно предотвратить стирание EEPROM-памяти путем программирования конфигурационной ячейки EESAVE.
Для выполнения команды “Стирание кристалла” необходимо выполнить следующие действия:
-  
загрузить команду “Стирание кристалла”;
 -  
подать на вывод WR сигнал НИЗКОГО уровня;
 -  
ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня.
 
-  
 -  
Программирование FLASH-памяти
 
Запись FLASH-памяти производится в следующей последовательности:
-  
загрузить команду “Запись FLASH-памяти”;
 
-  
загрузить младший байт адреса (положение ячейки внутри страницы);
 -  
загрузить младший байт данных;
 -  
загрузить старший байт данных;
 -  
запомнить данные в буфере;
 -  
повторить пп. 2...5 до полного заполнения буфера страницы;
 -  
загрузить старший байт адреса (номер страницы);
 -  
записать страницу.
 -  
повторить все пункты для записи остальных страниц памяти программ;
 -  
завершить программирование, загрузив команду “Нет операции”.
 
Необходимо отметить, что если для адресации ячейки памяти внутри страницы требуется меньше 8 битов (при размере страницы менее 256 слов), то оставшиеся старшие биты младшего байта адреса используются для адресации страницы при выполнении команды “Запись страницы”.















