Я собираюсь обсудить программирование флэш-памяти, но многие материалы будут похожи на EEPROM (электрически стираемое программируемое ПЗУ), поскольку флэш-память была получена из EEPROM в середине 1980-х годов. Как описано ниже, с физической точки зрения состояние по умолчанию - 1. Но что еще более важно, я собираюсь объяснить , почему это состояние по умолчанию - вы можете не просто произвольно программу поверх того , что уже запрограммирован в прошлый раз.
Флэш-память NOR почти всегда выбирается для программной флэш-памяти, поскольку интерфейс лучше всего подходит для размещения данных в карте памяти микроконтроллера - полный адрес и шины данных имитируют ОЗУ и обеспечивают произвольный доступ в любое место. Данные могут считываться по одному слову за раз, где слово определяется как ширина данных микроконтроллера, обычно 8, 16 или 32-разрядных. Вспышка NAND, с другой стороны, была разработана для замены жестких дисков и работает последовательно.
Однако программирование становится немного сложнее. Как уже упоминалось, состояние по умолчанию для флэш-памяти NOR и других энергонезависимых запоминающих устройств, таких как флэш-память NAND, EEPROM и даже EPROM, является логикой 1. Вы не можете программировать 1 на этих устройствах, вы можете программировать только 0. Например, если у вас есть байт, содержащий 0x0123, и вы хотите изменить его на 0x3210, вы не можете сделать это напрямую, как запись байта в ОЗУ.
Вместо этого биты в памяти должны быть удалены, что переводит их в состояние 1 по умолчанию, которое уже упоминалось. Это можно сделать только блоками, а не словами. На микрочипе PIC32, с которым я работал в последнее время, минимальный размер блока, который можно стереть, составляет 4096 байт. Поэтому, если вы хотите изменить только одно слово (32-разрядное), вам придется прочитать 4 КБ памяти, стереть блок, а затем записать 4 КБ памяти обратно на флэш-память, но при необходимости добавив новое 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 (стираемым программируемым ПЗУ), которые перешли к EEPROM. Код был запрограммирован в микросхемы (например, 16KB 27128) и помещен в гнезда. У этих чипов было небольшое окно сверху, которое позволяло свету сиять на матрице. Когда программу нужно было менять, чипы помещали в УФ-ластик на 20 минут или около того, чтобы стереть весь чип. Затем чип будет запрограммирован с новой программой.
Некоторые EEPROM требуют стирания блоков памяти перед программированием; другие позволяют записывать байт за раз (контроллер EEPROM фактически удаляет сначала байт и его программы).