МИКРОКОНТРОЛЛЕРЫ AVR: ОРГАНИЗАЦИЯ ПАМЯТИ

   Почитав наш форум, стало ясно, что не все понимают разницу между прошивкой и исходником, FLASH и EEPROM. Чтобы данных вопросов больше не возникало, решил написать этот краткий обзор. Возьмем, к примеру, МК ATMega16. Внутри данного контроллера имеются 2 основные области памяти: ПЗУ, она же память программ или flash-память, и ОЗУ, она же память данных или SRAM. В довесок ко всему этому идет память для хранения данных (EEPROM).

Память программ

   Память программ используется для хранения так называемой прошивки. Прошивка представляет из себя набор инструкций (команды и операнды) в машинных кодах, понятных контроллеру, в соответствии с которыми контроллер выполняет требуемую последовательность действий. Прошивку получают посредством компилятора. Компилятор – это программа, которая выполняет преобразование текста, написанного на каком-либо языке программирования (исходник), в код машинных инструкций (прошивка, hex-файл). Каждая инструкция имеет длину 16 или 32 бита (в основном 16 бит), а также имеет адрес, под которым она хранится во flash-памяти.

flash-память, и ОЗУ

   Так как объем flash-памяти контроллера составляет 16 кбайт (16384 байта), то в него можно впихнуть 8192 16-ти битных инструкции (8К х 16). Кроме основной программы во flash-памяти могут быть размещены различные константы, значения которых используются при выполнении программы и которые не могут быть изменены, а также может быть секция бутлоадера (сморим статью про fuse-биты). Число циклов перепрограммирования flash-памяти составляет 10000. Т.е. после 10000 (или около того) циклов возможно будет запись с ошибками, либо вообще программа не запишется. Пугаться не стоит, если немного посчитать, то получается чтобы дойти до этого надо шить контроллер каждую минуту в течение примерно семи дней без отрыва на сон, перекуры, распитие пива и прочие радости холостой или семейной (у кого как) жизни.

Память данных

память данных состоит из: регистрового файла

   Как видно из рисунка, память данных состоит из: регистрового файла, в который входят 32 регистра общего назначения (РОН); 64-х регистров периферии – регистры ввода/вывода (I/O регистры); 1024 байт самой ОЗУ. Все операции, происходящие внутри МК (логические, арифметические и т.д.), а также его общение с периферией (АЦП, таймеры/счетчики, порты ввода/вывода и т.д.) происходит через регистры. Все регистры имеют разрядность 8 бит – отсюда и 8-ми битные контроллеры. Конечно есть и 16-ти разрядные регистры, но они опять же состоят из 2-х восьмибитных. Регистры ввода/вывода (РВВ) предназначены для работы с периферией МК и ее конфигурирования.

   Возьмем, к примеру, порты ввода/вывода (самый простой пример). Для каждого порта есть 3 РВВ: 

 1) регистр, определяющий направление передачи данных через выводы порта (вход или выход);

 2) регистр, считывающий состояние выводов порта, если выводы настроены на прием (вход) информации;

 3) регистр, определяющий логический уровень на выводе порта если вывод настроен на выход, либо управлять внутренним подтягивающим резистором, если вывод настроен на вход.

   Для того, чтобы настроить порт под свои требования, а также выдать в порт информацию или принять ее, необходимо считать данные из РВВ либо загрузить в них данные. Эти данные представляют собой 8-ми разрядные числа, но особенность МК AVR в том, что в РВВ нельзя напрямую загрузить данные либо считать эти данные из РВВ. Для этих целей необходимо использовать РОН, т.е. для записи в РВВ мы сначала наши данные помещаем в РОН, а потом пересылаем их в РВВ. Аналогично для чтения данных из РВВ нам необходимо их сначала загрузить из РВВ в РОН, а потом произвести с ними всякие непотребства.

   Следует заметить, что блок РОН можно разделить на 2 группы: РОН младшей половины регистрового файла (R0…R15) и РОН старшей половины регистрового файла (R16…R31). Разница заключается в том, что не все команды, относящиеся к старшей половине регистров, можно применить к младшей половине, то есть регистры R0…R15 получаются немного урезанными по набору команд.

   И теперь само ОЗУ. Это оперативная память, как в компьютере, предназначенная для хранения различных переменных, сохранение которых не требуется после отключения питания. Выделение места под переменные (задается в программе) идет он начала к концу ОЗУ. Также ОЗУ нужно для такой штуковины как стек, который является частью ОЗУ и служит для сохранения различных данных, а также для сохранения адресов при вызове подпрограмм и прерываний. Стек работает по принципу «первым зашел – последним вышел» и растет от конца ОЗУ к началу. 


   При использовании ОЗУ под переменные и стек необходимо следить за тем, чтобы одно не наехало на другое.

