Домой / Интернет / Как работает eeprom. Что такое чип памяти и как программировать микросхемы. Регистры EECON1, EECON2

Как работает eeprom. Что такое чип памяти и как программировать микросхемы. Регистры EECON1, EECON2

Электрически стираемые программируемые микросхемы постоянной памяти (EEPROM) являются металлическими оксидными полупроводниковыми компьютерными микросхемами, которые используются на печатной плате. Этот тип чипа можно стереть и перепрограммировать с использованием сильного электронного сигнала. Поскольку это можно сделать, не удаляя чип с устройства, к которому он подключен, чипы EEPROM используются во многих отраслях.
Микросхема EEPROM содержит энергонезависимую память, поэтому её данные не теряются при нарушении питания чипа. Микросхема такого типа может быть запрограммирована выборочно, что означает, что часть её памяти может быть изменена с помощью новой перезаписи, не затрагивая остальную память. Информация, хранящаяся внутри микросхемы EEPROM, является постоянной, пока она не будет стёрта или перепрограммирована, что делает её ценным компонентом в компьютерах и других электронных устройствах.

Микросхемы EEPROM созданы на основе транзисторов с плавающим затвором. Микросхема EEPROM запрограммирована путём принудительной программируемой информации в виде электронов через оксид затвора. Затем плавающий затвор обеспечивает хранение этих электронов. Ячейка памяти считается запрограммированной, когда она заряжается электронами, и это представляется нулём. Если ячейка памяти не заряжена, она не запрограммирована, и она представлена ​​единицей.

Для широкого спектра устройств требуется память, поэтому чипы EEPROM имеют множество применений в области бытовой электроники. Они используются в игровых системах, телевизорах и компьютерных мониторах. Слуховые аппараты, цифровые камеры, технология Bluetooth и игровые системы также используют чипы EEPROM. Они используются в телекоммуникационной, медицинской и обрабатывающей промышленности. Персональные и бизнес-компьютеры содержат ЭСППЗУ.

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

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

Микросхемы разного назначения применяются в составе электроники современной техники. Огромное многообразие такого рода компонентов дополняют микросхемы памяти. Этот вид радиодеталей (среди электронщиков и в народе) зачастую называют просто – чипы. Основное назначение чипов памяти – хранение определённой информации с возможностью внесения (записи), изменения (перезаписи) или полного удаления (стирания) программными средствами. Всеобщий интерес к чипам памяти понятен. Мастерам, знающим как программировать микросхемы памяти, открываются широкие просторы в области ремонта и настройки современных электронных устройств.

Микросхема памяти — это электронный компонент, внутренняя структура которого способна сохранять (запоминать) внесённые программы, какие-либо данные или одновременно то и другое.

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

Следует отметить: чипы памяти всегда являются неотъемлемым дополнением микропроцессоров – управляющих микросхем. В свою очередь микропроцессор является основой электроники любой современной техники.

Набор электронных компонентов на плате современного электронного устройства. Где-то среди этой массы радиодеталей приютился компонент, способный запоминать информацию

Таким образом, микропроцессор управляет , а чип памяти хранит сведения, необходимые микропроцессору.

Программы или данные хранятся в чипе памяти как ряд чисел — нулей и единиц (биты). Один бит может быть представлен логическими нулем (0) либо единицей (1).

В единичном виде обработка битов видится сложной. Поэтому биты объединяются в группы. Шестнадцать бит составляют группу «слов», восемь бит составляют байт — «часть слова», четыре бита — «кусочек слова».

Программным термином для чипов, что используется чаще других, является байт. Это набор из восьми бит, который может принимать от 2 до 8 числовых вариаций, что в общей сложности даёт 256 различных значений.

Для представления байта используется шестнадцатеричная система счисления, где предусматривается использование 16 значений из двух групп:

  1. Цифровых (от 0 до 9).
  2. Символьных (от А до F).

Поэтому в комбинациях двух знаков шестнадцатеричной системы также укладываются 256 значений (от 00h до FFh). Конечный символ «h» указывает на принадлежность к шестнадцатеричным числам.

