Работа с энергонезависимой памятью EEPROM на Ардуино.
Здравствуйте, уважаемые читатели! Продолжаем знакомиться с фундаментальными вещами, без объяснения которых не возможно проектирование самодельных устройств на основе микроконтроллеров.
В данной статье речь пойдет об энергонезависимой памяти EEPROM (электрически стираемое программируемое постоянное запоминающее устройство). Как видно из названия EEPROM является разновидностью ПЗУ , важной особенностью которой является возможность перезаписывать хранимые в памяти значения (в отличие от FLASH-памяти) во время выполнения скетча и сохранять после отключения питания.
Энергонезависимая память EEPROM прекрасно подходит для хранения настроек работы устройства , которые были выбраны пользователем во время его работы и должны быть сохранены при отключении питания. Например, пользователь может задать определенную температуру, при которой микроконтроллер должен включить нагревательный элемент. Или определенную влажность почвы, при которой будет включен автополив. Определенную освещенность, при которой будет включено освещение и т.д. Так же в данной памяти можно логировать данные , получаемые от внешних датчиков и возникающие в процессе работы ошибки для последующей отладки.
Микросхемы памяти FLASH,DRAM,SRAM,EEPROM,EPROM и PROM.В чем их отличия.Зачем окошко на микросхеме
Следует отметить, что запись одного байта в EEPROM занимает 3.3 миллисекунды. А скорость чтения менее 1 микросекунды. EEPROM память рассчитана на 100,000 циклов записи/удаления ( https://www.arduino.cc/en/Reference/EEPROMWrite ).
В размещенной ниже таблице можно посмотреть сравнение различных типов памяти у микроконтроллеров серии ATtiny и микроконтроллера ATmega328 (основы Arduino UNO).
Сравнительная таблица объема памяти у различных микроконтроллеров
Как видно из таблицы, размер EEPROM либо равен размеру памяти SRAM (оперативной памяти), либо даже меньше неё. И существенно меньше размера FLASH-памяти (памяти для хранения кода программы).
Работа с памятью EEPROM в среде Arduino UNO отличается от работы с памятью SRAM. При работе с оперативной памятью нам не нужно заботиться, где именно располагается значение переменной, к которой мы обращаемся. Т.к. на этапе компиляции программы под каждую переменную, в зависимости от ее размера, выделяется блок памяти, где и хранится значение переменной. Мы же извлекаем это значение или перезаписываем его, обращаясь к переменной по имени.
При работе с памятью EEPROM мы должны указывать непосредственно адрес байта, в котором храниться переменная . Учитывая, что переменные bool, char, byte – занимают 1 байт, переменные int, word — 2 байта, а переменные long, float – 4 байта.
Т.е. в память EEPROM ATtiny13 можно записать 64 значения переменной типа byte, 32 значения переменной типа int и 16 значений переменной типа long. При этом в качестве адреса ячейки памяти при записи и чтении мы указываем номер первого байта переменной.
Для работы с памятью EEPROM в среде Arduino IDE служит специальная библиотека EEPROM.h . В её примерах есть несколько скетчей, показывающих как работать с основными функциями библиотеки.
Понятие SRAM, DRAM, ROM, PROM, EPROM, EEPROM, …
Основные функции библиотеки EEPROM.h.
EEPROM.length () — возвращает размер памяти EEPROM в байтах.
EEPROM.write (address, value) – записывает значение value величиной 1 байт (0-255) по адресу address (от 0 до EEPROM.length()).
EEPROM.read(address) – читает и возвращает байт данных, размещенной по адресу address.
EEPROM.update(address, value) – обновляет байт памяти (записывает новое значение), если новое значение отличается от текущего. Этот вариант записи значения переменной предпочтительнее, т.к. продлевает срок службы памяти, уменьшая число перезаписей.
EEPROM.put(address, data) – автоматически вычисляет размер и записывает данные любого типа по адресу address .
С помощью данной функции можно размещать в памяти переменные разных размеров.
Например, можно последовательно записывать в память переменные разной длины:
int address = 0;
float val1 = 123.456f;
byte val2 = 64;
char name[10] = «Arduino»;
не забывая вычислять размер переменной в байтах и сдвигать начальный байт записи на данный размер:
EEPROM.put(address, val1);
address += sizeof(val1); //+4
EEPROM.put(address, val2);
address += sizeof(val2); //+1
EEPROM.put(address, name);
address += sizeof(name); //+10
Так же можно объединить значения переменных в массив или сами переменные в структуры и записывать с помощью функции EEPROM.put() массив или структуру целиком.
EEPROM.get(address, data) – считывает данные по адресу address и заносит их в указанную переменную data .
Естественно, что тип и размер данных, записанных с помощью функции EEPROM.put(), должен совпадать с типом и размером данных, читаемых функцией EEPROM.get(). В примерах библиотеки есть скетчи, иллюстрирующие работу этих функций.
Еще в библиотеке есть оператор EEPROM[] , который позволяет работать с памятью EEPROM как с массивом байтов.
byte val = EEPROM[0]; — т.е., получить значение из нулевой ячейки памяти EEPROM
val++; — добавить к полученному значению единицу
EEPROM[0] = val; — и записать новое значение в нулевую ячейку памяти EEPROM
В следующей статье, я расскажу, как увеличить объем памяти EEPROM до 64 КБ . Это будет особенно актуально для микроконтроллеров с малым объемом всех типов памяти, таких как ATtiny .
За счет того, что скорость чтения данных из памяти EEPROM очень велика, мы можем использовать внешнюю память EEPROM как дополнительную оперативную память, либо хранить в ней достаточно объемные массивы данных. Например, шрифты для работы с LED-матицами и LCD-дисплеями. В статье » Создание анимации для LED матрицы 16×16 адресных светодиодов «, мы хранили массив изображения с помощью ключевого слова PROGMEM во FLASH-памяти (из-за нехватки оперативной памяти). Подключив внешнюю EEPROM память, изображения и шрифты можно будет хранить во внешней памяти , оставив FLASH-память исключительно для того, для чего она и предназначена, т.е. для хранения прошивки микроконтроллера.
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- Подключение внешней памяти EEPROM к Ардуино.
- Самодельный USB ключ на основе Digispark ATtiny85.
Источник: dzen.ru
Организация памяти микроконтроллера
Большинство современных микроконтроллеров имеют Гарвардскую архитектуру и содержат 3 вида памяти:
- память программ FLASH;
- оперативная память (ОЗУ) SRAM (Static RAM);
- энергонезависимая память данных EEPROM.
Адресные пространства указанных видов памяти, как правило, разделены. Способы адресации и доступа к этим областям памяти также различны. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно увеличивает производительность. Каждая из областей памяти данных (SRAM и EEPROM) также расположена в своем адресном пространстве.
Память программ
Память программ представляет собой электрически стираемое ППЗУ (FLASH) и может поддерживать команды с разрядностью больше 8 бит. В некоторых микроконтроллерах память программ разделена на 2 секции:
- секцию загрузчика (Boot Program);
- секцию прикладных программ (Application Program).
Память программ чаще всего является электрически перепрограммируемой, количество циклов перезаписи превышает 10 тысяч.
Большинство микроконтроллеров поддерживают внутрисхемное программирование , т. е. загрузку программы в микроконтроллер можно осуществлять после монтажа на плату посредством специального разъема программирования.
Для адресации памяти программ используется счетчик команд (Program Counter – PC).
В памяти программ также находится вектор сброса — в момент подачи питания микроконтроллер начинает выполнение программы с этого адреса, и здесь размещается команда перехода к началу исполняемой программы. Кроме того, память программ содержит таблицу векторов прерываний. При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по данным адресам располагаются команды перехода к подпрограммам обработки прерываний.
Положение вектора сброса и таблицы векторов прерываний может быть перенесено из секции прикладных программ в секцию загрузчика.
В некоторых случаях память программ может использоваться не только для хранения кода программы, но и для хранения различных констант.
Оперативная память
Оперативная память, как правило, содержит 3 области:
- регистры общего назначения;
- служебные регистры;
- память для хранения данных.
Регистры общего назначения (РОН) находятся в непосредственной близости к АЛУ. Однако в микроконтроллерах некоторых фирм (в частности, PIC фирмы Microchip) имеется только один рабочий регистр, играющий роль одного из операндов в командах.
Применение набора регистров общего назначения в сочетании с конвейерной обработкой позволяет АЛУ выполнять одну операцию (извлечение операндов из набора регистров, выполнение команды и запись результата обратно в регистр) за один такт.
Служебные регистры имеют свои имя, адрес и назначение. Они предназначены для конфигурации и обслуживания периферийных узлов микроконтроллера. Краткая характеристика служебных регистров должна быть приведена в руководстве по использованию микроконтроллера (Data Sheet).
Среди служебных регистров есть, как правило, один регистр, используемый наиболее часто в процессе выполнения программ. Это регистр состояния. Он содержит набор флагов, показывающих текущее состояние микроконтроллера.
Большинство флагов автоматически устанавливаются в «1» или сбрасываются в «0» при наступлении определенных событий (в соответствии с результатом выполнения команд). Все биты этого регистра доступны как для чтения, так и для записи. Эта информация анализируется при выполнении условных переходов. При возникновении прерываний содержимое регистра состояния необходимо сохранять программно (чаще всего это является «заботой» компилятора).
Остальная часть оперативной памяти предназначена для хранения пользовательских данных.
Энергонезависимая память данных
Энергонезависимая память данных (EEPROM) организована таким образом, что содержимое каждого байта отдельно может быть считано или записано. Количество циклов перезаписи энергонезависимой памяти превышает 100 тысяч. Энергонезависимая память предназначена для хранения настроек и конфигурации программы, то есть тех данных, которые должны сохраняться при пропадании питания.
Чтение и запись данных в EEPROM, как правило, осуществляется посредством использования соответствующих регистров из области служебных регистров SRAM. Как правило, это:
- регистр адреса при обращении к EEPROM;
- регистр данных, считанных/записанных в EEPROM;
- регистр управления чтением-записью EEPROM.
Источник: prog-cpp.ru
Работа с внутренней памятью EEPROM
Все микроконтроллеры семейства Mega имеют в своем составе энергонезависимую память (EEPROM память). Объем этой памяти колеблется от 512 байт в моделях ATmega8x до 4 Кбайт в старших моделях. EEPROM память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно. Для работы с EEPROM памятью используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления.
Регистр адреса
Регистр адреса EEPROM памяти EEAR (EEPROM Address Register) физически размещается в двух РВВ EEARH:EEARL, расположенных по
адресам $1F ($3F) и $1E ($3E) соответственно. В этот регистр загружается адрес ячейки, к которой будет производиться обращение. Регистр адреса доступен как для записи, так и для чтения. При этом в регистре EEARH задействуются только младшие разряды (количество задействованных разрядов зависит от объема EEPROM памяти). Незадействованные разряды регистра EEARH доступны только для чтения и содержат «0».
Регистр данных
Регистр данных EEPROM памяти EEDR (EEPROM Data Register) расположен по адресу $1D ($3D). При записи в этот регистр загружаются данные, которые должны быть помещены в EEPROM, а при чтении в этот регистр помещаются данные, считанные из EEPROM.
Регистр управления
Регистр управления EEPROM памяти EECR (EEPROM Control Register) расположен по адресу $1C ($3C). Этот регистр используется для
управления доступом к EEPROM памяти. Его описание показано ниже в таблице:
Разряд | Название | Описание |
7..4 | — | не используются, читаются как «0» |
3 | EERIE | Разрешение прерывания от EEPROM. Этот разряд управляет генерацией прерывания, возникающего при завершении цикла записи в EEPROM. Если этот разряд установлен в «1», прерывания разрешены (если флаг I регистра SREG также установлен в «1»). При сброшенном разряде EEWE (см. далее в таблице) прерывание генерируется постоянно |
2 | EEMWE | Управление разрешением записи в EEPROM. Состояние этого разряда определяет функционирование флага разрешения записи EEWE. Если данный разряд установлен в «1», то при записи в разряд EEWE «1» происходит запись данных в EEPROM. В противном случае установка EEWE в «1» не производит никакого эффекта. После программной установки разряд EEMWE сбрасывается аппаратно через 4 машинных цикла |
1 | EEWE | Разрешение записи в EEPROM. При установке этого разряда в «1» происходит запись данных в EEPROM (если EEMWE равен «1») |
EERE | Разрешение чтения из EEPROM. После установки этого разряда в «1» выполняется чтение данных из EEPROM. По окончании чтения этот разряд сбрасывается аппаратно |
Для записи одного байта в EEPROM необходимо:
1. Дождаться готовности EEPROM к записи данных (ждать пока не сбросится флаг EEWE регистра EECR).
2. Дождаться завершения записи во FLASH память программ (ждать пока не сбросится флаг SPMEN регистра SPMCR).
3. Загрузить байт данных в регистр EEDR, а требуемый адрес — в регистр EEAR (при необходимости).
4. Установить в «1» флаг EEMWE регистра EECR.
5. Записать в разряд EEWE регистра EECR лог. «1» в течение 4-х машинных циклов. После установки этого разряда процессор
пропускает 2 машинных цикла перед выполнением следующей инструкции.
Для чтения одного байта из EEPROM необходимо:
1. Проконтролировать состояние флага EEWE. Дело в том, что пока выполняется операция записи в EEPROM память (флаг EEWE установлен), нельзя выполнять ни чтения EEPROM памяти, ни изменения регистра адреса.
2. Загрузить требуемый адрес в регистр EEAR.
3. Установить в «1» разряд EERE регистра EECR.
Когда запрошенные данные будут помещены в регистр данных EEDR, произойдет аппаратный сброс этого разряда. Однако следить за состоянием разряда EERE для определения момента завершения операции чтения не требуется, т. к. операция чтения из EEPROM всегда выполняется за один машинный цикл. Кроме того, после установки разряда EERE в «1» процессор пропускает 4 машинных цикла перед началом выполнения следующей инструкции.
В среде AVR Studio GCC есть стандартная библиотека для работы с EEPROM которая включается подключением файла . Вот некоторые ее функции:
eeprom_read_byte, eeprom_write_byte — чтение и запись 8-ми битного значения;
eeprom_read_word, eeprom_write_word — чтение и запись 16-ти битного значения.
Также есть функции:
eeprom_update_byte, eeprom_update_word — сначала сравниваются старые данные и данные какие надо записать, если изменений нет запись не производится, если данные изменились функция записывает новое значение. Данная функция позволяет сократить износ EEPROM.
Для примера напишем программу мини-счетчика от 0 до 9, где при нажатии на одну кнопку будет добавляться значение, а на другую кнопку будет сохраняться это значение в памяти. Микроконтроллер Atmega8 работает от внутреннего тактового генератора частотой 8МГц. Одноразрядный семисегментный индикатор с общим анодом через токоограничительные резисторы R1-R7 подключается к порту В, общий анод к плюсу питания. Схема показана ниже:
Для начала подключаем необходимые для работы библиотеки, в том числе EEPROM. Определяем переменные. Переменная «s» хранит значение для вывода на индикатор, при нажатии на кнопку SB1 это значение увеличивается на единицу, но не больше 10. Переменная eeprom_var будет взаимодействовать с EEPROM.
При включении питания читается EEPROM, считанные данные присваиваются переменной «s», исходя из этого на индикатор выводится определенная цифра. При нажатии на SB2 данные из переменной «s» записываютя в EEPROM, при этом индикатор мигнет один раз.
#include #include #include #define d0 ~(0x3F) // 0 #define d1 ~(0x06) // 1 #define d2 ~(0x5B) // 2 #define d3 ~(0x4F) // 3 #define d4 ~(0x66) // 4 #define d5 ~(0x6D) // 5 #define d6 ~(0x7D) // 6 #define d7 ~(0x07) // 7 #define d8 ~(0x7F) // 8 #define d9 ~(0x6F) // 9 unsigned char s; unsigned char eeprom_var EEMEM; // определяем переменную в EEPROM int main (void) < DDRB = 0xFF; // Порт В на выход PORTB = 0xFF; DDRD = 0x00; // Порт D на вход PORTD = 0xFF; // Включаем подтагивающие резисторы s = eeprom_read_byte( // считываем байт из EEPROM и помещаем его в «s» while(1) < if((PIND // увеличиваем «s» на единицу _delay_ms(200); > if(s == 10) // Когда дойдет до 10 обнуляем «s» < s = 0; >if((PIND // мигаем индикатором _delay_ms(200); DDRB = 0x00; _delay_ms(200); DDRB = 0xFF; eeprom_write_byte( // записываем «s» в EEPROM _delay_ms(200); > if(s==0) // Выводим цифры на индикатор PORTB = d0; if(s==1) PORTB = d1; if(s==2) PORTB = d2; if(s==3) PORTB = d3; if(s==4) PORTB = d4; if(s==5) PORTB = d5; if(s==6) PORTB = d6; if(s==7) PORTB = d7; if(s==8) PORTB = d8; if(s==9) PORTB = d9; > >
Источник: radioparty.ru
Внутренняя энергонезависимая память EEPROM
Я думаю, может не все, но очень многие знают, что в контроллерах AVR помимо основной оперативной памяти, а также памяти для хранения прошивки существует ещё и энергонезависимая память типа EEPROM. Данная память сделана по технологии электрического стирания информации, что в отличие от её предшественника EPROM, в котором стирание производилось только при помощи ультрафиолетовых лучей, позволило использовать данный тип памяти практически повсеместно.
Как мы знаем, ещё существует энергонезависимая память типа Flesh, которая стоит намного дешевле, но у которой также есть существенный минус. Там невозможно стереть отдельный байт, стирание производится только блоками, что не совсем удобно в некоторых случаях, особенно когда информации требуется хранить немного, и информация данная представляет собой небольшие настроечные параметры. Поэтому нам стоит также остановиться на данном типе памяти. И причем не только из-за того, что он присутствует в контроллере, а из-за того, что это очень удобно для хранения некоторых величин, которые нужны нам будут даже после того, как контроллер потерял питание.
Так как мы работаем с контроллером Atmega8A, техническую документацию данного МК мы и откроем и увидим там, что всего такой памяти у нас 512 байт. Это тем не менее не так мало. Если мы, например будем какой-нибудь будильник программировать, чтобы данные установки не потерялись после отключения питания, мы вполне можем с вами обратиться к данной памяти. Также в документации написано, что данная память гарантированно переживёт 100000 циклов записи/считывания.
Теперь напрашивается вопрос. Как же организован процесс работы с данной памятью в микроконтроллере AVR? Как всегда, компания Atmel об этом позаботилась и организовала данный процесс на аппаратном уровне, что очень радует потому, что нам постоянно приходится беречь ресурсы контроллера. Для управления данным аппаратным уровнем существуют определенные регистры.
Один из них — регистровая пара EEAR. Почему пара, а потому что 512 адресов не влезут в 8 бит, требуется ещё один
Как именно мы будем адресоваться, мы увидим в процессе программирования EEPROM.
Следующий — регистр данных EADR
В данный регистр мы будем записывать данные для того чтобы записать их в определённый адрес памяти EEPROM, а также чтобы считать их из определённого адреса той же самой памяти.
Ну и как водится, практически ни одна периферия и технология, организованная на аппаратном уровне, не обходится без управляющего регистра. У нас управляющим регистром является регистр EECR
Давайте сразу немного познакомимся с битами данного регистра.
Бит EERE — бит, заставляющий начать процесс чтения из памяти EEPROM. И, как только данные считались и записались в регистр данных, этот бит сбросится. Поэтому мы можем считать даннй бит не только управляющим, но и статусным или битом состояния.
Бит EEWE — бит, установка которого даёт команду контроллеру записать данные из регистра данных в определенный адрес EEPROM. После завершения процедуры записи, данный бит также сбрасывается самостоятельно.
Бит EEMWE — бит, разрешающий (не начинающий) процесс записи.
Бит EERIE — бит, разрешающий прерывания.
Ну, теперь перейдём к проекту. Проект был создан обычным стандартным образом и назван Test13. Также был подключен файл main.h и созданы файлы eeprom.h и eeprom.c.
Вот исходный код созданных файлов
Test13.c:
#include «main.h»
int main ( void )
while (1)
Источник: narodstream.ru
Русские Блоги
Время, а затем вы можете сделать это снова, поэтому вы не можете менять его несколько раз в день. Колесо истории продолжается, великий EEPROMПоявилось, спасло большое количество программистов и, наконец, можно свободно модифицировать содержимое ПЗУ.
Полное название EEPROM — «Электрически стираемое программируемое постоянное запоминающее устройство», то есть «Электрически стираемая программа».rammable Постоянная память. Это относительно ультрафиолетового стирания ПЗУ. Но сегодня существует много вариантов EEPROM, которые стали общим названием типа памяти.
Характеристика этого ПЗУ состоит в том, что любой байт может быть доступен и изменен случайным образом, и 0 или 1 могут быть записаны в каждый бит. Это наиболее традиционный тип EEPROM: данные не теряются после отключения питания, их можно хранить в течение 100 лет, а также можно стирать и записывать 100 раз. Имеет более высокую надежность, но схема сложная / дорогая. Таким образом, текущие EEPROM составляют от десятков килобайт до сотен килобайт и редко превышают 512K.
Flash — это обобщенная EEPROM, потому что это также электрически стираемое ПЗУ. Однако, чтобы отличить его от общего EEPROM, которое стирается байтом, мы называем его Flash.
Так как два похожи, почемуСКМДолжны ли мы иметь Flash и EEPROM?
Обычно Flash в микроконтроллере используется для хранения рабочего кода, который не может быть изменен во время операции, а EEPROM используется для сохранения пользовательских данных, которые могут быть изменены во время операции, таких какчасыВремя будильника изначально установлено на 12:00, а затем изменено на 6:00 во время работы. Оно сохраняется в EEPROM. Вы не боитесь сбоя питания и вам не нужно перенастраивать его на 6:00, даже если вы снова включаете питание.
Но самая большая разница на самом деле: FLASH работает по секторам, EEPROM работает по байтам Способы адресации этих двух различны, и структура блока памяти также различна. Структура схемы FLASH относительно проста. Та же емкость занимает небольшую область микросхемы, а стоимость, естественно, ниже, чем у EEPROM. Поэтому она подходит для памяти программ, и EEPROM больше используется как Энергонезависимое хранение данных. Конечно, также можно использовать FLASH в качестве памяти данных, но эта операция более хлопотна, чем EEPROM, поэтому она более «гуманна»MCUПроект будет интегрировать энергонезависимую память FLASH и EEPROM, в то время как дешевые проекты часто имеют только FLASH, а ранние стираемые микроконтроллеры представляют собой структуры EEPRM, которые в основном были прекращены.
Во внутренней микросхеме микросхемы FLASH и EEPROM не только имеют разные схемы, но также имеют разные адресные пространства.Методы работы и инструкции также различны, независимо от структуры фон Неймана или структуры Гарварда. Технически, и программная память, и энергонезависимая память данных могут использовать только структуру FALSH или структуру EEPROM, и даже «гибкие» технические средства могут использоваться для имитации «области хранения данных» в области хранения программ, но даже в этом случае концептуально эти два объекта все еще По-другому, это вопрос здравого смысла.
ЭСППЗУ: электрически стираемое и программируемое постоянное запоминающее устройство. Рабочие характеристики Flash полностью соответствуют определению ЭСППЗУ. Это, несомненно, ЭСППЗУ.
Когда была запущена первая флэш-память, в руководстве по данным четко указывалось, что это была ЭСППЗУ, что также имеет место в большинстве руководств по флеш-памяти. указывается, Отношения между ними — «белая лошадь» и «лошадь» , Что касается того, почему в отрасли необходимо различать эти два фактора, основная причина заключается в том, что метод работы Flash EEPROM полностью отличается от традиционного EEPROM.Вторичная причина заключается в сжатости языка. Flash EEPROM в неофициальных документах и разговорной речи для краткости называется Flash. Это «белый» атрибут белой лошади, а не ее «конь», чтобы отличать Flash от традиционной EEPROM.
Характеристики Flash — простая структура, один и тот же процесс и одна и та же область матрицы могут получить более высокую емкость и более быструю работу с большим объемом данных, но недостатком является то, что процесс работы является громоздким, особенно когда небольшой объем данных многократно перезаписывается, поэтому Flash-структура в MCU подходит для памяти программ без частого переписывания 。
Во многих приложениях Необходимость часто перезаписывать некоторые небольшие объемы данных и отключение энергонезависимой, EEPROM с традиционной структурой очень подходит здесь, Поэтому многие микроконтроллеры разработали два типа структур EEPROM, FLASH и традиционные, чтобы получить баланс затрат и функций, что значительно облегчает пользователям. С популярностью ISP и IAP, особенно в серии MCU, где адресное пространство хранения программ и адресное пространство хранения данных перекрываются, все больше и больше производителей MCU теперь поддерживают память программ IAP для имитации памяти данных, соответствующей EEPROM. Обходной путь для внедрения энергонезависимого хранилища данных при низких затратах. Чтобы достичь «эквивалентности» процесса двойной EEPROM в коммерческой пропаганде, многие производители, использующие программную память Flash для «симуляции» (обратите внимание, что техническая концепция на самом деле не является аналогом), производители памяти данных EEPROM заявили, что их продукты оснащены EEPROM Строго говоря, это очень строгое, но у продавца есть цель и метод продавца, и использование Flash для «симуляции» EEPROM может принести большую выгоду для бизнеса, так что на самом деле источником путаницы в технической концепции являются именно они.
Источник: russianblogs.com