Что такое EEPROM? (видео)

EEPROM Arduino ➜ позволяет сохранять данные во время работы программы. Рассмотрим, как работать с EEPROM памятью Ардуино — запись и чтение различных типов данных.

СОДЕРЖАНИЕ ►

EEPROM память Arduino позволяет сохранять важные данные во время работы программы, например настройки работы системы, даже при отключении питания или при перезагрузке микроконтроллера, так как она является энергонезависимой. Рассмотрим, как работать с EEPROM памятью Ардуино с примерами записи и чтения различных типов данных с помощью команд стандартной библиотеки EEPROM.h.

Блок: 1/6 | Кол-во символов: 561
Источник: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/eeprom-arduino/

История

Элай Харари в 1977 году создал EEPROM с помощью автоэлектронной эмиссии через плавающий затвор. В 1978 году Джордж Перлегос в Intel разработал процессор Intel 2816, который был построен на более ранней технологии EPROM, но использовал тонкий подзатворный окисленный слой, позволяющий чипу стереть собственные байты без УФ-источника. Перлегос и другие позже использовали технологию, которая подразумевала использование на устройстве конденсаторов для обеспечения необходимого напряжения для программирования микросхемы.

Внутреннее устройство запоминающей ячейки c электрическим стиранием.

Блок: 2/11 | Кол-во символов: 596
Источник: https://ru.bmstu.wiki/EEPROM_(Electrically_Erasable_Programmable_Read-Only_Memory)

Arduino EEPROM энергонезависимая память

Энергонезависимая память EEPROM Arduino (Electrically Erasable Programmable Read-Only Memory) — это постоянное запоминающее устройство, которое может хранить записанные в нее данные десятки лет после отключения питания. Количество циклов перезаписи EEPROM памяти несколько сотен тысяч раз при температуре не ниже 24°С, а чтение данных не ограничено. Объем EEPROM памяти Arduino следующий:

  • ATmega168 (плата Arduino Nano) — 512 байт;
  • ATmega328 (плата Arduino Uno, Arduino Nano) — 1 Кбайт;
  • ATmega1280, ATmega2560 (плата Arduino Mega) — 4 Кбайт.

На операцию записи одного байта в EEPROM уходит около 3,3 мкс, а на чтение одного байта уходит около 0,4 мкс (микросекунд). Каждый байт (ячейка) EEPROM в Ардуино по умолчанию (т.е. ни разу не записанная ячейка) имеет значение 255. Обратите внимание, что если данные занимают место больше 1 байта (например, число больше 255), то они разбиваются на несколько ячеек. Это важно учитывать при записи в EEPROM.

Блок: 2/6 | Кол-во символов: 988
Источник: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/eeprom-arduino/

Команды библиотеки EEPROM.h Arduino

Функция

Краткое описание

read()
EEPROM.read(address)

Считывает один байт из EEPROM Arduino по адресу address
write()
EEPROM.write(address, value)

Записывает один байт со значением value в EEPROM по адресу address
update()
EEPROM.update(address, value)

Аналог функции write(), но новые данные в ячейку записываются только тогда, когда они отличаются от уже записанного. Использование данной функции позволяет продлить жизнь памяти EEPROM.
get()
EEPROM.get(address, data)

Считывает из EEPROM Arduino любой тип данных по адресу address. При этом данные (data) могут быть любого типа, например, int или float.
put()
EEPROM.put(address, data)

Записывает в EEPROM Arduino любой тип данных по адресу address. Функция записывает в ячейку только отличающиеся данные.
EEPROM
EEPROM

Позволяет обращаться с байтами EEPROM Arduino как с массивом. Байты можно считывать и записывать.
Блок: 3/6 | Кол-во символов: 934
Источник: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/eeprom-arduino/

Принцип действия

Разрез транзистора с плавающим затвором.

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