EEPROM

электрически стираемая программируемая постоянная память

   Тут все просто – электрически стираемая программируемая постоянная память размером 512 байт. В отличии от flash-памяти здесь адресация побайтная.

   Сюда можно сохранять всякие константы, данные, которые используются при работе программы, либо необходимо сохранить перед отключением питания и т.п. В EEPROM данные можно писать непосредственно при выполнении программы либо путем прошивки через прошивальщик (eep-файл). Если чтение из EEPROM в процессе работы МК осуществляется очень быстро, то запись в него происходит очень долго, несколько миллисекунд. Тут надо быть осторожным, чтоб при процессе записи в EEPROM не выскочило прерывание, а то запишем в итоге какую-либо бяку. Так что тут надо быть внимательней. Число циклов запись/стирание в EEPROM составляет 100000. Автор материала: skateman.

Не забудьте поделиться с друзьями


Это тоже полезно посмотреть:


СТИЛУС ДЛЯ ЕМКОСТНОГО ЭКРАНА СВОИМИ РУКАМИ

Как из подручных материалов сделать стилус для экрана - эксперименты с различными приспособлениями и материалами.


ИНДИКАТОРЫ ЭЛЕКТРИЧЕСКОГО ПОЛЯ

    Опыты по созданию неоновых индикаторов ВЧ и электромагнитного поля, игрушки на их основе.


РАДОНОВАЯ ЛОВУШКА

     Принципиальная схема и конструкция простой самодельной ловушки для радона - приставки к дозиметру.


РЕМОНТ DVD ПЛЕЕРА ELENBERG

     Обмен опытом: как восстановить работоспособность блока механики старого плеера ДВД-дисков.


ОБЗОР И РЕМОНТ БАТАРЕЕЧНОЙ ЭЛЕКТРОБРИТВЫ

     Техническое обслуживание и обзор электрической бритвы Микма-125.


МОБИЛЬНАЯ ПРОСЛУШКА




Популярные схемы
СТАБИЛИЗАТОР С МАЛЫМ ПА...

     Рассмотрим микросхему-стабилизатор MIC2941 с очень малым падением напряжения - всего 0,1 вольт.


ЗАРЯДНОЕ УСТРОЙСТВО - Л...

     Делаем мощное зарядное устройство из БП АТХ - пошаговая инструкция переделки.

САМОСТОЯТЕЛЬНЫЙ РЕМОНТ ...

     Статья рассказывает о характерных неисправностях Вашего ноутбука и способах их устранения. Также она повествует об основных правилах пользования ноутбуком, соблюдение которых поможет Вам увеличить его срок службы.

ЗАДЕРЖКА САЛОННОГО СВЕТ...

     Схема несложного устройства на микросхеме, для задержки выключения света в салоне автомобиля.

LM4780

    Интегральная микросхема LM4780TA - это превосходный стереофонический усилитель, способный непрерывно отдавать 60 Вт мощности в нагрузку 8 Ом с коэффициентом нелинейных искажений менее 0,5%.
 


СХЕМА ТИРИСТОРНОГО РЕГУ...

     Простая электросхема тиристорного регулятора напряжения, используемая для паяльника.

ЧАСТОТОМЕР НА МИКРОКОНТ...

ЧАСТОТОМЕР НА МИКРОКОНТРОЛЛЕРЕ   Схема частотомера с динамической индикацией на микроконтроллере PIC16F628A.

УСИЛИТЕЛЬ МОДУЛЯТОРА

     Схема и фото собранной платы усилителя мощности сигнала автомобильного модулятора 88-108МГц.