В процессе программирования микроконтроллеров разработанная пользователем программа заносится в энергонезависимую память. При этом выполняются операции по стиранию, чтению и записи различных элементов памяти кристалла. Типовыми операциями являются:
0 операция "Chip erase" (стирание кристалла);
0 чтение/запись FLASH-памяти программ;
0 чтение/запись EEPROM памяти данных;
0 чтение/запись конфигурационных FUSE-битов;
0 чтение/запись LOCK-битов защиты программной информации;
0 чтение SYGNATURE-битов идентификации кристалла;
Микроконтроллеры обычно поставляются со стертыми встроенными FLASH и EEPROM блоками памяти (содержимое всех ячеек = $FF), готовыми к программированию. Программирование кристалла, как правило, может выполняться различными способами:
0 Параллельное программирование - информация заносится в энергонезависимую память через параллельные порты ввода/вывода. Обычно эта операция выполняется на специальных приборах - программаторах.
0 Последовательное программирование - информация заносится в энергонезависимую память через схему последовательного интерфейса. Операция, как правило, может выполняться непосредственно в микропроцессорной системе (In System Programming).
0 Самопрограммирование может осуществляться самим микроконтроллером под управлением программы, записанной в Boot Program Section флэш- памяти программ.
Параллельное программирование
При параллельном программировании информация поступает на микроконтроллер в параллельном коде через один из его портов. Ряд других контактов микроконтроллера используется для управления записью и чтением данных. На рис. 15.1. показана схема подключения микроконтроллера АТтеgа163 при параллельном программировании.
Рис. 15.1. Параллельное программирование микроконтроллера ATmegal63
Для перевода устройства в режим параллельного программирования необходимо:
0 Подать напряжение 4.5 - 5.5V на контакт Vcc.
0 Установить на контактах #RESET, BS0 и BS1 сигнал низкого уровня на время не менее 100 нc.
0 Подать напряжение 11.5 - 12.5V на контакт #RESET.
В каждом такте программирования импульс синхронизации длительностью не менее 500 не подается на контакт XTAL1. Совокупность остальных сигналов (табл. 15.1 и табл. 15.2) описывает операцию, выполняемую в момент прихода синхроимпульса. В зависимости от сочетания сигналов информация на линиях порта В микроконтроллера, может быть восприняты как команда управления процессом записи, как данные или как один из байтов адреса ячейки памяти.
Таблица 15.1. Назначение сигналов при параллельном программировании
Наименование сигнала в режиме программирования | Контакт | Вход/ выход (I/O) | Функция сигнала |
RDY/BSY | PD1 | О | 0: Программирование, 1: Чтение команды |
ОЕ | PD2 | I | Включение выхода (активный низкий уровень) |
WR | PD3 | I | Импульс записи (активный низкий уровень) |
BS1 | PD4 | I | Выбор байта 1 ('0' - младший байт, '1' - старший байт) |
ХАО | PD5 | I | Операция (бит 0) |
ХА1 | PD6 | I | Операция (бит 1) |
PAGEL | PD7 | I | Загрузка страницы памяти программ |
BS2 | РАО | I | Выбор байта 2 ('0' - младший байт, '1' - старший байт) |
DATA | PB7 | Двунаправленный ввод/вывод (вывод при OE=0) |
Таблица 15.2. Выбор операции при параллельном программировании
ХА1 | ХАО | Операция при импульсе на входе XTAL1 |
Загрузка адреса Flash или EEPROM памяти (байт адреса задается сигналом BS1) | ||
Загрузка данных (байт адреса задается сигналом BS1 | ||
Загрузка команды | ||
Ожидание |
В таблице 15.3 приведены команды параллельного программирования микроконтроллера АТтеgа163, различаемые микроконтроллером при выполнении операции «Загрузка команды» (ХА1=1, ХА0=0).
Таблица 15.3. Команды параллельного программирования микроконтроллера АТтеgа163
Байт | Команда |
1000 0000 | Очистка кристалла |
0100 0000 | Запись Fuse битов |
0010 0000 | Запись Lock битов |
0001 0000 | Запись Flash памяти |
0001 0001 | Запись EEPROM |
00001000 0000 0100 | Чтение байта Signature Чтение Fuse и Lock битов |
0000 0010 | Чтение Flash памяти |
0000 0011 | Чтение EEPROM |
FLASH и EEPROM блоки памяти программируются байт за байтом.
Во время операции очистки кристалла (Chip erase) стираются все ячейки FLASH и EEPROM памяти, а также LOCK-биты. Причем LOCK-биты стираются только после того, как будет очищена вся память программ. На состояние FUSE-бит операция Chip erase не оказывает воздействия.
У контроллера АТтеgа163 имеется FUSE бит EESAVE, программирование которого приводит к тому, что при выполнении операции Chip erase содержимое EEPROM сохраняется.
Последовательное программирование
При последовательном программировании значительно меньше контактов микроконтроллера и не требуется источника высокого напряжения. На рис. 15.2 показана схема включения микроконтроллера в режиме последовательного программирования.
Рис. 15.2. Последовательное программирование микроконтроллера АТтеда163
Здесь для программирования используется последовательный SPI интерфейс при подключении контакта Vcc к источнику питания 5В, а контактов GND и #RESET - к земле. Последовательный интерфейс использует контакты SCK (синхронизация), MOSI (ввод) и MISO (вывод).
При записи последовательно поступающих данных в микроконтроллер данные синхронизируются по переднему фронту сигнала SCK. При чтении данных с микроконтроллера данные синхронизируются по заднему фронту SCK.
Для программирования и проверки микроконтроллера ATMEGA163 в последовательном режиме программирования используются четырехбайтные команды (табл. 15.4).
Таблица 15.4. Инструкции последовательного программирования микроконтроллера АТтеgа163
Programming Enable | 0101 0011 | xxxxxxxx | xxxxxxxx | Включение последовательного программирования после сброса импульсом #RESET | |
Chip Erase | 100ххххх | xxxxxxxx | xxxxxxxx | Очистка кристалла EEPROM и Flash. | |
Read Program Memory | 0010 H000 | xxxa aaaa | bbbb bbbb | 0000 0000 | Чтение байта H (старший или младший) команды из памяти программ с заданным адресом a:b. |
Load Program Memory Page | 0100 H000 | xxxxxxxx | xxbb bbbb | iiii iiii | Загрузка байта H (старший или младший) данных i в страницу памяти программ по адресу b. |
Write Program Memory Page | xxxa aaaa | bbxxxxxx | iiii iiii | Запись страницы памяти программ с адресом a:b. | |
Read EEPROM Memory | 1010 0000 | xxxxxxxa | bbbb bbbb | OOOO oooo | Чтение данных из EEPROM по адресу a:b. |
Write EEPROM Memory | 1100 0000 | xxxxxxxa | bbbb bbbb | iiii iiii | Запись i в EEPROM по адресу a:b. |
Read Lock Bits | 0101 1000 | xxxxxxxx | xxxxxxxx | xx65 4321 | Чтение Lock bits. '0' = programmed, '1' = unprogrammed. |
Write Lock Bits | 111XXXXX | xxxxxxxx | 1165 4321 | Запись Lock bits. Установка бит 6 -1 = '0' приводит к программированию Lock bits |