Для извлечения данных из EPROM адрес, представляющий значение нужного контакта EPROM, декодируется и используется для подключения одного слова памяти (как правило, 8-битного байта) к усилителю выходного буфера. Каждый бит этого слова имеет значение 1 или 0, в зависимости от того, был включён или выключен транзистор, был он в проводящем состоянии или непроводящем.

Переключение состояния полевого транзистора управляется напряжением на управляющем затворе транзистора. Наличие напряжения на этом затворе создаёт проводящий канал в транзисторе, переключая его в состояние «включено». По сути накопленный заряд на плавающем затворе позволяет пороговому напряжению транзистора программировать его состояние.

Для запоминания данных требуется выбрать нужный адрес и подать более высокое напряжение на транзисторы. Это создаёт лавинный разряд электронов, которые получают достаточно энергии, чтобы пройти через изолирующий слой окисла и аккумулироваться на плавающем затворе (см. туннельный эффект). Когда высокое напряжение снимается, электроны оказываются запертыми между барьерами из оксида из-за крайне высокого удельного сопротивления. Накопленный заряд не может утечь и может храниться в течение десятилетий.

В отличие от памяти EEPROM, процесс программирования в EPROM не является электрически обратимым. Чтобы стереть данные, хранящиеся в матрице транзисторов, на неё направляется ультрафиолетовый свет. Фотоны ультрафиолетового света, рассеиваясь на избыточных электронах, придают им энергию, что позволяет заряду, хранящемуся на плавающем затворе, рассеяться. Так как вся матрица памяти подвергается обработке, то все данные стираются одновременно. Процесс занимает несколько минут для УФ-ламп небольших размеров. Солнечный свет будет стирать чип в течение нескольких недель, а комнатная люминесцентная лампа — в течение нескольких лет. Вообще, для стирания чипы EPROM должны быть извлечены из оборудования, так как практически невозможно вставить в УФ-лампу какой-либо блок и стереть данные только с части чипов.

Блок: 3/12 | Кол-во символов: 2674
Источник: https://ru.wikipedia.org/wiki/EPROM

Детали

Поскольку изготовление кварцевого окна стоит дорого, была разработана память PROM («одноразовая» программируемая память, ОПМ). В ней матрица памяти монтируется в непрозрачную оболочку. Это устраняет необходимость тестирования функции стирания, что также снижает расходы на изготовление. ОПМ-версии производятся как для памяти EPROM, так и для микроконтроллеров со встроенной памятью EPROM. Однако, ОПМ EPROM (будь то отдельный чип или часть большого чипа) всё чаще заменяют на EEPROM при небольших объёмах выпуска, когда стоимость одной ячейки памяти не слишком важна, и на флеш-память при больших сериях выпуска.

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

Стирание EPROM происходит при длине волны света короче 400 нм. Экспозиция солнечным светом в течение 1 недели или освещение комнатной флуоресцентной лампой в течение 3 лет может привести к стиранию. Рекомендуемой процедурой стирания является воздействие ультрафиолетовым светом длиной волны 253,7 нм от 20 до 30 минут лампой со световым потоком не менее 15 вт-сек/см2, размещённой на расстоянии около 30 сантиметров.

Стирание может быть также выполнено с помощью рентгеновских лучей:

«Стирание может быть сделано неэлектрическими методами, так как управляющий электрод электрически недоступен. Освещение ультрафиолетовым светом любой части неупакованного устройства вызывает фототок, который течёт из плавающего затвора на кремниевую подложку, тем самым переводя затвор в исходное незаряженное состояние. Этот метод стирания позволяет осуществлять полное тестирование и коррекцию сложных матриц памяти до корпусования. После корпусования информация всё ещё может быть стёрта рентгеновским излучением, превышающим 5*104рад, дозы, которая легко достигается коммерческими генераторами рентгеновского излучения. Иными словами, чтобы стереть EPROM, вы должны применить источник рентгеновского излучения, а затем поместить чип в духовку при температуре около 600 градусов по Цельсию (для отжига полупроводниковых изменений, вызванных рентгеновскими лучами).»

