NOR и NAND
NOR-память была представлена несколько раньше поскольку она чуть проще в производстве, да и ее транзисторы по своему строению напоминают обычный MOSFET-транзистор (канальный полевой униполярный МОП-транзистор). Разница заключается лишь в том, что в NOR-памяти транзистор в дополнение к контролирующему затвору имеет второй, "плавающий", затвор. Последний при помощи специального изолирующего слоя может удерживать электроны в течение многих лет, держа транзистор не разряженным.
Схема транзистора NOR-флэш памяти
Вообще свое название NOR-память получила из-за работы как NOR-затвор (NOR – логическая операция НЕ-ИЛИ; принимает значение "истина" только когда на оба входа подается "ложь"). Так что пустая ячейка NOR-памяти заполнена логическим значением "1". Кстати, тоже самое касается и NAND-памяти. И, как не сложно догадаться, она свое название получила из-за схожего принципа работы с NAND-затвором (NAND – логическая операция НЕ-И; принимает значение "ложь" только когда на оба входа подается "истина").
Схема транзистора NAND-флэш памяти
Во что выливается на практике эти самые "НЕ-И" и "НЕ-ИЛИ"? В то, что чип NOR-памяти можно очистить только целиком. Хотя в более современных инкарнациях данной технологии чип разбит на несколько блоков, занимающих обычно 64, 128 или 256 Кбайт. Зато этот тип памяти имеет внешнюю шину адресов, что позволяет побайтное чтение и программирование (запись). Это позволяет не только максимально точно получать доступ к данным напрямую, но и исполнять их прямо "на месте", не выгружая всю информацию в оперативную память. Эта возможность называется XIP (eXecute In Place – выполнение на месте).
Стоит также рассказать о сравнительно новой функции NOR-памяти под названием BBM (Bad Block Management — управление бэд-блоками). Со временем часть ячеек может придти в негодность (точнее станет недоступна их запись) и контроллер чипа, заметив это, переназначит адрес таких ячеек на другой, пока еще рабочий блок. Чем-то подобным занимаются и жесткие диски, о чем мы писали в статье "BAD-секторы. Что это такое, с чем это едят и как от них избавиться".
Таким образом NOR-память хорошо подходит для тех случаев, когда требуется максимальная точность считывания данных и довольно редкое их изменение. Догадываетесь к чему мы клоним? Правильно — к прошивкам различных устройств, в частности BIOS системных плат, видеокарт и т.д. Именно там сейчас NOR-флэш и применяется чаще всего.
Что касается NAND, то с ней ситуация чуть "позаковыристей". Чтение данных может осуществляться только постранично, а запись — поблочно. Один блок состоит из нескольких страниц, а одна страница обычно имеет размер 512, 2048 или 4096 байт. Число страниц в блоке как правило варьируется от 32 до 128. Так что ни о каком исполнение "на месте" речи не идет. Еще одно ограничение NAND-памяти — это то, что запись в блок может осуществляться только последовательно.
В итоге подобная точность (хотя правильнее будет сказать "не точность") порой приводит к ошибкам, особенно если приходится иметь дело с MLC-памятью (об этом типе чуть ниже). Для их коррекции применяется механизм ECC. Он может исправить от 1 до 22 бит в каждых 2048 битах данных. Если исправление невозможно, то механизм определяет наличие ошибки во время записи или стирания данных и блок помечается как "плохой".
Кстати, для предотвращения образования бэд-блоков во флэш-памяти существует специальный метод под названием "wear levelling" (дословно "уровень износа"). Работает он довольно просто. Поскольку "живучесть" блока флэш-памяти зависит от количества операций стирания и записи, а для разных блоков это количество разное, контроллер устройства подсчитывает число этих операций для блоков, стараясь со временем проводить запись на те, что использовались меньше. То есть на те, которые меньше "изношены".
Ну а что касается области применения NAND-памяти, то благодаря возможности более плотного размещения транзисторов, а заодно более дешевого их изготовления, она как раз и используется во всех картах флэш-памяти и USB-флэшках, а также SSD.
SLC NAND чипы Toshiba
Ну и немного об SLC (Single-Level Cell — одноуровневая ячейка) и MLC (Multi-Level Cell — многоуровневая ячейка) ячейках. Изначально был доступен только первый тип. Он предполагает, что в одной ячейке может храниться только два состояния, то есть один бит данных. Чипы MLC были придуманы позже. Их возможности чуть шире — в зависимости от напряжения контроллер может считать с них более двух значений (как правило четыре), что позволяет хранить в одной ячейке от 2 и более бит.
MLC NAND чипы Samsung
Достоинства MLC на лицо — при том же физическом размере в одну ячейку помещается вдвое больше данных. Недостатки, впрочем, не менее существенны. Прежде всего это скорость считывания — она естественно ниже, чем у SLC. Ведь требуется создание более точного напряжения, а после этого необходимо правильно расшифровать полученную информацию. И тут же возникает второй недостаток — неизбежные ошибки при считывании и записи данных. Нет, данные не повреждаются, но это сказывается на скорости работы.
Довольно существенный недостаток флэш-памяти — это ограниченное число циклов записи и стирания данных. В этом отношении она пока что не очень хорошо может соперничать с жесткими дисками, но в целом ситуация с каждым годом улучшается. Вот данные по времени службы разных типов флэш-памяти:
- SLC NAND – до 100 тысяч циклов;
- MLC NAND – до 10 тысяч циклов;
- SLC NOR – от 100 до 1000 тысяч циклов;
- MLC NOR – до 100 тысяч циклов.
Вот вам и еще один недостаток MLC-памяти — она менее долговечна. Ну а NOR-флэш вообще вне конкуренции. Правда, от этого мало толку обычному обывателю — все равно его флэшка вероятнее всего построена на основе NAND-флэш, да еще и на MLC-чипах. Впрочем, технологии не стоят на месте и уже в массы постепенно идет NAND-флэш с миллионым циклом записи и стирания данных. Так что со временем эти параметры станут для нас мало существенными.