Организация микросхем (чипов) памяти

Для 8-битных чипов памяти (наиболее распространенный тип) биты объединяются в байты (8 бит) и сохраняются под определённым «адресом».

По назначенному адресу открывается доступ к байтам. Вывод восьми битов адреса доступа осуществляется через восемь портов данных.


Организация структуры запоминающего устройства. На первый взгляд сложный и непонятный алгоритм. Но при желании разобраться, понимание приходит быстро
  • Tutorial

Резюме: Если вы периодически обновляете некоторое значение в EEPROM каждые несколько минут (или несколько секунд), вы можете столкнуться с проблемой износа ячеек EEPROM. Чтобы избежать этого, требуется снижать частоту записей в ячейку. Для некоторых типов EEPROM даже частота записи чаще чем один раз в час может быть проблемой.

Когда вы записываете данные, время летит быстро

EEPROM повсеместно используется для сохранения параметров настройки и журнала работы во встраиваемых системах. К примеру, вы можете хотеть функцию «черного ящика», для записи последних данных на момент аварии или потери питания. Я видел спецификации с требованием записывать подобные данные каждые несколько секунд.

Но проблема в том, что EEPROM имеет ограниченный ресурс числа записей. После 100,000 или миллиона записей (зависит от конкретного чипа), некоторые из ваших систем начнут испытывать проблемы с отказом EEPROM. (Посмотрите в даташит, чтобы узнать конкретную цифру. Если вы хотите выпустить большое число устройств, «наихудший случай», вероятно, более важен чем «типичный»). Миллион записей кажется большой цифрой, но на самом деле он закончится очень быстро. Давайте посмотрим на примере, предположив, что нам нужно сохранять измеренное напряжение в одну ячейку каждые 15 секунд.

1,000,000 записей при одной записи в 15 секунд дают записи в минуту:
1,000,000 / (4 * 60 минут/час * 24 часа/день) = 173.6 дней.
Другими словами, ваша EEPROM исчерпает резерв в миллион записей менее чем через 6 месяцев.

Ниже приведен график, показывающая время до износа (в годах), основанный на периоде обновления конкретной ячейки EEPROM. Ограничительная линия для продукта с продолжительностью жизни 10 лет составляет одно обновление каждые 5 минут 15 секунд для микросхемы с ресурсом 1 миллион записей. Для EEPROM с ресурсом 100К можно обновлять конкретную ячейку не чаще одного раза в 52 минуты. Это означает, что не стоит и надеяться обновлять ячейку каждые несколько секунд, если вы хотите, чтобы ваш продукт работал годы, а не месяцы. Вышесказанное масштабируется линейно, правда, в настоящем приборе имеются еще и вторичные факторы, такие как температура и режим доступа.

Уменьшить частоту

Самый безболезненный способ решить проблему-это просто записывать данные реже. В некоторых случаях требования к системе это позволяют. Или можно записывать только при каких-либо больших изменениях. Однако, с записью, привязанной к событиям, помните о возможном сценарии, при котором значение будет постоянно колебаться, и вызовет поток событий, которые приведут к износу EEPROM.
(Будет неплохо, если вы сможете определить, сколько раз производилась запись в EEPROM. Но это потребует счётчика, который будет храниться в EEPROM… при этом проблема превращается проблему износа счётчика.)

Прерывание по снижению уровня питания

В некоторых процессорах имеется прерывание по низкому уровню питания, которое можно использовать для записи одного последнего значения в EEPROM, в то время как система выключается по потере питания. В общем случае, вы храните интересующее значение в ОЗУ, и сохраняете его в EEPROM только при выключении питания. Или, возможно, вы записываете EEPROM время от времени, и записываете другую копию в EEPROM как часть процедуры выключения, чтобы убедиться, что самые последние данные запишутся.
Важно убедиться, что есть большой конденсатор по питанию, который будет поддерживать напряжение, достаточное для программирования EEPROM достаточно продолжительное время. Это может сработать, если вам нужно записать одно или два значения, но не большой блок данных. Осторожно, тут имеется большое пространство для ошибки!

