Я збираюся обговорити програмування флеш-пам’яті, але багато матеріалу буде подібне до EEPROM (Електрично програмоване програмоване ПЗУ), оскільки флеш-пам’ять отримана від EEPROM в середині 1980-х. Як описано нижче, з фізичної точки зору стан за замовчуванням дорівнює 1. Але що ще більш важливо, я збираюся пояснити , чому це стан за замовчуванням - ви можете не просто довільно програму поверх того , що вже запрограмований в минулий раз.
Спалах NOR майже завжди вибирається для програмного спалаху, оскільки інтерфейс найкраще підходить для розміщення даних у картці пам'яті мікроконтролера - повна адреса та шини даних імітують оперативну пам’ять та дозволяють довільно отримувати доступ до будь-якого місця. Дані можна читати по одному слову, де слово визначається як ширина даних мікроконтролера, як правило, 8, 16 або 32-біт. NAND спалах, з іншого боку, був розроблений для заміни жорстких дисків і працює послідовно.
Однак програмування стає дещо складнішим. Як уже згадувалося, стан за замовчуванням для спалаху NOR та інших енергонезалежних пам’яток, таких як спалах NAND, EEPROM і навіть EPROM, є логікою 1. Ви не можете програмувати 1 на цих пристроях, ви можете програмувати лише 0. Так, наприклад, якщо у вас є байт, що містить 0x0123, і ви хочете змінити його на 0x3210, ви не можете зробити це безпосередньо, як записувати байт в оперативну пам'ять.
Натомість біти в пам'яті повинні бути стерті, що переводить їх у стан, що вже згадується, за замовчуванням. Це можна зробити лише блоками, а не словами. На Microchip PIC32, з яким я працював останнім часом, мінімальний розмір блоку, який можна стерти, становить 4096 байт. Тож, якщо ви хотіли змінити лише одне слово (32-бітне), вам доведеться прочитати 4K пам'яті, стерти блок, а потім записати 4K пам'яті назад, щоб миготіти, але включити нове 32-бітове значення за потребою. Це стирання може зайняти деякий час - добру частину секунди.
Далі - зображення комірки флеш-пам’яті. Flash зберігає дані, видаляючи або ставлячи електрони на плаваючі ворота. Коли електрони присутні на плавучому затворі, через транзистор не протікає струм, що вказує на 0. Коли електрони виймаються з плавучого затвора, транзистор починає проводити, вказуючи на 1. (Це умовно - це могло бути іншим способом, але потрібні інвертори для всіх рядків даних.)
Очистити операцію. За замовчуванням стан комірок флеш-пам'яті (однорівнева флеш-пам’ять NOR) - 1, оскільки плаваючі ворота не несуть негативних зарядів. Видалення комірки флеш-пам’яті (скидання на 1) досягається застосуванням напруги через джерело та контрольний затвор (слово слова). Напруга може бути в діапазоні від -9В до -12В. А також застосувати до джерела близько 6В. Електрони в плаваючих воротах витягуються і передаються до джерела квантовим тунелюванням . Іншими словами, електрони тунелюються від плавучих воріт до джерела та підкладки.
Оскільки для стирання використовуються високі напруги, тому для стирання в блоках потрібна менша площа штампування. Тож напруги можна застосовувати лише до цілих рядів транзисторів одночасно.
Для запису флеш-пам’ять NOR можна запрограмувати або встановити на 0 за наступною процедурою. Під час написання на контрольний затвор (слово слова) подається висока напруга близько 12 В. Якщо до бітової лінії (зливний термінал) подається висока напруга близько 7 В, то в комірці зберігається 0. Зараз канал увімкнено, тому електрони можуть надходити від джерела до стоку. Струм зливу джерела є досить високим, щоб змусити деякі високоенергетичні електрони стрибати через ізолюючий шар на плаваючі ворота через процес, який називається впорскуванням гарячого електрона.
Для читання напруга близько 5 В подається на контрольний затвор і близько 1 В на злив. Стан комірки пам'яті відрізняється струмом, що протікає між зливом і джерелом.
Термін корисної експлуатації енергонезалежної пам’яті вимірюється за допомогою циклів стирання. Недоліком NOR є те, що кількість циклів стирання приблизно 1/10, ніж NAND-пам'яті. Багато версій PIC32 дозволяють оновлювати флеш-пам’ять лише 1000 разів, набагато менше типових 100 000 циклів стирання для EEPROM.
Тож не так важливо, якщо дизайнери зробили стан за замовчуванням 1 або 0 (вони обрали значення, що дозволило найпростішу реалізацію); найважливіше - спершу потрібно стерти блок спалаху (що вимагає часу), а потім перепрограмувати весь блок (навіть якщо одне слово змінюється (що вимагає значної кількості оперативної пам’яті).
Цей блок стирання пристрою повертається до перших EPROM (Erasable Programmable ROM), які переходили до EEPROM. Код був запрограмований на мікросхеми (як 16KB 27128) і розміщений у розетках. Ці фішки мали маленьке вікно вгорі, яке дозволяло світлу світити на штампі. Коли програму довелося змінити, чіпи поміщали в УФ-ластик на 20 хвилин або близько того, що стерло б весь мікросхема. Тоді чіп буде запрограмований за допомогою нової програми.
Деякі EEPROM вимагають стирання блоків пам'яті перед програмуванням; інші дозволяють одночасно писати байт (контролер EEPROM фактично спочатку стирає байт та програми, які він програє).