Каталог статей

Главная » Статьи » Мои статьи

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

Память данных EEPROM - это энергонезависимый массив памяти, отделённый от памяти данных ОЗУ и памяти программ, который предназначен для долговременного хранения записанных данных. Она не отображена напрямую ни в файле регистров, ни в пространстве памяти программ, но косвенно адресуется через регистры специального назначения (Special Function Registers - SFRs). В нормальном режиме работы EEPROM можно читать и записывать на всём диапазоне VDD.

Для чтения и записи данных EEPROM, равно как и памяти программ, используются пять регистров общего назначения:

- EECON1
- EECON2
- EEDATA
- EEADR
- EEADRH

Память данных EEPROM позволяет осуществлять чтение и запись по одному байту. При взаимодействии с блоком памяти данных, в регистре EEDATA содержатся 8 битов данных для чтения/записи, а в регистровой паре EEADRH:EEADR содержится адрес ячейки EEPROM, к которой осуществляется доступ.

Память данных EEPROM рассчитана на высокую износостойкость по циклам чтения/записи. При записи байта ячейка автоматически стирается, и затем в неё записываются новые данные (стирание перед записью). Время записи управляется встроенным таймером; оно меняется в зависимости от напряжения и температуры, а также будет отличаться для каждой микросхемы. Точные пределы смотрите в параметре D122 (Таблица 27-1 в разделе 27.0 "Электрические характеристики").

7.1 Регистры EEADR и EEADRH

Регистровая пара EEADRH:EEADR используется для адресации памяти данных EEPROM в операциях чтения и записи. EEADRH хранит два старших бита адреса, остальные 6 старших битов регистра игнорируются. С помощью 10-битного адреса в регистровой паре можно адресовать диапазон памяти до 1024 байтов (от 00h до 3FFh).

7.2 Регистры EECON1 и EECON2

Доступ к памяти данных EEPROM управляется двумя регистрами: EECON1 и EECON2. Эти же регистры используются и для управления доступом к памяти программ.

Регистр EECON1 (Регистр 7-1) отвечает за управление доступом к памяти данных и памяти программ. Управляющий бит EEPGD определяет, к какой памяти осуществляется доступ: к EEPROM или памяти программ. Если этот бит сброшен, то доступ осуществляется к памяти данных EEPROM, если установлен - к памяти программ.

Управляющий бит CFGS определяет, осуществляется ли доступ к конфигурационным регистрам, или к памяти программ/памяти данных EEPROM. Если этот бит установлен, то операции будут производиться над конфигурационными регистрами. Если же бит CFGS сброшен, то битом EEPGD выбирается либо Flash-память программ, либо память данных EEPROM.

Бит WREN, будучи установленным, разрешает операции записи. При включении питания бит WREN сброшен. Бит WRERR устанавливается аппаратно, когда устанавливается бит WREN, и сбрасывается, когда истекает внутренний таймер записи и операция записи завершается. Если же операция записи была прервана преждевременно сбросом (Reset), либо была предпринята ненадлежащим образом, бит WRERR не сбрасывается, указывая таким образом, что произошла ошибка.

Управляющий бит WR инициирует операцию записи. Бит нельзя сбросить программно, можно только установить; он сбрасывается аппаратно по завершении операции записи.

Примечание: бит флага прерывания EEIF (PIR2<4>) устанавливается по завершении записи. Его необходимо сбрасывать программно.

Управляющие биты RD и WR запускают соответственно операции чтения и стирания/записи. Эти биты устанавливаются программно, а сбрасываются аппаратно по завершении операции.

Бит RD нельзя установить при доступе к памяти программ (EEPGD = 1). Память программ читается с помощью команд табличного чтения. О табличном чтении смотрите раздел 6.1 "Табличное чтение и табличная запись".

Регистр EECON2 физически не существует. Он используется исключительно в последовательностях записи и стирания памяти. Все биты регистра EECON2 читаются как "0".

Регистр 7-1. EECON1 - первый регистр управления памятью данных EEPROM

Регистр EECON1 - первый регистр управления памятью данных EEPROM


бит 7EEPGD - бит выбора Flash-памяти программ или EEPROM-памяти данных
 1 = доступ будет осуществляться к памяти программ
0 = доступ будет осуществляться к памяти данных
  
бит 6CFGS - бит выбора Flash-памяти программ/памяти данных EEPROM или конфигурационных регистров
 1 = доступ будет осуществляться к конфигурационным регистрам
0 = доступ будет осуществляться к Flash-памяти программ или EEPROM-памяти данных
  
бит 5Не реализован, читается как "0"
  
бит 4FREE - бит разрешения построчного стирания Flash-памяти
 1 = на следующей команде WR (запись) стереть строку памяти программ, адресуемую регистром TBLPTR (сбрасывается по завершению операции стирания)