Кольцевой буфер

Классическое решение проблемы износа-использовать кольцевой буфер FIFO, содержащий N последних записей значения. Так-же понадобится сохранять указатель на конец буфера в EEPROM. Это уменьшает износ EEPROM на величину, пропорциональную числу копий в этом буфере. Например, если буфер проходит через 10 различных адресов для сохранения одного значения, каждая конкретная ячейка модифицируется в 10 раз реже, и ресурс записи возрастает в 10 раз. Вам также понадобится отдельный счётчик или отметка времени для каждой из 10 копий, чтобы можно было определить, которая из них последняя на момент выключения. Другими словами, понадобится два буфера, один для значения, и один для счетчика. (Если сохранять счетчик по одному и тому-же адресу, это приведёт к его износу, т.к. он должен увеличиваться при каждом цикле записи.) Недостаток этого метода в том, что нужно в 10 раз больше места чтобы получить в 10 раз большую продолжительность жизни. Можно проявить смекалку, и упаковать счетчик вместе с данными. Если вы записываете большое количество данных, добавление нескольких байт для счетчика - не такая уж большая проблема. Но в любом случае, понадобится много EEPROM.
Atmel приготовил аппноут, содержащий все кровавые подробности:
AVR-101: High Endurance EEPROM Storage: www.atmel.com/images/doc2526.pdf

Особый случай для счётчика числа записей

Иногда нужно сохранить счётчик, а не сами значения. К примеру, вы можете хотеть знать число включений прибора, или время работы вашего устройства. Самое плохое в счётчиках, это то, что у них постоянно меняется младший значащий бит, изнашивая младшие ячейки EEPROM быстрее. Но и тут возможно применить некоторые трюки. В аппноуте от Microchip есть несколько умных идей, таких как использование кода Грея, чтобы только один бит из многобайтового счётчика менялся при изменении значения счетчика. Также они рекомендуют использовать корректирующие коды для компенсации износа. (Я не знаю, насколько эффективно будет применение таких кодов, т.к. это будет зависеть от того, насколько независимы будут ошибки в битах в байтах счётчика, используйте на свой страх и риск, прим. авт.). Смотри аппноут: ww1.microchip.com/downloads/en/AppNotes/01449A.pdf

Примечание: для тех, кто хотел бы узнать больше, Microchip подготовил документ, содержащий детальную информацию об устройстве ячеек EEPROM и их износе с диаграммами:
ftp.microchip.com/tools/memory/total50/tutorial.html

Дайте мне знать, если у вас имеются какие-либо интересные идеи по поводу борьбы с износом EEPROM.

Источик: Phil Koopman, «Better Embedded System SW»
betterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.html

Примечание переводчика: в последние годы появились микросхемы EEPROM со страничной организацией стирания (подобной микросхемам FLASH), где логически можно адресовать ячейки (читать, записывать и стирать) побайтно, но при этом микросхема невидимо для пользователя стирает всю страницу целиком и перезаписывает новыми данными. Т.е. стерев ячейки по адресу 0, мы фактически стёрли и перезаписали ячейки с адресами 0...255 (при размере страницы 256 байт), поэтому трюк с буфером в этом случае не поможет. При исчерпании ресурс записей у такой микросхемы выходит из строя не одна ячейка, а вся страница целиком. В даташитах для таких микросхем ресурс записи указан для страницы , а не для конкретной ячейки. Смотри, например, даташит на 25LC1024 от Microchip.

Теги: Добавить метки

Обновлено 16.12.15. Всем привет. Рассмотрев в прошлой статье взаимодействие кнопок с контроллером, в этой записи разберем память МК AVR EEPROM (электрически стираемая ППЗУ), которая является энергонезависимой и имеет ресурс примерно в 100 000 циклов записи/чтения. Зачем нам нужна такая память с ограниченным числом обращений к ней? Такая память идеально подходит для хранения констант и исходных параметров, которые мы можем задать в начале программы, при помощи тех же кнопок.

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

