Теория i2c, eeprom от atmel
Содержание:
- От ROM к EEPROM
- Arduino EEPROM примеры использования
- Принцип действия
- Применение
- Емкость EEPROM
- Скетч записи и чтения данных из EEPROM
- Пример работы с EEPROM
- Список производителей EEPROM
- Библиотека
- Arduino as ISP. Прошивка загрузчика в Ардуино.
- Описание памяти EEPROM
- Располагаем файл «MDR32F9Qx_eeprom.c» в ОЗУ
- Интересные факты
- Интерфейс
- Что внутри чипа?
От ROM к EEPROM
ROM (ПЗУ, Постоянное запоминающее устройство) расшифровывается как Read-Only Memory (только для чтения) и использовалась в ранних микроконтроллерах для обычного хранения операционной системы компьютера.
Фактически, то, что использовалось, было PROM (программируемая память только для чтения) и программировалась или «прожигалась» внешне в специальном программаторе с высоким напряжением. Однажды запрограммированная, она становится неизменной и нужно начинать всё с самого начала.
Далее появилась EPROM (Erasable Programmable Read-Only Memory — Стираемая программируемая память, доступная только для чтения). Она имеет маленькое стеклянное окошко и может быть стерта под сильным ультрафиолетовым излучением.
Затем может снова воспользоваться программатором и повторить так называемый «прожиг и падение» (англ. — «burn and crash»). Далее появилась EEPROM или электрически стираемая программируемая память, доступная только для чтения.
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() { }
Пояснения к коду:
- для записи данных в ячейку в программе использована функция , которая перезаписывает ячейку только в случае различия сохраняемых данных с данными в ячейке EEPROM Arduino Uno;
- основная проблема с сохранением больших чисел (int, float) в память EEPROM заключается в том, чтобы случайно не перезаписать нужную ячейку новой информацией. Для этого нужно учитывать размер сохраняемых данных в ПЗУ, используя функции и .
Скетч. Запись строк в EEPROM (String)
#include <EEPROM.h> // импортируем библиотеку int address = 10; // адрес первой ячейки для записи long cod = 8904; // разбиваем телефонный номер на две части long tel = 2768282; String email = "ROBOTEHNIKA18@GMAIL.COM"; // сохраняем в строке адрес почты 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() { }
Пояснения к коду:
- перед сохранением новых данных в памяти, следует узнать размер данных, которые были сохранены, чтобы начать запись в новой ячейке;
- удалив из кода строчки для записи данных, вы можете каждый раз при запуске программы считывать все сохраненные данные из ПЗУ Ардуино.
Принцип действия
Каждый бит памяти EPROM состоит из одного полевого транзистора. Каждый полевой транзистор состоит из канала в полупроводниковой подложке устройства. Контакты истока и стока подходят к зонам в конце канала. Изолирующий слой оксида выращивается поверх канала, затем наносится проводящий управляющий электрод (кремний или алюминий), и затем ещё толстый слой оксида осаждается на управляющем электроде. Плавающий затвор не имеет связи с другими частями интегральной схемы и полностью изолирован от окружающих слоёв оксида. На затвор наносится управляющий электрод, который затем покрывается оксидом.
Для извлечения данных из EPROM адрес, представляющий значение нужного контакта EPROM, декодируется и используется для подключения одного слова памяти (как правило, 8-битного байта) к усилителю выходного буфера. Каждый бит этого слова имеет значение 1 или 0, в зависимости от того, был включён или выключен транзистор, был он в проводящем состоянии или не проводящем.
Переключение состояния полевого транзистора управляется напряжением на управляющем затворе транзистора. Наличие напряжения на этом затворе создаёт проводящий канал в транзисторе, переключая его в состояние «включено». По сути накопленный заряд на плавающем затворе позволяет пороговому напряжению транзистора программировать его состояние.
Для запоминания данных требуется выбрать нужный адрес и подать более высокое напряжение на транзисторы. Это создаёт лавинный разряд электронов, которые получают достаточно энергии, чтобы пройти через изолирующий слой окисла и аккумулироваться на управляющем электроде . Когда высокое напряжение снимается, электроны оказываются запертыми на электроде. Из-за высокой изолирующей величины оксида кремния, окружающего затвор, накопленный заряд не может утечь, и данные в нём хранятся в течение десятилетий.
В отличие от памяти EEPROM, процесс программирования в EPROM не является электрически обратимым. Чтобы стереть данные, хранящиеся в матрице транзисторов, на неё направляется ультрафиолетовый свет. Фотоны ультрафиолетового света рассеиваясь на избыточных электронах, придают им энергию, что позволяет заряду, хранящемуся на плавающем затворе, рассеяться. Так как вся матрица памяти подвергается обработке, то все данные стираются одновременно. Процесс занимает несколько минут для УФ-ламп небольших размеров. Солнечный свет будет стирать чип в течение нескольких недель, а комнатная люминесцентная лампа — в течение нескольких лет. Вообще, для стирания чипы EPROM должны быть извлечены из оборудования, так как практически невозможно вставить в УФ-лампу какой-либо блок и стереть данные только с части чипов..
Применение
Программируемые через маску ПЗУ при больших партиях выпуска (тысячи штук и более) имеют довольно низкую стоимость производства. Однако, чтобы их сделать, требуется несколько недель времени, так как нужно выполнить сложные работы для рисования маски каждого слоя интегральной схемы. Первоначально предполагалось, что EPROM будет стоить слишком дорого для массового производства и использования, поэтому планировалось ограничиться выпуском только опытных образцов. Вскоре выяснилось, что небольшие объёмы производства EPROM экономически целесообразны, особенно, когда требуется быстрое обновление прошивки.
Некоторые микроконтроллеры ещё до эпохи EEPROM и флэш-памяти использовали встроенную на чипе память EPROM для хранения своей программы. К таким микроконтроллерам относятся некоторые версии Intel 8048, Freescale 68HC11 и версии «С» микроконтроллеров PIC. Подобно чипам EPROM, такие микроконтроллеры перешли на оконную (дорогую) версию, что было полезно для отладки и разработки программ. Вскоре эти чипы стали делать по технологии PROM с непрозрачным корпусом (что несколько снизило стоимость его производства). Освещение матрицы памяти такого чипа светом могло также изменить его поведение непредсказуемым образом, когда производство переходило с изготовления оконного варианта на безоконный..
Емкость EEPROM
С созданием EEPROM, ROM (ПЗУ) больше не является устройством, доступным только для чтения, а является чем-то, на что вы можете записать снова, подобно RAM (Оперативное запоминающее устройство или Random Access Memory, дословно — случайный доступ к памяти).
EEPROM значительно медленнее оперативной памяти и имеет ограничение по количеству записей (обычно 1 миллион). Но это не должно стать проблемой, так как существует 2 версии EEPROM.
Первая версия — это версия, в которой можно параллельно записывать данные в байтовом формате, а вторая — последовательная с использованием I2C, в которой запись выполняется последовательно. Гарантированный срок хранения данных ограничен, как правило, 10 годами.
Далее появилась флеш-память, способная хранить гораздо больше данных в том же объеме. В то время как EEPROM может записываться байт за байтом или побайтово, флеш-память записывается блоками или большими фрагментами, обычно по 512 байт за раз
Обратите внимание, что количество раз, которое вы можете записать, обычно составляет 100 000, так что вам придется с этим справляться
Размер EEPROM-памяти может ввести в заблуждение, так как обычно она задается в битах, а не в байтах. 256K EEPROM может содержать 256K бит данных или всего 32K байт, около 16 страниц простого текста. Кроме того, она работает как энергонезависимая память, что означает, что она может сохранять свою память даже после повторного включения питания (в отличие от энергозависимой, которая теряет свое содержимое после выключения питания).
Скетч записи и чтения данных из EEPROM
Для работы EEPROM в arduino IDE уже есть встроенная библиотека EEPROM.h, ее и будем использовать. Вся память разбита на ячейки по 1 байту, соответственно в каждую ячейку можно записать не больше одного байта, если хранить целые числа, то можно записывать значения от 0 до 255 без сложностей
Этим мы и займемся в скетче – используем одну ячейку памяти и сначала сохраним в нее число от 0 до 4, а потом прочитаем содержимое.
Если вам необходимо хранить значения, превышающие размер в 1 байт, то их придется разбивать по байтам и записывать в разные ячейки по частям.Обратите внимание: по умолчанию в пустой EEPROM в каждой ячейке хранятся значения 255. Но делать проверку на пустоту с помощью сравнения с числом 255 не стоит
Поскольку не всегда можно полагаться на заводские настройки. И перед использованием лучше прогнать все ячейки в цикле и записать в них свои значения для обнуления, чтобы быть полностью уверенным в содержимом.
Далее остается только привести скетч с подробными комментариями:
#include <EEPROM.h> // библиотека для работы с EEPROM int pin_rezistor = A0; int value = 0; int count_leds = 0; // пин светодиода int ledPins = {4, 5, 6, 7,8}; boolean editOn = false; // состояние светодиода // пин кнопки int btn_1 = 2; boolean lastBtn_1 = false; // предыдущее состояние кнопки boolean currentBtn_1 = false; // текущее состояние кнопки void setup() { // режимы работы пинов pinMode(pin_rezistor, INPUT); pinMode (btn_1, INPUT); for(int i=0; i<=4; i++){ pinMode (ledPins, OUTPUT); } } void loop() { if(editOn){ value = analogRead(pin_rezistor); count_leds = map(value, 0, 1000, 0, 4); }else{ count_leds = EEPROM_int_read(0); } // получение состояния кнопки currentBtn_1 = isBtnStatus(lastBtn_1); // если кнопка была нажата 5 миллисекунд и более if (lastBtn_1 == false && currentBtn_1 == true) { // меняем состояние светодиода editOn = !editOn; // если выключился режим настройки if(!editOn){ EEPROM.write(0, count_leds); } } // сохраняем состояние кнопки lastBtn_1 = currentBtn_1; // все гасим for(int i=0; i<=4; i++){ digitalWrite(ledPins, LOW); } // включаем нужное количество for(int i=0; i<=count_leds; i++){ digitalWrite(ledPins, HIGH); } delay(50); } // функция для определения состояния кнопки boolean isBtnStatus(boolean last) { // считываем состояние кнопки boolean current = digitalRead(btn_1); // сравниваем текущее состояние кнопки со старым if (last != current) { // ждем 5 миллисекунд delay(5); // считываем состояние кнопки еще раз current = digitalRead(btn_1); } // возвращаем состояние кнопки return current; } // чтение int EEPROM_int_read(int addr) { byte raw; for(byte i = 0; i < 2; i++) raw = EEPROM.read(addr+i); int &num = (int&)raw; return num; } // запись void EEPROM_int_write(int addr, int num) { byte raw; (int&)raw = num; for(byte i = 0; i < 2; i++) EEPROM.write(addr+i, raw); }
Пример работы с EEPROM
Работу с EERPOM рассмотрим на примере от производителя — Sector_Operations. После установки PACK от Миландр, этот пример расположен по такому пути:
C:\Keil_v5\ARM\PACK\Keil\MDR1986BExx\1.4\Examples\MDR1986VE9x\MDR32F9Q1_EVAL\EEPROM\Sector_Operations
Создаем новый проект, как описано в «Создание проекта», только процессор выбираем 1986ВЕ92. При создании подключаем разделы библиотеки — Startup_MDR1986DT9x, EEPROM, PORT, RST_CLK. В проект добавляем файл main.c из указанного выше пути. В статье «Создание проекта» мы создавали новый файл main.c, здесь же проще кликнуть правой клавишей мыши на папке user и выбрать «Add Existing File …» . Компилируем, ошибок быть не должно.
Загружаем проект в кристалл и выполняем следующие действия:
- Включаем режим отладки
- Ставим точку останова на первой функции обращения к EEPROM.
- Запускаем F5 или кнопкой в тулбаре
- Останавливаемся перед входом в выбранную функцию и видим, что код находится в адресах Flash памяти.
Теперь заходим внутрь функции EEPROM_ErasePage,
- Нажимаем F11 или используем кнопку в тулбаре.
- Видим, что указатель команд находится в начале функции.
- Наблюдаем, что функция находится в адресах Flash памяти.
Получается, что пример, запущенный по умолчанию, не располагает функции работы с EEPROM в области памяти ОЗУ. Такой код при исполнении будет сваливаться в HardFault. Если осуществить дальнейший запуск программы, то будет видно, что исполнение никогда не выйдет из функции EEPROM_ErasePage.
Список производителей EEPROM
Список производителей EPROM смотрите на сайте Yahoo и сходите в
economy->company->Hardware->Peripherals->Device programmers.
Yahoo URL для EPROMs таков http://dir.yahoo.com/Business_and_Economy/Companies/Computers/Hardware/Peripherals/Device_Programmers/
-
Advanced Research Technology B.V — разработка, производство и продажа оборудования программирования; разработка аппаратуры и программ.
-
Elnec, Presov — производители программаторов, эмуляторов и симуляторов.
-
Advin Systems Inc. — устройства программирования для ПК,
которые поддерживают последние типы корпусов и технологии. -
Andromeda Research Labs — производитель портативных программаторов и систем программирования.
-
B and C Microsystems, Inc — предлагает тесты и оборудования для дублирования/программирования PCMCIA (PC) Card, ISA/PCI карт, SIMM, устройств памяти (включая FLASH), PLD.
-
BP Microsystems — устройства программирования.
-
Bytek — разработка, дизайн, производство
и продажа микропроцессорных, модульных электронных систем используемых для программирования полупроводниковых устройств. Список производимой продукции включает ChipBurner. -
Concentrated Programming Ltd — предлагает полный диапазон решений для программирования устройств.
-
Dataman Programmmers Ltd. — производство наладонных EPROM программатора/эмулятора. Также продает программаторы для ПК, и Gang-Pro программаторы.
-
General Device Instruments — программаторы IC устройств. Универсальный и Gang программаторы для Pld, Flash, микроконтроллеров, Prom, EEprom, Памяти, Epld, Mach и многих других ic устройств.
-
HI-LO System Research Co., Ltd. — производство универсальных и gang программаторов.
-
ICE Technology — EPROM и универсальные программаторы с поддержкой памяти, микроконтроллеров, и программируемых логических устройств.
-
Iceprom — стираемая программируемая ROM.
-
International Microsystems Inc — Высокоскоростной gang программатор. (PROM, FLASH, Микроконтроллер, карты памяти PCMCIA).
-
JED Microprocessors Pty. Ltd. — вставляется в порт принтера ПК, и способен программировать 28-контактные или 32-контактные микросхемы EPROM и FLASH.
-
Logical Devices, Inc — программирование устройств PLD, FPGA, PROM, микроконтроллеров. Производит CUPL компилятор для программируемой логики и программаторы ALLPRO и Chipmaster.
-
MCL Systems — новый метод не только программирования, но и разработки новой аппаратуры с помощью Integrated Controller Unit. И вам не нужно быть профессионалом.
-
MQP Electronics — производитель универсальных программаторов, gang программаторов, программ, и пакетов преобразования. Высокая пропускная способность и надежность.
-
Needham’s Electronics — производитель программаторов.
-
NP Programming Services — реализует программирование памяти и компонентов логики.
-
Program Automation, Inc. — независимая кампания, специализирующаяся на программировании высокоемких PROM, включая flash I/C.
-
Stag Programmers Inc — производитель программаторов prom и логики, производство оборудования и ультрафиолетовых устройств стирания.
-
Sunrise Electronics — универсальные программаторы, gang и in-circuit программаторы с пожизненной поддержкой.
-
System General Co. — программаторы, устройства записи EPROM и IC тестеры
-
Tribal Microsystems — универсальный и gang программаторы, 8051 и EPROM эмуляторы, тестовые сокеты, сокеты для создания и сокеты для производства.
Библиотека
Работа с памятью EEPROM осуществляется с помощью библиотеки, которая была специально создана для Ардуино. Главными являются способность к записи и чтению данных. Библиотека активируется командой #include EEPROM.h.
Далее используются простые команды:
- для записи – EEPROM.write(address, data);
- для чтения – EEPROM.read(address).
В данных скетчах: address – аргумент с данными ячейки, куда вносятся данные второго аргумента data; при считывании используется один аргумент address, который показывает, откуда следует читать информацию.
Функция | Назначение |
---|---|
read(address) | считывает 1 байт из EEPROM; address – адрес, откуда считываются данные (ячейка, начиная с 0); |
write(address, value) | записывает в память значение value (1 байт, число от 0 до 255) по адресу address; |
update(address, value) | заменяет значение value по адресу address, если её старое содержимое отличается от нового; |
get(address, data) | считывает данные data указанного типа из памяти по адресу address; |
put(address, data) | записывает данные data указанного типа в память по адресу address; |
EEPROM | позволяет использовать идентификатор «EEPROM» как массив, чтобы записывать данные в память и считывать их из памяти. |
Arduino as ISP. Прошивка загрузчика в Ардуино.
Плата Ардуино | MOSI | MISO | SCK | Уровень |
---|---|---|---|---|
Uno, Duemilanove | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 5В |
Nano | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 5В |
Pro Mini | 11 | 12 | 13 | 3.3В или 5В |
Mega1280, Mega2560 | 51 или ICSP-4 | 50 или ICSP-1 | 52 или ICSP-3 | 5В |
Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | 5В |
Due | ICSP-4 | ICSP-1 | ICSP-3 | 3.3В |
Zero | ICSP-4 | ICSP-1 | ICSP-3 | 3.3В |
101 | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 3.3В |
Подключение Uno в качестве программатора к плате Nano через ICSP |
- В меню Инструменты > Плата выбираем вариант, соответствующий нашей целевой плате.
- В меню Инструменты > Программатор выбираем Arduino as ISP.
Инструменты > Записать загрузчикследующей публикации
- Запускаем Arduino IDE, открываем из примеров скетч ArduinoISP и загружаем его в плату Ардуино, которую будем использовать как программатор.
- Подключаем к Ардуино-программатору целевую плату по приведенной схеме.
- Меняем плату в Arduino IDE на целевую.
- Выбираем в IDE программатор Arduino as ISP.
- Записываем загрузчик в целевую плату командой из меню IDE.
Описание памяти EEPROM
Arduino – это целое семейство различных устройств для создания электронных проектов. Микроконтроллеры очень удобны для использования, доступны к освоению даже новичку. Каждый микроконтроллер состоит из платы, программ для обеспечения работы, памяти. В этой статье будет рассмотрена энергонезависимая память, используемая в Arduino.
Ардуино предоставляет своим пользователям три типа встроенной памяти устройств: стационарное ОЗУ (оперативно-запоминающее устройство или SRAM — static random access memory) – необходимо для записи и хранения данных в процессе использования; флеш-карты – для сохранения уже записанных схем; EEPROM – для хранения и последующего использования данных.
По теме: Скачать библиотеку EEPROM
На ОЗУ все данные стираются, как только происходит перезагрузка устройства либо отключается питание. Вторые две сохраняют всю информацию до перезаписи и позволяют извлекать ее при необходимости. Флеш-накопители достаточно распространены в настоящее время. Подробнее стоит рассмотреть память EEPROM.
Аббревиатура расшифровывается, как Electrically Erasable Programmable Read-Only Memory и в переводе на русский дословно означает – электрически стираемая программируемая память только для чтения. Производитель гарантирует сохранность информации на несколько десятилетий вперед после последнего отключения питания (обычно приводят срок в 20 лет, зависит от скорости снижения заряда устройства).
При этом нужно знать, что возможность перезаписи на устройство ограничена и составляет не более 100 000 раз. Поэтому рекомендуют аккуратно и внимательно относиться к вносимым данным и не допускать перезаписи лишний раз.
Объем памяти, в сравнении с современными носителями, очень небольшой и разный для различных микроконтроллеров. Например, для:
- ATmega328 – 1кБ
- ATmega168 и ATmega8 – 512 байт,
- ATmega2560 и ATmega1280 – 4 кБ.
Так устроено потому, что каждый микроконтроллер предназначен для определенного объема задач, имеет разное количество выводов для подключения, соответственно, необходим разный объем памяти. При этом такого количества достаточно для обычно создаваемых проектов.
Для записи на EEPROM требуется значительное количество времени – около 3 мс. Если в момент записи отключается питание, данные не сохраняются вовсе либо могут быть записаны ошибочно. Требуется всегда дополнительно проверять внесенную информацию, чтобы избежать сбоев во время работы. Считывание данных происходит гораздо быстрее, ресурс памяти от этого не снижается.
Располагаем файл «MDR32F9Qx_eeprom.c» в ОЗУ
Давайте расположим весь библиотечный файл работы с EEPROM в ОЗУ. Для этого при клике правой клавишей мыши на файле выбираем «Options for Component …».
В открывшемся окне в закладке Memory выбираем расположение Code в доступных областях памяти.
Доступные области памяти определены в окне Options проекта, здесь нам надо только выбрать область ОЗУ — IRAM1 (Internal RAM1).
При размещении исполняемого кода в ОЗУ для МК 1986ВЕ1Т необходимо выбирать память IRAM2, адреса которой начинаются с 0x20100000. Только к этой памяти имеет доступ шина AHB_Lite, поэтому код из этой памяти может исполняться. Этот же диапазон следует выбирать для данных при работе с DMA.
ВАЖНО также выставить опцию — «Use Memory Layout from Target Dialog», в закладке Linker опций проекта. Без этого код файла MDR32F9Qx_eeprom.c не окажется в диапазонах памяти ОЗУ.
Компилируем проект, загружаем в кристалл и в режиме отладки снова идем внутрь функции EEPROM_ErasePage. Теперь в окне ассемблера видно, что наша функция находится в адресах ОЗУ.
Если теперь запустить проект, то он отработает успешно.
Интересные факты
Подавляющее большинство микросхем имеют маркировку на своем полупроводниковом чипе: название микросхемы, иногда дату копирайта, выполненные металлическими дорожками по той же технологии, по которой выполняется топология микросхемы. У большинства чипов после заливки в пластиковый корпус прочитать маркировку становится нельзя, но микросхемы EPROM относятся к тому редкому исключению, у которых это возможно. Поскольку для чтения имени чипа нужен мощный оптический микроскоп, обычно дающий перевернутое изображение, обычной практикой бывает нанесение имени чипа в перевернутом, «зеркальном» варианте, тогда в микроскоп надпись читается в нормальном виде.
Первые советские микросхемы EPROM на практике имели ресурс всего 2-3 стирания и были очень чувствительны к передозировке экспозиции.
Интерфейс
Устройства EEPROM используют последовательный или параллельный интерфейс для ввода/вывода информации.
Устройства с последовательным интерфейсом
Общий интерфейс может быть в виде шин: SPI и I²C, Microwire, UNI/O и 1-Wire.
Типичный EEPROM протокол содержит 3 фазы: Код операции, фазы адреса и фазы данных. Код операции — обычно первые 8 бит, далее следует фаза адреса в 8-24 бита (зависит от устройства) и в конце запись или чтение информации.
Каждое устройство EEPROM, как правило, имеет свой код операций для выполнения различных функций.
Функции для SPI EEPROM могут быть:
- Write Enable (WRENAL)
- Write Disable (WRDI)
- Read Status Register (RDSR)
- Write Status Register (WRSR)
- Read Data (READ)
- Write Data (WRITE)
EEPROM на печатной плате карты памяти ПК.
Ряд других операций, которые поддерживают некоторые EEPROM устройства:
- Program
- Sector Erase
- Chip Erase commands
Устройства с параллельным интерфейсом
Параллельные устройства EEPROM обычно содержат в себе 8-битную шину данных и адресную шину достаточного объёма для покрытия всей памяти. Большинство таких устройств имеют защиту записи на шинах и возможность выбора чипа. Некоторые микроконтроллеры содержат в себе такие интегрированные EEPROM.
Операции на таких устройствах проще и быстрее в сравнении с последовательным интерфейсом EEPROM, но за счет того, что для его функционирования требуется большое количество точек вывода (28pin и больше), параллельная память EEPROM теряет популярность уступая место памяти типа Flash и последовательной EEPROM.
Другие устройства
Память EEPROM используется для функционирования и в других видах продуктов. Продукты, такие как часы реального времени, цифровые потенциометры, цифровые датчики температуры, в частности, могут иметь небольшое количество EEPROM для хранения информации о калибровке или другие данные, которые должны быть доступны в случае потери питания. Он также был использован на игровых картриджах, чтобы сохранить игровой прогресс и настройки, до использования внешней и внутренней флэш-памяти.
Что внутри чипа?
Обычно каждый бит памяти состоит из двух полевых транзисторов или FET (field-effect transistors). Один из них является FET памяти, который имеет плавающий затвор, который может быть заряжен или разряжен. Второй FET — это затвор, позволяющий записывать и считывать первый бит.
Различные типы EEPROM
Зачем добавлять внешнюю EEPROM, а не просто использовать SD-карту? EEPROM намного быстрее для чтения и записи, чем SD-карта. Она имеет больше места (32 КБ по сравнению с 1 КБ в UNO) и более устойчива, чем SD-карта, которая может выпасть из держателя из-за вибрации.
Кроме того, протокол I2C упрощает использование по сравнению с SPI, используемым на SD-картах. 24LC256 поставляется в разных вариациях. Выше на рисунке показан пакет DIP IC, коммутационная плата, которая включает в себя подтягивающие резисторы, и еще один необычный со встроенными селекторами адресов.