На сьогодні флеш-пам’ять використовується для зберігання програмного коду, а EEPROM (Електрично стирається пам'ять лише для читання) використовується для зберігання стійких даних. Ще 30 років тому, до появи Flash, EEPROM використовувались для утримання програмного коду.
Насправді спочатку прийшов ROM (лише для читання), потім PROM (програмований ROM, лише один раз), EPROM (PROM Erasable ультрафіолетовим світлом), EEPROM та нарешті Flash. ПЗУ до сих пір застосовуються для додатків із великим обсягом та низькими витратами (наприклад, вітальні листівки).
Важлива відмінність поточних мікроконтролерів полягає в тому, що зазвичай не можна виконувати код поза EEPROM, і програма незручно зберігати дані у спалах. (Дані зберігаються у спалах, коли, наприклад, ви використовуєте ключове слово "const" в декларації даних або визначаєте рядок, але це обробляється поза кадром компілятором і лінкером.)
Область EEPROM може використовуватися для зберігання конфігурації або інших даних, які ви хочете бути доступними через перезавантаження, в тому числі, якщо мікроконтролер втратив живлення і потім живиться резервним пристроєм. Функціонально ви можете розглядати EEPROM як дуже маленький жорсткий диск або SD-карту.
На мікроконтролерах без EEPROM можна зберігати стійкі дані у флеш-пам’яті, але це стає важким, оскільки мікроконтролери насправді для цього не були розроблені, і ви повинні знайти спеціальне місце, яке не заважатиме програмному коду, і відкладіть це з лінкером. Крім того, як було сказано нижче, зазвичай ви можете оновити EEPROM у багато разів більше, ніж спалах.
Якщо ви робите дані програми у спалах, це не означає, що ви можете отримати доступ до даних як змінних у вашій програмі C, оскільки немає можливості сказати компілятору, де ці змінні знаходяться у вашому коді (тобто ви не можете зв’язати const змінюється на цю область спалаху.) Отже, читання їх повинно здійснюватися через спеціальний набір регістрів, які використовуються для їх запису. Зауважте, це обмеження стосується також даних у EEPROM, тому воно не має переваги в цьому плані.
Щоб запрограмувати спалах або EEPROM, спочатку слід стерти блок пам'яті. Потім це програмується. Для спалаху написання, як правило, також виконується блоком. Для EEPROM це може здійснюватися блоками або байтами одночасно, залежно від мікроконтролера.
Як для спалаху, так і для EEPROM, існує максимальна кількість разів, коли ви можете оновити їх, перш ніж зношувати пам'ять. Це число вказано в аркуші даних як мінімальне гарантоване значення. Зазвичай це набагато вище для EEPROM, ніж для флеш-пам’яті. Для спалаху я бачив цифри аж 1000. Для EEPROM я бачив цифри аж до 1 000 000.
Однією з переваг EEPROM над спалахом є те, що ви можете стерти їх набагато більше разів, ніж можете стерти спалах.
"Внутрішньопрограмоване в системі" просто означає, що мікроконтролер може оновлювати власний спалах під час роботи. Ця функція зазвичай використовується для оновлення коду в полі. Хитрість полягає в тому, що потрібно залишати деякий код у системі під час оновлення основної програми, що називається завантажувачем. Ця схема використовується в системі Arduino для програмування мікросхеми.