Теперь рассмотрим как обращаться к ней. Для программирования памяти EEPROM используются три регистра, расположенные в области ввода/вывода памяти SRAM: восьмиразрядный регистр адреса EEAR или два регистра EEARH и EEARL; восьмиразрядный регистр данных EEDR; восьмиразрядный регистр управления EECR. когда происходит процесс записи, байт данных адресуется регистром адреса и заносится в регистр данных. В процессе чтения из памяти в регистр данных записывается содержимое ячейки EEPROM, адресуемой регистром адреса.

В книге Евстифеева, справочнике по микроконтроллерам (литературу я приводил в статье №1), описаны программные примеры для записи/чтения. Давайте разберем программу:

Реализация функции записи:

void EEPROM_write (unsigned int uiAddress, unsigned char uoData)
{
while (EECR & (1<
EEAR = uiAddress; //Проинициализировать регистр адреса
EEDR = uoData ; //Проинициализировать регистр данных
EECR |= (1< //Установить флаг EEMWE
EECR |= (1<< EEWE); //Начать запись в EEPROM
}

Разберем программу.
1. EEWE является разрядом регистра (рисунок ниже) EECR и отвечает за разрешение записи в EEPROM, если установлен в 1, то происходит запись в EEPROM , при условии что EEMWE установлен в 1.
2. Загружаем адрес в регистр адреса EEAR

Разряды регистра управления EECR:
EERIE — разрешение прерывания от EEPROM;
EEMWE — управление разрешением записи в EEPROM;
EEWE — разрешение записи в EEPROM;
EERE — разрешение чтения из EEPROM.

3. Загружаем байт данных в регистр данных EEDR.
4. EEMWE – управление разрядом разрешения записи в EEPROM. Этот флаг отвечает за функционирование разряда разрешения записи EEWE. При установке в 1 запись разрешается, если 0, то при установке EEWE в 1 запись в память не произойдет. После программной установки EEMWE сбрасывается через 4 машинных цикла.
5. Записываем данные в память.

Здесь есть один нюанс . Если планируется, периодически записывать данные в EEPROM во время выполнения программы, при самопрограммировании микроконтроллера, то необходимо знать, что запись в EEPROM не может одновременно выполняться с записью во Flash память, поэтому выше после первого пункта необходимо добавить следующий пункт:

— дождаться завершения записи во Flash-память программ, т.е. ждать пока не сброситься флаг SPMEN регистра SPMCR, тогда после этой строки необходимо добавить еще одно циклическое условие:

while (SPMCR &(1<// Завершение записи во Flash память

Теперь разберем функцию чтения:

Unsigned char EEPROM_write (unsigned int uiAddress)
{
while (EECR & (1<//ждем завершения предыдущей записи
EEAR = uiAddress; //Проинициализировать регистр адреса
EECR |= (1<
return EEDR;
}

Здесь все почти также, только в функцию передается адрес переменной, инициализируем его и разрешаем чтение по этому адресу. Возвращаем данные.

Но прежде, чем использовать алгоритм записи или чтения EEPROM, необходимо объявить переменную, которая будет распределена в пределах области EEPROM. Для этого в библиотеке eeprom.h программной среды WinAVR определен специальный атрибут EEMEM. Например объявим переменную без знакового целочисленного типа с атрибутом.

EEMEM uint8_t eeprom_х; // объявим переменную.
х –переменная;
uint8_t – целочисленный без знаковый тип, имеющие точно указанную разрядность, в данном случае 8 бит и предназначен для переносимости программ.
EEMEM – атрибут, заставляющий переменную быть распределенной в пределах раздела.eeprom. Данный атрибут определен в файле eeprom.h и выглядит он следующим образом.

#ifndef EEMEM
#define EEMEM__attribute__ ((section («.eeprom»)))
#endif

Для работы с данными в библиотеке уже прописаны функции:
для чтения
uint8_t eeprom_read_byte (const uint8_t *addr)
Аргументом функций eeprom_read_... является адрес переменной в EEPROM, а результатом — значение переменной в EEPROM.
для записи
void eeprom_write_byte (uint8_t *addr, uint8_t value)
Аргументами функций eeprom_write_... являются адрес в EEPROM, куда записать данные и значение которое нужно записать.

Ну что ж все это пережевав на по следок программный пример в целом. Передадим в EEPROM данные и считаем. Используя AVR и , выведем результат.

#include
#include
#include
#include «lcd.h»

uint8_t EEMEM eepro_х; /* такая переменная должна быть всегда глобальной и служит для передачи своего адреса в область EEPROM*/
char word="Hello";

main ()
{
uint8_t eepro_х1 = 100; /*вторая переменная для передачи данных*/
/*Давайте запишем переменную в память*/
eeprom_write_byte (&eeprom_x, eeprom_x1); /*передаем в функцию адрес переменной и значение которое запишем по этому адресу*/
/*теперь убедимся, что в памяти у нас хранится значение 100, для этого обнулим текущее значение переменной х и присвоим считанное значение из памяти*/
eeprom_х1 = 0;
/*считаем содержимое памяти*/
x1 = eeprom_read_byte (&eeprom_x); // взятие адреса переменной
sprintf (word,"V_eeprom x1=%3d",eeprom_x1);
PrintString (word);
}

Ниже, на рисунке представлен результат
Если в программе изначально передаются какие то константы для хранения в памяти EEPROM, то при прошивке необходимо залить файл с расширением.eep, который будет создан компилятором и размещен в той же директории что и рабочие файлы.

На этом пока все. Здесь дан краткий обзор для работы с такой памятью. Конечно есть куча нюансов, но это уже тонкости. В следующей статье рассмотрим ШИМ (широтно-импульсную модуляцию) и плавно перейдем к следующему проекту попробуем сконструировать «мозги» для любительского станка ЧПУ. Всем пока.

EEPROM — это энергонезавимая память с электрическим стиранием информации. Количество циклов записи-стирания в этих микросхемах достигает 1000000 раз. Заминающие ячейки в них, также как и в постоянных запоминающих устройствах с электрическим стиранием EPROM, реализуются на основе транзисторов с плавающим затвором. Внутреннее устройство этой запоминающей ячейки приведено на рисунке 1:


Рисунок 1. Запоминающая ячейка ПЗУ с электрическим стиранием (EEPROM)

Ячейка EEPROM памяти представляет собой МОП транзистор, в котором затвор выполняется из поликристаллического кремния. Затем в процессе изготовления микросхемы этот затвор окисляется и в результате он будет окружен оксидом кремния — диэлектриком с прекрасными изолирующими свойствами. В транзисторе с плавающим затвором при полностью стертом ПЗУ, заряда в "плавающем" затворе нет, и поэтому данный транзистор ток не проводит. При программировании, на второй затвор, находящийся над "плавающим" затвором, подаётся высокое напряжение и в него за счет туннельного эффекта индуцируются заряды. После снятия программирующего напряжения индуцированный заряд остаётся на плавающем затворе, и, следовательно, транзистор остаётся в проводящем состоянии. Заряд на его плавающем затворе может храниться десятки лет.

Подобная ячейка памяти применялась в ПЗУ с ультрафиолетовым стиранием (EPROM). В ячейке памяти с электрическим стиранием возможна не только запись, но и стирание информации. Стирание информации производится подачей на программирующий затвор напряжения, противоположного напряжению записи. В отличие от ПЗУ с ультрафиолетовым стиранием, время стирания информации в EEPROM памяти составляет около 10 мс.

Структурная схема энергонезависимой памяти с электрическим стиранием не отличается от структурной схемы масочного ПЗУ. Единственное отличие — вместо плавкой перемычки используется описанная выше ячейка. Ее упрощенная структурная схема приведена на рисунке 2.



Рисунок 2. Упрощенная структурная схема EEPROM

В качестве примера микросхем EEPROM памяти можно назвать отечественные микросхемы 573РР3, 558РР3 и зарубежные микросхемы серий AT28с010, AT28с040 фирмы Atmel, HN58V1001 фирмы Hitachi Semiconductor, X28C010 фирмы Intersil Corporation. В EEPROM памяти чаще всего хранятся пользовательские данные в сотовых аппаратах, которые не должны стираться при выключении питания (например адресные книги), конфигурационная информация роутеров или сотовых аппаратов, реже эти микросхемы применяются в качестве конфигурационной памяти FPGA или хранения данных DSP. EEPROM изображаются на принципиальных схемах как показано на рисунке 3.


Рисунок 3. Условно-графическое обозначение электрически стираемого постоянного запоминающего устройства

Чтение информации из параллельной EEPROM памяти производится аналогично чтению из масочного ПЗУ. Сначала на шине адреса выставляется адрес считываемой ячейки памяти в двоичном коде A0...A9, затем подается сигнал чтения RD. Сигнал выбора кристалла CS обычно используется в качестве дополнительного адресного провода для обращения к микросхеме. Временные диаграммы сигналов на входах и выходах этого вида ПЗУ приведены на рисунке 4.



Рисунок 4. Временные диаграммы сигналов чтения информации из EEPROM памяти

На рисунке 5 приведен чертеж типового корпуса микросхемы параллельной EEPROM памяти.


Рисунок 5. Чертеж корпуса микросхемы параллельной EEPROM

Обычно данные, которые хранятся в EEPROM требуются достаточно редко. Время считывания при этом не критично. Поэтому в ряде случаев адрес и данные передаются в микросхему и обратно через последовательный порт. Это позволяет уменьшить габариты микросхем за счет уменьшения количества внешних выводов. При этом используются два вида последовательных портов — SPI порт и I2C порт (микросхемы 25сXX и 24cXX серий соответственно). Зарубежной серии 24cXX соответствует отечественная серия микросхем 558РРX.

Внутренняя схема микросхем серии 24сXX (например AT24C01) приведена на рисунке 6.



Рисунок 6. Внутренняя схема микросхемы AT24C01

Подобные микросхемы широко используются для сохранения настроек телевизоров, в качестве памяти plug and play в компьютерах и ноутбуках, конфигурационной памяти ПЛИС и сигнальных процессоров (DSP). Применение последовательной EEPROM памяти позволило значительно уменьшить стоимость данных устройств и увеличить удобство работы с ними. Пример расположения данной микросхемы на печатной плате карты памяти компьютера приведен на рисунке 7.



Рисунок 7. EEPROM на печатной плате карты памяти компьютера

На рисунке 8 приведена схема электронной карты с применением внешней EEPROM микросхемы.


Рисунок 8. Схема электронной карты с применением внешней EEPROM

На данной схеме микроконтроллер PIC16F84 осуществляет обмен данными с EEPROM памятью 24LC16B. В таких устройствах, как SIM-карта, уже не применяется внешняя микросхема памяти. В SIM-картах сотовых аппаратов используется внутренняя EEPROM память однокристального микроконтроллера. Это позволяет максимально снизить цену данного устройства.

Схема управления для электрически стираемых программируемых ПЗУ получилась сложная, поэтому наметилось два направления развития этих микросхем:

  1. ЕСППЗУ (EEPROM) - электрически стираемое программируемое постоянное запоминающее устройство
  2. FLASH-ПЗУ

FLASH - ПЗУ отличаются от ЭСППЗУ тем, что стирание производится не каждой ячейки отдельно, а всей микросхемы в целом или блока запоминающей матрицы этой микросхемы, как это делалось в РПЗУ.


Рисунок 9. Условно-графическое обозначение FLASH памяти

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



Рисунок 10. Временные диаграммы сигналов чтения информации из ПЗУ

На рисунке 10 стрелочками показана последовательность, в которой должны формироваться управляющие сигналы. На этом рисунке RD - это сигнал чтения, A - сигналы выбора адреса ячейки (так как отдельные биты в шине адреса могут принимать разные значения, то показаны пути перехода как в единичное, так и в нулевое состояние), D - выходная информация, считанная из выбранной ячейки ПЗУ.

Литература:

Вместе со статьей "Постоянные запоминающие устройства (ПЗУ)" читают: