Flash rom что это
Взгляд изнутри: Flash-память и RAM
Предисловие
Новый Год – приятный, светлый праздник, в который мы все подводим итоги год ушедшего, смотрим с надеждой в будущее и дарим подарки. В этой связи мне хотелось бы поблагодарить всех хабра-жителей за поддержку, помощь и интерес, проявленный к моим статьям (1, 2, 3, 4). Если бы Вы когда-то не поддержали первую, не было и последующих (уже 5 статей)! Спасибо! И, конечно же, я хочу сделать подарок в виде научно-популярно-познавательной статьи о том, как можно весело, интересно и с пользой (как личной, так и общественной) применять довольно суровое на первый взгляд аналитическое оборудование. Сегодня под Новый Год на праздничном операционном столе лежат: USB-Flash накопитель от A-Data и модуль SO-DIMM SDRAM от Samsung.
Теоретическая часть
Постараюсь быть предельно краток, чтобы все мы успели приготовить салат оливье с запасом к праздничному столу, поэтому часть материала будет в виде ссылок: захотите – почитаете на досуге…
Какая память бывает?
На настоящий момент есть множество вариантов хранения информации, какие-то из них требуют постоянной подпитки электричеством (RAM), какие-то навсегда «вшиты» в управляющие микросхемы окружающей нас техники (ROM), а какие-то сочетают в себе качества и тех, и других (Hybrid). К последним, в частности, и принадлежит flash. Вроде бы и энергонезависимая память, но законы физики отменить сложно, и периодически на флешках перезаписывать информацию всё-таки приходится.
Тут можно подробнее ознакомиться с ниже приведённой схемой и сравнением характеристик различных типов «твердотельной памяти». Или тут – жаль, что я был ещё ребёнком в 2003 году, в таком проекте не дали поучаствовать…
Современные типы «твердотельной памяти». Источник
Единственное, что, пожалуй, может объединять все эти типы памяти – более-менее одинаковый принцип работы. Есть некоторая двумерная или трёхмерная матрица, которая заполняется 0 и 1 примерно таким образом и из которой мы впоследствии можем эти значения либо считать, либо заменить, т.е. всё это прямой аналог предшественника – памяти на ферритовых кольцах.
Что такое flash-память и какой она бывает (NOR и NAND)?
Начнём с flash-памяти. Когда-то давно на небезызвестном ixbt была опубликована довольно подробная статья о том, что представляет собой Flash, и какие 2 основных сорта данного вида памяти бывают. В частности, есть NOR (логическое не-или) и NAND (логическое не-и) Flash-память (тут тоже всё очень подробно описано), которые несколько отличаются по своей организации (например, NOR – двумерная, NAND может быть и трехмерной), но имеют один общий элемент – транзистор с плавающим затвором.
Схематическое представление транзистора с плавающим затвором. Источник
Итак, как же это чудо инженерной мысли работает? Вместе с некоторыми физическими формулами это описано тут. Если вкратце, то между управляющим затвором и каналом, по которому ток течёт от истока к стоку, мы помещаем тот самый плавающий затвор, окружённый тонким слоем диэлектрика. В результате, при протекании тока через такой «модифицированный» полевой транзистор часть электронов с высокой энергией туннелируют сквозь диэлектрик и оказываются внутри плавающего затвора. Понятно, что пока электроны туннелировали, бродили внутри этого затвора, они потеряли часть энергии и назад практически вернуться не могут.
NB: «практически» — ключевое слово, ведь без перезаписи, без обновления ячеек хотя бы раз в несколько лет Flash «обнуляется» так же, как оперативная память, после выключения компьютера.
Там же, на ixbt, есть ещё одна статья, которая посвящена возможности записи на один транзистор с плавающим затвором нескольких бит информации, что существенно увеличивает плотность записи.
В случае рассматриваемой нами флешки память будет, естественно, NAND и, скорее всего, multi-level cell (MLC).
Если интересно продолжить знакомиться с технологиями Flash-памяти, то тут представлен взгляд из 2004 года на данную проблематику. А здесь (1, 2, 3) некоторые лабораторные решения для памяти нового поколения. Не думаю, что эти идеи и технологии удалось реализовать на практике, но, может быть, кто-то знает лучше меня?!
Что такое DRAM?
Если кто-то забыл, что такое DRAM, то милости просим сюда.
Опять мы имеем двумерный массив, который необходимо заполнить 0 и 1. Так как на накопление заряда на плавающем затворе уходит довольно продолжительное время, то в случае RAM применяется иное решение. Ячейка памяти состоит из конденсатора и обычного полевого транзистора. При этом сам конденсатор имеет, с одной стороны, примитивное физическое устройство, но, с другой стороны, нетривиально реализован в железе:
Устройство ячейки RAM. Источник
Опять-таки на ixbt есть неплохая статья, посвящённая DRAM и SDRAM памяти. Она, конечно, не так свежа, но принципиальные моменты описаны очень хорошо.
Единственный вопрос, который меня мучает: а может ли DRAM иметь, как flash, multi-level cell? Вроде да, но всё-таки…
Часть практическая
Flash
Те, кто пользуется флешками довольно давно, наверное, уже видели «голый» накопитель, без корпуса. Но я всё-таки кратко упомяну основные части USB-Flash-накопителя:
Основные элементы USB-Flash накопителя: 1. USB-коннектор, 2. контроллер, 3. PCB-многослойная печатная плата, 4. модуль NAND памяти, 5. кварцевый генератор опорной частоты, 6. LED-индикатор (сейчас, правда, на многих флешках его нет), 7. переключатель защиты от записи (аналогично, на многих флешках отсутствует), 8. место для дополнительной микросхемы памяти. Источник
Пойдём от простого к сложному. Кварцевый генератор (подробнее о принципе работы тут). К моему глубокому сожалению, за время полировки сама кварцевая пластинка исчезла, поэтому нам остаётся любоваться только корпусом.
Корпус кварцевого генератора
Случайно, между делом, нашёл-таки, как выглядит армирующее волокно внутри текстолита и шарики, из которых в массе своей и состоит текстолит. Кстати, а волокна всё-таки уложены со скруткой, это хорошо видно на верхнем изображении:
Армирующее волокно внутри текстолита (красными стрелками указаны волокна, перпендикулярные срезу), из которого и состоит основная масса текстолита
А вот и первая важная деталь флешки – контроллер:
Контроллер. Верхнее изображение получено объединением нескольких СЭМ-микрофотографий
Признаюсь честно, не совсем понял задумку инженеров, которые в самой заливке чипа поместили ещё какие-то дополнительные проводники. Может быть, это с точки зрения технологического процесса проще и дешевле сделать.
После обработки этой картинки я кричал: «Яяяяязь!» и бегал по комнате. Итак, Вашему вниманию представляет техпроцесс 500 нм во всей свой красе с отлично прорисованными границами стока, истока, управляющего затвора и даже контакты сохранились в относительной целостности:
«Язь!» микроэлектроники – техпроцесс 500 нм контроллера с прекрасно прорисованными отдельными стоками (Drain), истоками (Source) и управляющими затворами (Gate)
Теперь приступим к десерту – чипам памяти. Начнём с контактов, которые эту память в прямом смысле этого слова питают. Помимо основного (на рисунке самого «толстого» контакта) есть ещё и множество мелких. Кстати, «толстый»
Во-первых, полный список опубликованных статей на Хабре:
Во-вторых, помимо блога на HabraHabr, статьи и видеоматериалы можно читать и смотреть на Nanometer.ru, YouTube, а также Dirty.
В-третьих, если тебе, дорогой читатель, понравилась статья или ты хочешь простимулировать написание новых, то действуй согласно следующей максиме: «pay what you want»
Основы флэш-памяти
Флэш-память типа Boot Block служит для хранения обновляемых программ и данных в самых разных системах, включая сотовые телефоны, модемы, BIOS, системы управления автомобильными двигателями и многое другое. Используя флэш-память вместо EEPROM для хранения параметрических данных, разработчики добиваются снижения стоимости и повышения надежности своих систем.
Например, в разработках сотовых телефонов параметрические блоки флэш-памяти используются для хранения телефонных номеров, учета времени использования и идентификатора пользователя (SIM-карта). Производители автомобилей используют параметрические блоки флэш-памяти в системах управления двигателями для хранения кодов ошибок и параметров оптимальных режимов работы. В каждом из подобных примеров изготовители экономят как на ненужной микросхеме EEPROM, так и на расходах, связанных с необходимостью содержания складского запаса «прошитых» разными программами EEPROM, используя флэш-память Boot Block Flash Memory не только для хранения прикладных программ, но и параметров. Загрузка кода в чистую память может производиться в составе готовой системы на финальной стадии изготовления изделия. Кроме того, за счет снижения числа комплектующих и внешних контактов достигается более высокая надежность автомобильных систем в целом. И, наконец, повышается объем хранимых параметров и частота их изменения.
В настоящей статье обсуждается структура связных списков для хранения параметров в блочной флэш-памяти с применением схемы, эмулирующей перезапись байтов. Обзор основ флэш-памяти приводится для пояснения того, как используется флэш-память в системе, и описывает ограничения на реализацию схемы программирования. Основное внимание уделено передовой, в настоящий момент, технологии — SmartVoltage.
Основы технологии
Флэш-технология позволяет оснастить системную память уникальными свойствами. Подобно ОЗУ, флэш-память модифицируется электрически внутрисистемно, но подобно ПЗУ, флэш энергонезависима и хранит данные даже после отключения питания. Однако, в отличие от ОЗУ, флэш нельзя переписывать побайтно. Флэш-память читается и записывается байт за байтом и предъявляет новое требование: ее нужно стереть перед тем, как записывать новые данные.
Запись (программирование) флэш-памяти — это процесс замены «1» на «0». Стирание — это процесс замены «0» на «1», где флэш стирается блок за блоком. Блоки — это области с фиксированными адресами, как показано на карте 4Мbit Boot Block микросхемы.
3FFFFH |
3E000H |
3DFFFH |
3D000H |
3CFFFH |
3C000H |
3BFFFH |
30000H |
2FFFFH |
20000H |
1FFFFH |
10000H |
0FFFFH |
00000H |
Когда блок стирается, стираются параллельно все ячейки внутри блока, независимо от других блоков этого прибора флэш-памяти.
Микросхемы Flash Memory Boot Block должны выдерживать не менее 100 тысяч циклов стирания при напряжении питания VCC=5V. Цикл считается законченным, если 8КВ одного из параметрических блоков успешно запрограммировано и после этого стерто. Этот параметр очень важный, так как от него зависит то, какой объем данных можно хранить и как часто их можно обновлять.
Поскольку флэш-память не допускает перезаписи отдельной ячейки без предварительного стирания всего блока памяти, то применяются программные методы эмуляции перезаписи байта с использованием двух 8КВ параметрических блоков, показанных на примере карты памяти.
Функционирование в системе
Кроме хранения параметрических данных, блочную флэш-память часто используют под хранение сменного кода программ. Часто в системах в заблокированном Boot-блоке хранится ядро кода, необходимого для инициализации системы и загрузки подпрограммы восстановления, на случай разрушения программы. В «бутовом» блоке обычно хранится также программа для программирования и стирания флэш-памяти. Так, флэш-память не допускает одновременное чтение ячейки с одним адресом и запись в ячейку с другим адресом в пределах одной микросхемы. Это означает, что любой код программы записи во флэш должен перегружаться в ОЗУ.
Воспользовавшись двумя параметрическими блоками флэш-памяти и программными методами, можно сохранять данные побайтно, а операцию стирания выполнять как фоновую задачу. Тем самым добиваются эмуляции перезаписи содержимого на байтной основе — схема программирования для эмуляции побайтной замены.
Структура параметрических данных
Структура данных в форме связных списков обеспечивает организацию данных, очень удобную для флэш-памяти. Например, предположим, что нужно сохранить 3 параметра, которые будут изменяться при условии, что каждый параметр хранится в виде записи. Каждая запись состоит из двух полей: Parameter_Value и Next_Record. В первом поле хранится значение параметра. Второе поле — это указатель, содержащий адрес следующей записи для этого параметра. ParameterX — это переменный указатель, содержащий адрес первой записи для этого параметра, поэтому Parameter1 представляет адрес. В ячейке с этим адресом хранится адрес первой записи параметра Parameter1, которая содержит первое значение Parameter1 и адрес второй записи Parameter1. Вторая запись содержит последнее значение этого параметра и адрес третьей записи, и т.д.. В последней записи в поле Next_Record содержится код FFh, указание на то, что записей больше нет. Код FFh выбран для указания, что записей больше нет, из-за того, что именно этот код представляет собой значение стертого байта флэш-памяти по умолчанию. При каждом изменении параметров программа ищет первую доступную ячейку в параметрическом блоке, записывает новое значение в поле значения новой записи, а потом обновляет поле Next_Record в предыдущей записи. Итак, каждая запись содержит значение и указатель, или связь со следующей записью. Такие структуры данных хорошо известны программистам, и называются связными списками, пользуясь которыми система может быстро найти последнее значение данного параметра.
Для простоты в примере использовано однобайтное поле для Parameter_Value и Next_Record. В действительности, для кодирования поля Next_Record потребуется как минимум два байта указателя на другую ячейку параметрического блока. Количество байтов, необходимых для кодирования поля Parameter_Value, зависит от специфики информации, хранимой в этом параметре.
Альтернативный подход к использованию связного списка состоит в применении поля parameter ID и поля статуса параметра, которое указывает, является ли текущая запись параметра самой поздней. В альтернативной схеме для того, чтобы получить последнее значение параметра, система считывает каждый параметр до тех пор, пока не найдет последнее значение данного параметра.
Запоминание параметров продолжается до тех пор, пока параметрический блок не заполнится или пока в параметрическом блоке хватает места для целой следующей записи. По достижении этой точки последние значения каждого параметра передаются во второй параметрический блок, а связный список продолжает формироваться во втором блоке параметров. Запись заголовка (Block_Header) в начале каждого параметрического блока показывает состояние блока. Состояние — это информация, например, о том, что параметрический блок активен, т.е. либо передает данные, либо стирается. Таким образом и осуществляются блочные передачи.
Стирание параметрического блока
После передачи действительных значений параметров из первого блока во второй, первый блок стирается. Вспомним, что стирание флэш-памяти занимает примерно 0,5s на каждый параметрический блок. Поскольку так много времени во время работы системы может не оказаться, во флэш-памяти используется команда приостановки стирания (Erase Suspend). По этой команде операцию стирания можно приостановить, чтобы система смогла считать данные из другого блока данного прибора памяти. Когда команда Erase Suspend поступает в микросхему, операция стирания останавливается, а память входит в «подвешенное» состояние, и тогда можно прочесть данные из другого блока. Когда снова будет можно стирать, команда Erase Resume прикажет прибору продолжить стирание с того места, где оно было прервано, что позволяет реализовать операцию стирания в пределах конечного программного цикла, используя несколько вызовов (Call). После полного стирания первого блока он снова готов к записи параметров, когда заполнится второй блок. Важно то, что никакие новые параметры нельзя записать, пока не закончится операция стирания блока. Текущие версии флэш-памяти Boot Block не допускают запись в моменты, когда стирание приостановлено.
PARAMETER BLOCK 1 |
block_status record |
parameter records |
PARAMETER BLOCK 2 |
block_status record |
erased |
PARAMETER BLOCK 1 |
block_status record |
parameter records |
PARAMETER BLOCK 2 |
block_status record |
PARAMETER BLOCK 1 |
block_status record |
erased |
PARAMETER BLOCK 2 |
block_status record |
parameter records |
Требования к системе
Как отмечено выше, для исполнения программы в моменты программирования и стирания флэш-памяти требуется ОЗУ. Необходимый объем ОЗУ зависит от сложности базы данных параметров. Программа, которая должна быть загружена в ОЗУ, включает подпрограммы чтения, записи и стирания флэш-памяти. Размер ее кода лежит в диапазоне от 512 байт до одного килобайта. Кроме того, для хранения этой программы потребуется место внутри самой флэш-памяти. Образец программы занимает около 15KB, но только небольшая ее часть (около 1KB) выгружается в ОЗУ.
Другое системное требование — адекватное напряжение программирования (VPP) для записи и стирания. Большинство современных микросхем флэш-памяти требует подачи 12V для внутрисистемной записи и стирания. Например, микросхемы семейства SmartVoltage позволяют использовать напряжение 5 В для операций записи и стирания, если источник 12 В в системе отсутствует.
Кроме 12V и 5V SmartVoltage стандартов существует технология 3.3 В SmartVoltage — микросхемы Flash-памяти емкостью 4 Mбит, имеющие архитектуру Boot Block. Эти микросхемы дополняют существующий ряд и позволяют разработчикам оптимизировать производительность и энергопотребление запоминающих устройств, пользуясь только одним типом памяти. SmartVoltage — технология, соединяющая в себе свойства низкой потребляемой мощности, самого быстрого программирования и единственного напряжения питания в одном приборе. Архитектура Boot Block позволяет совместить функции ROM, Flash или EPROM и EEPROM памяти в одной микросхеме.
Данная память позволяет эффективно удовлетворить противоречивые требования к разработке изделия, используя напряжения программирования VPP уровней 5 В или 12 В, и VCC со значениями 3.3 В или 5 В в любой комбинации. Это позволяет оптимизировать время записи, выбирая напряжение VPP=l2 В, или цену устройства, выбрав единственное напряжение питания VСС=VPP=5 В. Данное семейство имеет самое низкое потребление энергии без потерь производительности. При потреблении 150 мВт на 6 Mгц, 3V-read режим на 40% более эффективен, чем 5V-only. Дополнительно, SmartVoltage Flash в 3V-read режиме обеспечивает доступ за 110 нс, что вдвое быстрее, чем лучшие 3V-EEPROM. Теперь же еще микросхемы имеют реконфигурируемую шину данных, поэтому их можно применять как с 16bit, так и с 8bit микропроцессорами.
Так, если соединить выводы VPP и VCC, то память предлагает самую высокую производительность при единственном напряжении питания. При питании от 5 В SmartVortage обеспечивает чтение данных за 60 нс, и запись за 13 мкс, что превосходит те же параметры у сопоставимых 5V-only изделий другой технологии. Кроме этого, 3.3 В SmartVoltage позволяет переходить от режима с единственным напряжением питания к более гибкому режиму 3V-read/5V-write в портативной аппаратуре без дополнительных затрат на сертификацию Flash-микросхем. Для максимальной скорости программирования в процессе производства, приборы SmartVoltage могу быть запрограммированы при VPP=12 В, что вдвое сокращает время записи и снижает затраты при изготовлении больших партий аппаратуры.
Так, «новые» микросхемы выпускаются в 44-выводных пластиковых корпусах (PSOP — Plastic Small Outline Package) и 48-выводных корпусах с уменьшенной толщиной (TSOP — Thin Small Outline Package), и имеют разводку выводов в соответствии со стандартом JEDEC, что позволяет разрабатывать платы, на которые можно установить микросхемы 2-8 Mбит. В настоящее время доступны микросхемы с типами упаковки, начиная «обычным» пластиковым вариантом двухстороннего расположения выводов (PDIP — Plastic Dual In-line Package) и заканчивая современным «масштабируемым» вариантом (SCP — Chip Scale Package), комбинируя для разных ситуаций степень упаковки, расстояние между выводами, габаритные размеры и, наконец, условия эксплуатации. Эти микросхемы имеют ту же проверенную длительной эксплуатацией технологию запоминающих матриц на транзисторах с плавающим затвором (технология ЕТОХ IV — EPROM Tunnel OXide), и поэтому имеют те же характеристики надежности и времени жизни, как и другие микросхемы Flash-памяти. Они предназначены для широкого круга применений, включая BIOS, сотовые телефоны, приводы жестких дисков, point-of-sale терминалы, а также блоки управления двигателем и другими автомобильными системами.
Интересным моментом является вопрос пропадания питания во время стирания или в процессе обновления значений параметров. С ситуацией исчезновения питания можно надежно справиться, добавив дополнительные поля как к параметрическим, так и к блочным записям. Например, в дополнение к полям Parameter_Value и Next_Record, которые ввели для параметрической записи, можно установить поле статуса (Parameter_Status). Один бит поля состояния указывает, что обновление параметра началось, а другой бит — что обновление параметра завершилось. Таким образом, если питание исчезнет в процессе модификации параметра, то когда питание восстановится, можно узнать состояние каждого параметра. К примеру, если питание появилось, и видно по битам состояния, что обновление параметра начато, но не закончено, то отсюда следует, что запись испорчена и должна быть исправлена. Эту же концепцию можно применить в отношении записи Block_Status, чтобы обрабатывать ошибки при стирании, вследствие прерывания процесса стирания из-за отказа питания, либо из-за пересылки параметров между блоками.
В процессе инициализации определяется состояние параметрических блоков. Считав запись Block_Status, можно установить, какой блок активен и нужно ли стирать какой-нибудь другой блок. В момент первой инициализации параметрические блоки можно стереть и сформировать для них записи Block_Status.
Ранее обсуждалось, как читать и программировать флэш-память на побайтной основе. Флэш-память, в действительности, допускает программирование на уровне битов (или группы битов) за один раз. Надо помнить, что программирование флэш-памяти — это процесс замены логических «1» на «0». Одиночные биты можно запрограммировать путем маскирования остальных битов в байте или слове «единицами». Пользуясь такой удобной особенностью, можно минимизировать затраты памяти, отводимой под разные поля состояния.
Пример 1 |
|
| ||||||
Пример 2 |
|
| ||||||
Пример 3 |
|
|
Временная диаграмма работы
Динамический анализ работы системы необходим, чтобы определить длительность времени, необходимого для чтения параметров, выгрузки кода программы Write/Erase в ОЗУ, записи параметров, передачи параметров в новый блок и стирания параметрического блока.
Точные значения временных параметров зависят от особенностей реализации системы. Кроме задержек самого прибора, нужно также учитывать программные задержки.
Время, необходимое для чтения параметров, зависит от длины записи каждого параметра и количества параметров, которые придется считать, прежде чем будет найдена действительная запись этого параметра. Умножив число байтов или слов на длительность цикла чтения системы, можно рассчитать общее время чтения действительного параметра.
При выполнении каждой операции записи или стирания (Write/Erase) флэш-памяти, нужно перегрузить из нее в ОЗУ код программы, содержащий драйверы программирования и стирания. Время, необходимое для этой перегрузки кода в ОЗУ, зависит от объема кода (обычно 1 Kбайт или меньше). Умножив размер кода на длительность цикла записи, определим длительность загрузки кода в ОЗУ.
Для определения максимального времени, требующегося для записи параметра, необходимо воспользоваться временем записи слова или байта для наихудшего случая, приведенным в спецификации на ИС флэш-памяти. Умножив максимальное время записи слова на количество слов в записи параметра, можно узнать наихудшее время записи параметра.
Понятно, что время передачи действительных параметров из одного блока (параметрического) в другой зависит от количества хранимых параметров. Если эта операция выполняется как задача переднего плана, то на нее потребуется блок времени, состоящий из времени чтения действительных параметров и времени записи этих параметров в новый блок. Эту операцию можно также рассматривать как часто выполняемую фоновую задачу. Для тех применений, где известна длительность выполнения основного программного цикла, операция передачи может выполняться исходя из наличного времени в пределах программного цикла, когда передача параметров начинается, а затем приостанавливается в моменты, когда время основного цикла подходит к концу. Может потребоваться несколько основных циклов для полной передачи всех параметров в новый блок флэш-памяти. Общее время выполнения задачи будет зависеть от ресурса времени, доступного в каждом цикле и от количества вызовов цикла, необходимого для завершения операции.
Как и в случае передачи параметров, стирание блока можно рассматривать как задачу переднего плана или как фоновую. В случае фоновой задачи, общее время стирания зависит от величины временного «окна» в рамках программного цикла. Число необходимых вызовов определяется путем деления общего времени стирания на длительность времени, доступного в пределах каждого цикла. Умножив число вызовов цикла на длительность цикла, получим полное время стирания параметрического блока.
Так, для микросхем флэш-памяти типа Boot Block в спецификации гарантируется не менее 100 тысяч циклов стирания. Как это влияет на хранение параметров (цикличность), легко рассчитать, воспользовавшись выражением:
100000 Cycles=[8KB-(Block_Record size)/Parameter_Record size]*number of Parameter_Record
Это уравнение можно решить как для искомого числа записей параметров, так и для длины поля Parameter_Record, в зависимости от того, что известно. По сравнению с EEPROM устойчивость флэш-памяти к ре-программированию значительно выше.
Заключение
В настоящей статье были описаны основные моменты программных методов эмуляции побайтовой работы с использованием двух параметрических блоков флэш-памяти. Разработчики систем, используя для хранения параметров вместо EEPROM параметрические блоки микросхем Boot Block, могут снизить стоимость и повысить надежность своих систем. Так, уже давно осознали преимущества перехода от микросхем, стираемых целиком, к приборам, основанным на блочной архитектуре. Флэш-память типа Bulk Erase, изготавливаемая по устаревшей технологии, перестала модернизироваться и уже давно вытеснена более современными семействами.