Во время активного использования dial-up модемов существовали специалисты по модернизации модема USR Business Modem в намного более дорогой USR Courier, помимо небольших схемотехнических изменений сопровождавшейся перепрошивкой EPROM без окна. Собственно процесс стирания был отработан, но держался в тайне, каковой и остался. По всей видимости, использовалось радиоактивное облучение. Упоминаемый прогрев кристалла до температур от 450 до 1410 градусов Цельсия выглядит для готовой микросхемы не иначе, как шутка.

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

Блок: 4/12 | Кол-во символов: 3936
Источник: https://ru.wikipedia.org/wiki/EPROM

Применение

Программируемые через маску ПЗУ при больших партиях выпуска (тысячи штук и более) имеют довольно низкую стоимость производства. Однако, чтобы их сделать, требуется несколько недель времени, так как нужно выполнить сложные работы для рисования маски каждого слоя интегральной схемы. Первоначально предполагалось, что EPROM будет стоить слишком дорого для массового производства и использования, поэтому планировалось ограничиться выпуском только опытных образцов. Вскоре выяснилось, что небольшие объёмы производства EPROM экономически целесообразны, особенно, когда требуется быстрое обновление прошивки.

Некоторые микроконтроллеры ещё до эпохи EEPROM и флэш-памяти использовали встроенную на чипе память EPROM для хранения своей программы. К таким микроконтроллерам относятся некоторые версии Intel 8048, Freescale 68HC11 и версии «С» микроконтроллеров PIC. Подобно чипам EPROM, такие микроконтроллеры перешли на оконную (дорогую) версию, что было полезно для отладки и разработки программ. Вскоре эти чипы стали делать по технологии PROM с непрозрачным корпусом (что несколько снизило стоимость его производства). Освещение матрицы памяти такого чипа светом могло также изменить его поведение непредсказуемым образом, когда производство переходило с изготовления оконного варианта на безоконный.

Блок: 5/12 | Кол-во символов: 1310
Источник: https://ru.wikipedia.org/wiki/EPROM

Arduino EEPROM примеры использования

Для начала рассмотрим запись в EEPROM Arduino числа больше, чем 255, например число 999. При записи в EEPROM число 999 будет разбиваться на множитель (старший байт) и недостающее число (младший байт), занимая при этом уже две ячейки в энергонезависимой памяти (т.е. 999 = 3×256 + 231). Чтобы вывести сохраненное число на монитор порта, его нужно будет «собрать» с помощью функции .

Скетч. Запись в память EEPROM int, float

#include <EEPROM.h>  // импортируем библиотеку    int num = 999;                      // разбиваем число на 2 байта  byte hi  = highByte(num);   // старший байт  byte low = lowByte(num);  // младший байт    void setup() {    Serial.begin(9600);    // запускаем монитор порта       EEPROM.update(1, hi);     // записываем старший байт в ячейку 1     EEPROM.update(2, low); // записываем младший байт в ячейку 2      delay(1000);      byte val1 = EEPROM.read(1);  // считываем 1 байт по адресу ячейки    byte val2 = EEPROM.read(2);  // считываем 1 байт по адресу ячейки      Serial.println("highByte - "+String(val1));  // выводим старший байт на монитор    Serial.println("lowByte  - "+String(val2));  // выводим младший байт на монитор      int NUM = word(hi, low);       // "собираем" число из байтов    Serial.println("int num  - "+String(NUM));    // выводим полученное число  }    void loop() {  }

Пояснения к коду:

  1. для записи данных в ячейку в программе использована функция , которая перезаписывает ячейку только в случае различия сохраняемых данных с данными в ячейке EEPROM Arduino Uno;
  2. основная проблема с сохранением больших чисел (int, float) в память EEPROM заключается в том, чтобы случайно не перезаписать нужную ячейку новой информацией. Для этого нужно учитывать размер сохраняемых данных в ПЗУ, используя функции и .

Скетч. Запись строк в EEPROM (String)