0 = выполнить только запись
  
бит 3WRERR - бит флага ошибки Flash-памяти программ или EEPROM-памяти данных
 1 = операция записи прервана преждевременно (любой сброс в процессе записи в нормальном режиме работы, либо некорректная попытка записи)
0 = операция записи завершенаПримечание: когда возникает WRERR, биты EEPGD и CFGS не сбрасываются. Это позволяет отследить причину ошибки.
  
бит 2WREN - бит разрешения записи Flash-памяти программ или EEPROM-памяти данных
 1 = разрешает циклы записи во Flash-память программ или EEPROM-память данных
0 = запрещает циклы записи во Flash-память программ или EEPROM-память данных
  
бит 1WR - бит управления записью
 1 = инициирует цикл стирания/записи для памяти данных EEPROM, либо цикл стирания или цикл записи для памяти программ (самотактируемая операция, бит сбрасывается аппаратно, как только запись завершится. Бит WR можно только установить программно, но не сбросить.)
0 = цикл записи в EEPROM завершён
  
бит 0RD - бит управления чтением
 1 = инициирует чтение EEPROM (Чтение занимает один цикл. RD сбрасывается аппаратно. Бит RD можно только установить программно, но не сбросить. Бит RD нельзя установить, когда EEPGD=1 (работа с памятью программ) или CFGS=1 (работа с конфигурационными регистрами))
0 = не инициирует чтение EEPROM.

Обозначения:
R - читаемый бит
W - записываемый бит
S - устанавливаемый бит
U - не реализованный бит, читается как "0"
-n - значение после сброса по включению питания
"1" - бит установлен
"0" - бит сброшен
"x" - значение бита не определено

7.3 Чтение памяти данных EEPROM

Чтобы прочитать ячейку памяти данных, необходимо записать адрес в регистровую пару EEADRH:EEADR, сбросить управляющий бит EEPGD (EECON1<7>), и затем установить управляющий бит RD (EECON1<0>). Данные доступны непосредственно на следующем командном цикле, поэтому регистр EEDATA можно считать следующей командой. EEDATA будет хранить это значение до следующей операции чтения, либо пока он не будет перезаписан пользователем (во время операции записи).

Основной процесс показан в Примере 7-1.

Пример 7-1. Чтение данных EEPROM

MOVLW DATA_EE_ADDRH ;
MOVWF EEADRH ; старшие биты адреса читаемой ячейки памяти данных
MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; младшие биты адреса читаемой ячейки памяти данных
BCF EECON1, EEPGD ; указать, доступ что осуществляется к памяти
BCF EECON1, CFGS ; указать, что доступ осуществляется к памяти данных EEPROM
BSF EECON1, RD ; запустить операцию чтения EEPROM
MOVF EEDATA, W ; получить данные (W = EEDATA)

7.4 Запись в память данных EEPROM

Чтобы выполнить запись в ячейку памяти данных EEPROM, сначала необходимо записать адрес в регистровую пару EEADRH:EEADR, а затем записать данные в регистр EEDATA. Для инициации цикла записи необходимо следовать последовательности, приведённой в Примере 7-2.

Пример 7-2. Запись в память данных EEPROM

 MOVLW DATA_EE_ADDRH ;
 MOVWF EEADRH ; старшие биты адреса записываемой ячейки памяти данных
 MOVLW DATA_EE_ADDR ;
 MOVWF EEADR ; младшие биты адреса записываемой ячейки памяти данных
 MOVLW DATA_EE_DATA ;
 MOVWF EEDATA ; значение, записываемое в память данных
 BCF EECON1, EPGD ; указать, доступ что осуществляется к памяти
 BCF EECON1, CFGS ; указать, что доступ осуществляется к памяти данных EEPROM
 BSF EECON1, WREN ; разрешить операции записи
 BCF INTCON, GIE ; запретить прерывания
MOVLW 55h ; Обязательная MOVWF EECON2 ; записать 55h последова- MOVLW 0AAh ; тельность MOVWF EECON2 ; записать 0AAh BSF EECON1, WR ; установить бит WR, чтобы начать запись
BSF INTCON, GIE ; разрешить прерывания ; исполнение кода пользователя BCF EECON1, WREN ; по завершении записи (установлен флаг EEIF) запретить операции записи

Запись не начнётся, если не следовать последовательности в точности (запись 55h в регистр EECON2, запись 0AAh в EECON2, затем установка бита WR) для каждого байта. Строго рекомендуется отключать прерывания на время этого сегмента кода.

Кроме того, необходимо установить бит WREN в регистре EECON1, чтобы разрешить запись. Этот механизм предотвращает случайную запись в память данных EEPROM из-за непредсказуемого выполнения кода (т.е. выход программного счётчика за пределы программы). Бит WREN должен оставаться сброшенным всё время, исключая запись в EEPROM. Бит WREN не сбрасывается аппаратно.

