EEPROM в микроконтроллерах AVR

Просмотров: 19081Комментарии: 0
Электроника. СхемотехникаAVR.Начинающим

Почти во всех микроконтроллерах AVR есть память EEPROM (Electrically Erasable Programmable Read-Only Memory) - электрически стираемая программируемая постоянно запоминающая память. Память EEPROM сохраняет свое содержимое при отсутствии питания. Это бывает нужно, если мы хотим восстановить какие-то данные после перезагрузки микроконтроллера. Эта память находится в отдельном логическом и физическом пространстве. Как и для работы с другой периферией МК, для работы с EEPROM используются несколько регистров. Рассмотрим их.

EEAR - регистр адреса EEPROM. Если память превышает 256 байт, тогда для адресации используются два регистра - EEARH и EEARL (старший и младший байт регистра адреса). Чтобы записать  или считать данные нужно записать в эти регистры адрес ячейки памяти в которую мы хотим записать или с которой хотим считать байт данных.

EEDR - регистр данных, хранит данные, которые будут записаны в EEPROM или прочитаны оттуда.

EECR - регистр управления EEPROM
Бит 3 - EERIE: разрешение прерывания. Прерывание генерится после того, как бит EEWE (см. ниже) очищается и если бит глобального прерывания I регистра SREG установлен.
Бит 2 - EEMWE: если этот бит установить и после этого в течение тактов установить бит EEWE, тогда произойдет запись байта из регистра EEDR в память по адресу EEAR. Если бит EEMWE сброшен, то установка EEWE не будет иметь никакого эффекта. Т.е. если мы в течение 4х тактов не успели установить EEWE, то придется снова устанавливать бит EEMWE.
Бит 1 - EEWE: разрешение записи в память. Если этот бит установлен, то запись разрешена. Если перед этим установить бит EEMWE, тогда произойдет запись байта в память.
Бит 0 - EERE: разрешение чтения из памяти. Если этот бит установлен, то данные по адресу записанному в регистре EEAR считываются и помещаются в регистр EEDR. После этого мы можем забрать данные.

Давайте подитожим. Чтобы записать байт в память EEPROM нужно:
  1. В цикле ждем пока бит EEWE сбросится.
  2. Записываем адрес в EEAR, по которому будем записывать байт.
  3. Записываем байт в регистр EEDR.
  4. Устанавливаем бит EEMWE.
  5. Устанавливаем бит EEWE.
  6. И все. Если мы записали во все регистры корректные данные, то на данном этапе байт записан в память.
Пример функции на ассемблере и на С для записи в EEPROM можно найти в даташите на МК.

void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1<<EEWE));//ждем установки бита EEWE
EEAR = uiAddress;//устанавливаем адрес
EEDR = ucData;//записываем байт данных
EECR |= (1<<EEMWE);//устанавливаем EEMWE
EECR |= (1<<EEWE);//устанавливаем EEWE
}

Чтение производится практически также.
  1. Ждем пока бит EEWE сбросится.
  2. Записываем адрес в EEAR, по которому будем считывать байт.
  3. Устанавливаем бит EERE
  4. Теперь регистр EEDR содержит считанный байт
Пример функции из того же даташита

unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<EEWE));//ждем установки EEWE
EEAR = uiAddress;//устанавливаем адрес чтения
EECR |= (1<<EERE);//разрешаем чтение
return EEDR;//возвращаем прочитанный байт из функции
}

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)