#include <EEPROM.h>  // импортируем библиотеку    int address = 10;  // адрес первой ячейки для записи    long cod = 8904; // разбиваем телефонный номер на две части  long tel = 2768282;  String email = "[email protected]"; // сохраняем в строке адрес почты    long COD; // создаём новые переменные для чистоты эксперимента  long TEL;  String EMAIL;    void setup() {    Serial.begin(9600);  // запускаем монитор порта      EEPROM.put(address, cod);      // сохраняем код телефона в памяти Ардуино    address += sizeof(cod);              // узнаем адрес следующей свободной ячейки    EEPROM.put(address, tel);       // сохраняем номер телефона в памяти Ардуино    address += sizeof(tel);                // узнаем адрес следующей свободной ячейки    EEPROM.put(address, email);  // сохраняем электронную почту в памяти      address = 10;  // адрес первой ячейки для чтения      Serial.print("Phone: ");  // выводим телефонный номер на монитор    Serial.print(EEPROM.get(address, COD));    address += sizeof(COD);    Serial.println(EEPROM.get(address, TEL));    address += sizeof(TEL);      Serial.print("Email: ");  // выводим электронную почту на монитор    Serial.println(EEPROM.get(address, EMAIL));  }    void loop() {  }

Пояснения к коду:

  1. перед сохранением новых данных в памяти, следует узнать размер данных, которые были сохранены, чтобы начать запись в новой ячейке;
  2. удалив из кода строчки для записи данных, вы можете каждый раз при запуске программы считывать все сохраненные данные из ПЗУ Ардуино.
Блок: 5/6 | Кол-во символов: 3359
Источник: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/eeprom-arduino/

Размеры и типы чипов EPROM

Изготавливаются несколько вариантов EPROM, отличающиеся как по физическим размерам, так и по ёмкости памяти. Хотя партии одного типа от разных производителей совместимы по чтению данных, есть небольшие различия в процессе программирования.

Большинство чипов EPROM программисты могут распознать через «режим идентификации», подавая 12V на контакт A9 и считывая два байта данных. Однако, поскольку это не универсально, программное обеспечение также позволяет ручную настройку на производителя и тип устройства микросхемы для обеспечения правильного режима программирования.

Тип EPROM Размер — бит Размер — байт Длина (hex) Последний адрес (hex)
1702, 1702A 2 Кбит 256 100 FF
2704 4 Кбит 512 200 1FF
2708 8 Кбит 1 Кбайт 400 3FF
2716, 27C16 16 Кбит 2 Кбайт 800 7FF
2732, 27C32 32 Кбит 4 Кбайт 1000 FFF
2764, 27C64 64 Кбит 8 Кбайт 2000 1FFF
27128, 27C128 128 Кбит 16 Кбайт 4000 3FFF
27256, 27C256 256 Кбит 32 Кбайт 8000 7FFF
27512, 27C512 512 Кбит 64 Кбайт 10000 FFFF
27C010, 27C100 1 Мбит 128 Кбайт 20000 1FFFF
27C020 2 Мбит 256 Кбайт 40000 3FFFF
27C040, 27C400 4 Мбит 512 Кбайт 80000 7FFFF
27C080 8 Мбит 1 Мбайт 100000 FFFFF
27C160 16 Мбит 2 Мбайт 200000 1FFFFF
27C320 32 Мбит 4 Мбайт 400000 3FFFFF
Блок: 6/12 | Кол-во символов: 1224
Источник: https://ru.wikipedia.org/wiki/EPROM

Скетч. Очистка EEPROM Arduino

Чтобы стереть энергонезависимую память ЕЕПРОМ Ардуино и вернуть ее к заводским настройкам следует перезаписать все ячейки в памяти с числом 255. Для этого можно использовать цикл for или while. Простой пример с программой очистки EEPROM Ардуино приведен ниже. Если у вас остались вопросы по работе с EEPROM памятью на Ардуино, то оставляйте их в комментариях к этой записи.