После инициации последовательности записи регистры EECON1, EEADRH:EEADR и EEDATA не могут быть изменены. Установка бита WR будет запрещена, пока не установится бит WREN. Бит WREN необходимо устанавливать командой, предшествующей установке бита WR. Нельзя установить биты WR и WREN одновременно, т. е. одной командой.

По завершении цикла записи бит WR сбрасывается аппаратно, и устанавливается бит флага прерывания EEPROM (EEIF). Пользователь может или разрешить это прерывание, или опрашивать этот бит. EEIF должен сбрасываться программно.

7.5 Проверка записи

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

7.6 Работа во время защиты кода

Память данных EEPROM имеет свои собственные биты защиты кода в слове конфигурации. Внешние операции чтения и записи запрещены, если защита кода включена.

Сам микроконтроллер может и читать и записывать во внутреннюю память данных EEPROM независимо от состояния конфигурационного бита защиты кода. Дополнительную информацию смотрите в разделе 24.0 "Специальные возможности ЦПУ".

7.7 Защита от фиктивной записи

Существуют условия, при которых устройство может не захотеть записать данные в память EEPROM. Для защиты от фиктивной записи реализованы различные механизмы. Один из них состоит в том, что при включении питания бит WREN сбрасывается. Кроме того, запись в EEPROM блокируется во время периода таймера по включению питания (TPWRT, параметр 33).

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

7.8 Использование памяти данных EEPROM

Память данных EEPROM - это массив с высокой износоустойчивостью и возможностью побайтовой адресации, который оптимизирован для хранения часто изменяемой информации (например, программных переменных или других данных, которые часто обновляются). Часто изменяемые значения, как правило, будут обновляться чаще, чем в характеристике D124. Если не так, то должна выполняться регенерация (обновление) массива памяти. По этой причине, переменные, которые меняются редко (такие как константы, идентификаторы, калибровочные данные и т.п.) должны храниться во Flash-памяти программ.

Простая процедура регенерации памяти данных EEPROM приведена в Примере 7-3.

Примечание: Если память данных EEPROM используется только для хранения констант и/или редко изменяемых данных, то, скорее всего, регенерация массива не потребуется. Смотрите характеристику D124.

Пример 7-3. Процедура регенерации памяти данных EEPROM

 CLRF EEADR ; начать с нулевого адреса
 CLRF EEADRH ;
 BCF EECON1, CFGS ; указать, что осуществляется доступ к памяти
 BCF EECON1, EEPGD ; указать, что доступ осуществляется к памяти данных EEPROM
 BCF INTCON, GIE ; запретить прерывания
 BSF EECON1, WREN ; разрешить операции записи
Loop ; цикл регенерации массива
 BSF EECON1, RD ; прочитать данные по текущему адресу
 MOVLW 55h ;
 MOVWF EECON2 ; записать 55h
 MOVLW 0AAh ;
 MOVWF EECON2 ; записать 0AAh
 BSF EECON1, WR ; установить бит WR, чтобы начать запись
 BTFSC EECON1, WR ; ожидать завершения записи
 BRA $-2
 INCFSZ EEADR, F ; увеличить адрес на единицу младшую часть адреса
 BRA LOOP ; если не ноль, перейти на начало цикла
 INCFSZ EEADRH, F ; увеличить на единицу старшую часть адреса
 BRA LOOP ; если не ноль, перейти на начало цикла
 BCF EECON1, WREN ; запретить операции записи
 BSF INTCON, GIE ; разрешить прерывания

Таблица 7-1. Регистры, связанные с памятью данных EEPROM

Таблица 7-1. Регистры, связанные с памятью данных EEPROM

Обозначения: — = не реализован, читается как "0". Затемнённые ячейки не используются при доступе к памяти Flash/EEPROM.

Примечание: 1) Эти биты доступны в устройствах PIC18F4X8X и являются зарезервированными в устройствах PIC18F2X8X.



© PIClist-RUS (piclist.ru), 2007 г.

Категория: Мои статьи | Добавил: MAS (25.11.2012)
Просмотров: 916 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Мои статьи [51]
Справочные данные [165]
Справочные данные
Наш опрос
Оцените мой сайт
Всего ответов: 30
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Баннер
$$
Друзья сайта
  • Спортсменам
  • Огородникам СЮД(А
  • Строим вместе
  • Мир развлечений
  • Кто хочет похудеть
  • Здоровье у нас одно
  • Юмор
  • Кулинарные рецепты
  • Картинки_Заставки_Демотивоторы
  • Семья
  • Кто на мальчишник
  • Металлообработка
  • Кто на девишник
  • Блоки питания
  • Смерть соседям
  • Радиомедведь
  • Кибермедведь
  • Радиосайт
  • Деревообработка
  • Поиск