Я собираюсь обсудить программирование флэш-памяти, но многие материалы будут похожи на 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 фактически удаляет сначала байт и его программы).
0101
чтобы1010
, вы должны сделать в этой последовательности:0101
-> (очистка) ->1111
-> (программа 0 ') ->1010
. Или, по сути, это означает, что запись 1 и запись 0 выполняются с разной степенью детализации .В современной флэш-памяти я не знаю ни одной причины, чтобы выбирать единицы вместо нулей по умолчанию. Чтение осуществляется через дифференциальные токовые усилители, поэтому, в принципе, вы можете использовать выход с любой стороны. (Первые EEPROM могли иметь более простые схемы чтения - я не уверен.)
Там является хорошей причиной , чтобы не добавить дополнительные инверторов - это приведет к увеличению задержки распространения из памяти в процессор. В микроконтроллерах путь данных флэш-памяти к ЦП оказывает огромное влияние на общую производительность системы, поскольку он определяет, сколько времени потребуется для получения новых инструкций.
Разработчики цифровых схем часто ожидают, что ноль означает очистить / сбросить / стереть. Но флэш-транзисторы и схемы считывания являются аналоговыми. С этой точки зрения, описание проводящего состояния флэш-транзистора как логического имеет больше смысла. И так уж получилось, что переход от единицы к нулю намного, намного быстрее, чем переход от нуля к единице, так что человек становится «стертым», а ноль - «запрограммированным».
Короткая версия: физики полупроводников и разработчики аналоговых схем не заботятся о вашей цифровой интуиции. :-)
источник
Я не уверен, из чего вы цитируете, но, переходя на страницу Википедии по флэш-памяти, это, похоже, результат аппаратного обеспечения флэш-памяти:
Если бы вы использовали другой тип вспышки, например, NAND, состояние по умолчанию было бы равно 1, потому что выход NAND равен 1, когда выходной сигнал любого из транзисторов ниже их высокого / низкого порогового напряжения.
Извиняюсь, если я полностью пропустил лодку из-за того, что вы спрашивали, я также довольно новичок во всем этом.
источник
ПЗУ и ПЗУ уходят в прошлое, когда нужно было манипулировать, добавляя металл в слой маски во время изготовления или сжигая его при программировании, и оба процесса имели высокое состояние по умолчанию при изготовлении. Установка по умолчанию на LOW стоила бы больше транзисторов, снизила бы удобство программирования или скорость работы.
С тех пор это стало общепринятым, потому что добавление инвертора в какой-то момент в пути данных в эти дни было бы возможно.
Соглашение могло начаться во времена массивов логической памяти с диодами, в которых были диоды для снятия линий данных, когда они были адресованы, и у неиспользуемых слов памяти не было бы диодов вместо всех диодов. Большинство ранних стандартов цифровой логики активно притягивались низко и, если нет, поднимались высоко.
источник