Evgenii Legotckoi
Evgenii Legotckoi3 августа 2015 г. 21:30

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

Микроконтроллеры AVR Atmega48/88/168/328 содержат память EEPROM объемом 256/512/512/1K байт соответственно. EEPROM в микроконтроллерах AVR поддерживает до 100 000 циклов перезаписи. Доступ к энергонезависимой памяти осуществляется посредством регистров трёх видов:

  • EEARH, EEARL - регистры адресации ячеек памяти. В Atmega48 регистр EEARH отсутствует, поскольку в данном типе микроконтроллера присутствует всего 256 ячеек памяти. EEARH отвечает за старший байт адреса ячейки памяти, EEARL за младший байт;
  • EEDR - регистр для записи и чтения данных;
  • EECR - регистр контроля, в данном регистре производится настройка тех действий, которые должны быть выполнены с памятью.

Подробное описание регистров EEPROM

EEARH и EEARL - регистры адреса ячейки EEPROM

Биты с 9-го по 15 зарезервированы и всегда считываются со значением ноль.

Биты с 0-го по 8 используются для указания номера ячейки памяти EEPROM, к которой будет производиться обращение.

EEDR - регистр данных EEPROM

Биты с 2-го по 7 - биты в которых записывается информация, которая должна быть записана в EEPROM или прочитана из неё.

Биты с 6-го по 7 - биты являются зарезервированными

Биты с 4-го по 5 - EEPM1 и EEPM0 - используются для установки режима работы EEPROM.

  • EEPM1 = 0, EEPM0 = 0 - Атомарная операция удаления и записи данных (длительность 3,4 мс)
  • EEPM1 = 0, EEPM0 = 1 - Только удаление данных (длительность 1,8 мс)
  • EEPM1 = 1, EEPM0 = 0 - Только запись данных (длительность 1,8 мс)
  • EEPM1 = 1, EEPM0 = 1 - Зарезервировано для будущего использования

Бит 3 - EERIE - данный бит используется для включения прерывания, в том случае, если Вы разрешили прерывания в прошивке своего контроллера.

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

Бит 1 - EEPE - бит старта записи, выставляется для запуска записи, очищается в ноль аппаратно, в тот момент когда запись завершена. Поэтому может использоваться для контроля процесса записи данных в EEPROM .

Бит 0 - EERE - бит старта чтения. выставляется для запуск чтения из EEPROM.

Операции чтения и записи

EEPROM в Atmega очень медлительный интерфейс, который требует до 4 мс для совершения операций записи. Поэтому очень важно проверять, что предыдущая операция записи завершена успешно.

;======= Процедура записи в EEPROM ======================================================
 EEWrite: 
    sbic EECR,EEPE          ; Ожидаем, когда закончится предыдущая операция записи. 
    rjmp EEWrite            ; Не выходим из цикла до тех пор, пока не очистится флаг EEPE
    cli                     ; После чего выставляем запрет на прерывания.
    out EEARL,r16           ; Устанавливаем адрес ячейки, к которой будем обращаться
    out EEDR,r17            ; а также записываем в регистр данных информацию, 
                            ; которую будем сохранять
    sbi EECR,EEMPE          ; устанавливаем защиту на запись
    sbi EECR,EEPE           ; устанавливаем флаг записи
    sei                     ; после чего разрешаем прерывания
    ret                     ; и возвращаемся из подпрограммы.
 ;======= Процедура чтения из EEPROM ====================================================
 EERead: 
    sbic EECR,EEPE          ; Ожидаем, когда закончится предыдущая операция записи. 
    rjmp EERead 
    out  EEARL, r16         ; Устанавливаем адрес ячейки, к которой будем обращаться
    sbi  EECR,EERE          ; Запускаем чтение установкой флага на чтение
    in   r17, EEDR          ; Возвращаем результат чтения в нужный регистр
    ret 
 ;=======================================================================================
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
B

C++ - Тест 002. Константы

  • Результат:16баллов,
  • Очки рейтинга-10
B

C++ - Тест 001. Первая программа и типы данных

  • Результат:46баллов,
  • Очки рейтинга-6
FL

C++ - Тест 006. Перечисления

  • Результат:80баллов,
  • Очки рейтинга4
Последние комментарии
k
kmssr9 февраля 2024 г. 5:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко5 февраля 2024 г. 12:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 декабря 2023 г. 21:30
Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 декабря 2023 г. 19:38
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik19 декабря 2023 г. 8:01
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
P
Pisych27 февраля 2023 г. 15:04
Как получить в массив значения из связанной модели? Спасибо, разобрался:))
AC
Alexandru Codreanu19 января 2024 г. 22:57
QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
BlinCT
BlinCT27 декабря 2023 г. 19:57
Растягивать Image на парент по высоте Ну и само собою дял включения scrollbar надо чтобы был Flickable. Так что выходит как то так Flickable{ id: root anchors.fill: parent clip: true property url linkFile p…
Дмитрий
Дмитрий10 января 2024 г. 15:18
Qt Creator загружает всю оперативную память Проблема решена. Удалось разобраться с помощью утилиты strace. Запустил ее: strace ./qtcreator Начал выводиться весь лог работы креатора. В один момент он начал считывать фай…
Evgenii Legotckoi
Evgenii Legotckoi12 декабря 2023 г. 17:48
Побуквенное сравнение двух строк Добрый день. Там случайно не высылается этот сигнал textChanged ещё и при форматировани текста? Если решиать в лоб, то можно просто отключать сигнал/слотовое соединение внутри слота и …

Следите за нами в социальных сетях