#include <EEPROM.h>  // импортируем библиотеку  int address;                     // переменная для хранения адреса    void setup() {     // перезаписываем в цикле все адреса в ЕЕПРОМ памяти     while (address < EEPROM.length()) {        EEPROM.update(address, 255);        address++;     }  }  void loop() {  }

Пояснения к коду:

  1. все ячейки, если они отличаются от 255, автоматически перезапишутся;
  2. функция , как и перезаписывает ячейку лишь когда данные отличаются, экономя ресурс памяти еепром Ардуино.
Блок: 6/6 | Кол-во символов: 918
Источник: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/eeprom-arduino/

Галерея

  • Матрица транзистров EPROM крупным планом.

Блок: 7/12 | Кол-во символов: 107
Источник: https://ru.wikipedia.org/wiki/EPROM

Сравнение EPROM, EEPROM и Flash

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

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

Большинство устройств с Flash памятью представляет собой гибрид программирования с помощью инжекции горячих носителей и стирания с помощью автоэлектронной эмиссии.

Тип Способ записи информации Продолжительность/Режим Способ стирания информации Продолжительность/Режим
EEPROM Автоэлектронная эмиссия 0,1…5 ms, побайтно Автоэлектронная эмиссия 0,1…5 ms, побайтно
NOR Flash memory Инжекция горячих носителей 0,01…1 ms Автоэлектронная эмиссия 0,01…1 ms, поблочно
EPROM Инжекция горячих носителей 3…50 ms, побайтно УФ-излучение 5…30 ms, весь чип
Блок: 7/11 | Кол-во символов: 1112
Источник: https://ru.bmstu.wiki/EEPROM_(Electrically_Erasable_Programmable_Read-Only_Memory)

Интересные факты

  • Подавляющее большинство микросхем имеют маркировку на своём полупроводниковом чипе: название микросхемы, иногда дату копирайта, выполненные металлическими дорожками по той же технологии, по которой выполняется топология микросхемы. У большинства чипов после заливки в пластиковый корпус прочитать маркировку становится нельзя, но микросхемы EPROM относятся к тому редкому исключению, у которых это возможно. Поскольку для чтения имени чипа нужен мощный оптический микроскоп, обычно дающий перевернутое изображение, обычной практикой бывает нанесение имени чипа в перевернутом, «зеркальном» варианте, тогда в микроскоп надпись читается в нормальном виде.
  • Первые советские микросхемы EPROM на практике имели ресурс всего 2-3 стирания и были очень чувствительны к передозировке экспозиции.
Блок: 8/12 | Кол-во символов: 803
Источник: https://ru.wikipedia.org/wiki/EPROM

Список производителей EEPROM

  • Mikron Sitronics
  • Aplus Flash Technology
  • Mitsubishi
  • Atmel
  • Hitachi, Ltd.|Hitachi
  • Infineon
  • Maxwell Technologies
  • Microchip Technology
  • NXP Semiconductors
  • Renesas Technology
  • ROHM Electronics
  • Samsung Electronics
  • SmarfTech
  • STMicroelectronics
  • Seiko Instruments
  • Winbond
  • Catalyst Semiconductor Inc
Блок: 8/11 | Кол-во символов: 332
Источник: https://ru.bmstu.wiki/EEPROM_(Electrically_Erasable_Programmable_Read-Only_Memory)
Кол-во блоков: 21 | Общее кол-во символов: 19508
Количество использованных доноров: 3
Информация по каждому донору:

  1. https://ru.bmstu.wiki/EEPROM_(Electrically_Erasable_Programmable_Read-Only_Memory): использовано 4 блоков из 11, кол-во символов 2694 (14%)
  2. https://ru.wikipedia.org/wiki/EPROM: использовано 6 блоков из 12, кол-во символов 10054 (52%)
  3. https://xn--18-6kcdusowgbt1a4b.xn--p1ai/eeprom-arduino/: использовано 5 блоков из 6, кол-во символов 6760 (35%)


Поделитесь в соц.сетях:

Оцените статью:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Добавить комментарий