В статье рассматриваются особенности применения микросхем NAND FLASH, методы разметки страниц и управления плохими блоками, даны рекомендации по программированию на программаторах ChipStar.
CОДЕРЖАНИЕ:
1. ТЕОРИЯ
1.1. Отличие микросхем NAND FLASH от обычных микросхем
Если не вникать в тонкости технологий, то отличие микросхем NAND от других микросхем памяти заключается в следующем:
Есть еще несколько отличий, но первые три особенности являются ключевыми. Больше всего проблем доставляет наличие ошибок и плохих блоков.
1.2. Разновидности микросхем NAND FLASH
Первоначально NAND FLASH были только одного типа: обычные (RAW) NAND. И на сегодняшний день эти микросхемы составляют большинство микросхем типа NAND. Однако производители микросхем, быстро начали расширять возможности применения NAND. Это стало приводить к появлению новых разновидностей NAND. Наиболее распространенные на сегодня разновидности NAND и их основные отличия сведены в таблицу:
Класс микросхем NAND
Интерфейс
Исправление ошибок (ECC)
Управление плохими блоками
RAW NAND (обычные NAND)
Паралельный / NAND
Выполняет внешнее устройство
Выполняет внешнее устройство
beNAND
Реализовано внутри микросхемы (*)
Serial NAND / SPI NAND
SPI
OneNAND
Паралельный / FLASH
eMMC
MMC
Примечание: * У некоторых видов микросхем внутренее исправление ошибок может быть отключено.
Основное отличие разных видов микросхем NAND сводится к различиям в трех факторах:
В статье ниже описаны обычные микросхемы NAND или RAW NAND.
Микросхемы со встроенной генерацией кодов исправления ошибок (BENAND в терминологии Toshiba) отличаются от обычных NAND, только тем что сами исправляют некоторое количество одиночных ошибок, что несколько упрощает работу с ними: в большинстве случаев они могут быть считаны и записаны как обычная микросхема FLASH, однако если ошибок на странице окажется много весь блок содержащий страницу должен быть помечен как «плохой». Поэтому все что здесь написано о плохих блоках в полной мере относится и к ним.
О микросхемах c NAND с последовательным интерфейсом более подробно написано здесь.
О микросхемах eMMC NAND более подробно можно почитать в этой статье.
1.3. Организация микросхем NAND FLASH
Более подробно об организации и структуре микросхем NAND можно прочитать в специальной литературе, мы же отметим, что:
Если говорят о размере страницы микросхемы NAND 512 байт или 2К байт, то речь идет о размере основной области страницы, без учета запасной.
Типичные размеры страниц NAND (в байтах):
Название
Размер основной области
Размер запасной области
Общий размер страницы
Пример микросхемы
1.4. Способы использования запасной области страницы
Еще раз напомним, что по замыслу разработчиков NAND микросхем в запасной области должны находится: маркеры плохих блоков, контрольные суммы основной области данных, прочая служебная информация.
Большинство разработчиков описывает только место расположения маркеров плохих блоков в поставляемых микросхемах. По остальным аспектам использования запасной области даются общие рекомендации и алгоритм вычисления ЕСС, обычно по Хэмингу. Samsung идут несколько дальше, разработав рекомендации с названием » Запасная область флэш-памяти NAND. Стандарт назначения » («NAND Flash Spare Area. Assignment Standard», 27. April. 2005, Memory Division, Samsung Electronics Co., Ltd).
Итак, этот стандарт предполагает следующее использование запасной области:
Использование запасной области для микросхем с размером страницы 512+16 байт:
Смещение (байт)
Размер (байт)
Назначение
Описание
Для микросхем с размером страницы 2048+64 байт основная и запасная область страницы разбивается на 4 фрагмента (сектора) каждая:
Область
Размер (байт)
Фрагмент
Основная
512
Сектор 1
512
Сектор 2
512
Сектор 3
512
Сектор 4
Запасная
16
Сектор 1
16
Сектор 2
16
Сектор 3
16
Сектор 4
Каждому фрагменту их основной области ставится в соответствие фрагмент запасной области.
Использование запасной области (для каждого из четырех фрагментов) у микросхем с размером страницы 2048+64 байт:
Смещение (байт)
Размер (байт)
Назначение
Описание
Но это не единственный «стандарт» для распределения памяти страниц, только нам известны их несколько десятков, например:
1.5. Образ NAND и двоичный образ
Вы можете столкнуться с двумя вариантами образа для записи:
Те специалисты, которые занимаются ремонтом различной аппаратуры, чаще сталкиваются со вторым случаем. В таком случае часто бывает затруднительно определить использованный способ распределения запасной области и метод управления плохими блоками.
1.6. Заводская маркировка плохих блоков
Единственное что более или менее стандартизовано, так это заводская маркировка плохих блоков.
Есть одна проблема: плохой блок можно стереть. Таким способом можно потерять информацию о плохих блоках микросхемы.
Однако, если микросхема уже работала в устройстве, далеко не всегда используется такая методика маркировки плохих блоков. Иногда даже информация о плохих блоках не хранится в памяти NAND. Но, чаще всего, если даже разработчик программного обеспечения устройства использует иную схему управления плохими блоками, заводскую разметку предпочитает не стирать.
1.7. Управление плохими блоками
Разработчики NAND микросхем предлагают использовать следующие схемы управления плохими блоками:
Также к методам управления плохими блоками иногда относят использование коррекции ошибок (ECC). Необходимо отметить, что использование коррекции одиночных ошибок не избавляет от множественных ошибок и все равно вынуждает использовать одну из приведенных выше схем. Кроме этого, большинство NAND микросхем имеют гарантировано бессбойную область, в которой не появляются плохие блоки. Бессбойная область, как правило, располагается в начале микросхемы.
Указанные методы управления плохими блоками хорошо описаны в технической документации производителей NAND и широко обсуждены в литературе по использованию NAND. Однако коротко напомним их суть:
Пропуск плохих блоков: Если текущий блок оказался сбойным он пропускается и информация пишется в следующий свободный блок. Эта схема универсальна, проста в реализации, однако несколько проблематична для случаев, когда плохие блоки появляются в процессе эксплуатации. Для полноценной работы этой схемы логический номер блока должен хранится внутри блока (стандарт назначения запасной области от Самсунг, собственно это и предполагает). При работе по этой схеме контроллер должен где-то хранить таблицу соответствия логических номеров блоков их физическим номерам иначе доступ к памяти будет сильно замедлен.
Поэтому логическим развитием является схема использования запасной области: По этому методу весь объем памяти разбивается на две части: основная и резервная. При появлении сбойного блока в основной памяти он заменяется блоком из запасной памяти, а в таблице переназначения блоков делается соответствующая запись. Таблица переназначения хранится или в гарантировано бессбойном блоке или в нескольких экземплярах. Формат таблицы разный, хранится она в разных местах. Опять таки Самсунг описывает стандарт на формат и расположение таблицы, но ему мало кто следует.
2. ПРАКТИКА
2.1. Сканирование плохих блоков микросхемы NAND
Программатор ChipStar позволяет быстро сканировать микросхему NAND на наличие плохих блоков в соответствии с заводской маркировкой плохих блоков.
Выберите пункт меню «Микросхема|Искать плохие блоки«, микросхема будет проверена на наличие плохих блоков. Результат показан в виде таблицы.
Это действие необходимо выполнить только в том случае, если вы хотите просто просмотреть список плохих блоков. Во всех остальных случаях поиск плохих блоков выполняется автоматически, когда это необходимо.
2.2. Плохие блоки в образе NAND
При считывании образа микросхемы NAND программатор дополнительно сохраняет информацию о размере страницы и блока микросхемы. Информация сохраняется в отдельном файле. Так если вы считали и сохранили образ микросхемы в файле .nbin программа создаст еще один файл: .cfs. При открытии файла .nbin файл .cfs так же будет считан. В файле .cfs записывается информация о размере страницы и блока микросхемы. После считывания микросхемы или открытия файла типа .nbin, производится фоновое сканирование образа на наличие плохих блоков исходя из информации о размере страницы и блока.
Параметры NAND и информацию о плохих блоках можно посмотреть в закладке «NAND» редактора программатора:
Двоичный образ NAND можно просматривать в закладке «Основная память«:
В режиме редактора NAND запасная область страницы выделяется более тусклым цветом, так же становятся доступны кнопки перемещения по страницам, блокам и быстрого перехода в начало запасной области текущей страницы. В строке статуса редактора кроме адреса курсора дополнительно отображается номер страницы и номер блока в которых находится курсор. Все это позволяет более удобно просмотреть содержимое микросхемы.
2.3.Стирание NAND
По умолчанию программатор не стирает плохие блоки, но если отключить опцию «Проверка и пропуск плохих блоков» плохие блоки могут быть стерты и разметка плохих блоков может быть потеряна. Отключать эту опцию нужно только в случае необходимости.
Пропускаются только плохие блоки помеченные в соответствии с заводской маркировкой. Если в устройстве используется иная маркировка плохих блоков, то они будут стерты, поскольку программное обеспечение программатора их не увидит. Для работы с нестандартными разметками плохих блоков программатор может использовать внешние плагины.
2.4. Тестирование микросхемы на отсутствие записи
По умолчанию программатор игнорирует все плохие блоки при проверке, но если отключить опцию «Сканирование и пропуск плохих блоков» плохие блоки будут проверены что, естественно, приведет к ошибкам тестирования.
2.5. Запись готового образа в микросхему
Запись образа NAND в микросхему несколько отличается от обычных FLASH микросхем. Прежде всего должны совпадать размеры страниц образа и целевой микросхемы. Если используется управление плохими блоками должны совпадать размеры блоков образа и микросхемы.
Программное обеспечение всех программаторов ChipStar поддерживает три метода управления плохими блоками встроенными средствами и неограниченное количество с помощью плагинов. Кроме того, можно задать количество записываемых блоков в начале микросхемы, что фактически является четвертым способом управления плохими блоками.
Способ 1: игнорирование плохих блоков
Простое копирование с игнорированием плохих блоков (плохие блоки пишутся так же, как нормальные).
Исходный образ
Микросхема (исходное состояние)
Микросхема (результат)
Блок 0 хороший
Блок чистый
Блок 4 хороший
Граница записи
Блок 5 хороший
Блок чистый
Блок чистый
Наиболее хорошо подходит для копирования микросхем NAND, не вникая в ее внутреннюю структуру, при условии, что записываемая микросхема не содержит плохих блоков. Если в исходном образе присутствовали плохие блоки, в итоге образуются ложные плохие блоки. Появление ложных плохих блоков не скажется на функционировании устройства. Однако, если микросхема уже содержит плохие блоки, при попытке записи в такую микросхему появятся сбойные блоки с непредсказуемыми последствиями. Совет: можно попытаться стереть микросхему полностью, включая плохие блоки, затем выполнить копирование. Если запись в плохой блок завершится успешно (такое часто бывает), ваше устройство будет функционировать правильно, в дальнейшем программное обеспечение устройства выявит плохой блок и заменит его хорошим в соответствии со своим алгоритмом работы.
Способ 2: обход плохих блоков
Исходный образ
Микросхема (исходное состояние)
Микросхема (результат)
Блок 0 хороший
Блок чистый
Блок 0 хороший
Блок 1 плохой
Блок чистый
Блок чистый
Блок 2 хороший
Блок чистый
Блок 2 хороший
Блок 3 хороший
Блок чистый
Блок 4 хороший
Граница записи
Блок 5 хороший
Блок чистый
Блок чистый
При обходе плохих блоков не записываются плохие блоки из исходного образа и не пишется информация в плохие блоки микросхемы. Это не самая лучшая политика копирования, но она безопасна в отношении плохих блоков микросхемы: не теряется информация о плохих блоках микросхемы и не появляются ложные плохие блоки. В ряде случаев такая политика копирования может помочь восстановить работоспособность неизвестного устройства.
Способ 3: пропуск плохих блоков
Исходный образ
Микросхема (исходное состояние)
Микросхема (результат)
Блок 0 хороший
Блок чистый
Блок 0 хороший
Блок 1 плохой
Блок чистый
Блок 2 хороший
Блок 2 хороший
Блок чистый
Блок 3 хороший
Блок 3 хороший
Блок плохой
Блок плохой
Блок 4 хороший
Блок чистый
Блок 4 хороший
Граница записи
Блок 5 хороший
Блок чистый
Блок чистый
Запись с пропуском плохих блоков предполагает что в устройстве используется именно такой алгоритм управления плохими блоками, а не какой-либо другой. При этих условиях гарантировано правильное копирование информации.
Способ 4: запись только гарантированно бессбойной области
Исходный образ
Микросхема (исходное состояние)
Микросхема (результат)
Блок 0 хороший
Блок чистый
Блок 0 хороший
Блок 2 хороший
Блок чистый
Блок 1 хороший
Граница записи
Блок плохой
Блок чистый
Блок чистый
Блок 3 хороший
Блок плохой
Блок плохой
Блок 4 хороший
Блок чистый
Блок чистый
Блок 5 хороший
В большинстве современных NAND микросхем первые блоки (как минимум один) гарантированно не имеют сбоев. Во многих устройствах в начале микросхемы располагается код загрузчика и операционной системы устройства. Часто бывает достаточно копирования только этих областей.
В диалоге настроек режимов записи укажите записываемый размер в блоках.
Другие способы управления плохими блоками
Программное обеспечение программаторов ChipStar поддерживает любые алгоритмы управления плохими блоками NAND при помощи внешних плагинов. При наличии установленных плагинов описания дополнительных методов появляются в списке «Управление плохими блоками NAND«. Настроить параметры выбранного метода можно нажав кнопку «Внешний плагин«.
Использование кодов, исправляющих ошибки (ECC)
Использование кодов, исправляющих ошибки позволяет восстанавливать одиночные ошибки на странице NAND.
Могут быть использованы разные алгоритмы, восстанавливающие одиночные ошибке в секторе. В зависимости от алгоритма ECC, может быть восстановлено разное количество ошибок на сектор (512+16 байт). Под термином «одиночные» понимается ошибка только в одном бите данных. Для NAND с размером страницы 512+16 байт понятие «сектор« и «страница« совпадают. Для NAND с большим размером страниц программатор ChipStar использует схему разметки страницы на сектора, как описано выше. В установках записи или верификации можно указать, сколько ошибок на сектор может исправлять используемый в вашем устройстве алгоритм. Соответственно, микросхемы с допустимым количеством ошибок не будут забракованы, информация о количестве исправимых ошибок выводится в окне статистики:
Информацию о количестве допустимых ошибок на сектор для каждой конкретной микросхемы можно уточнить в документации на микросхему. Все вновь добавляемые микросхемы NAND вносятся в базу данных программатора с учетом количества допустимых ошибок.
При самостоятельном добавлении микросхем:
Для новых микросхем NAND производства Samsung значение допустимого количества ошибок на сектор закодировано в составе идентификатора микросхемы. Поэтому, для таких микросхем допустимое количество ошибок на сектор также будет установлено правильно.
При считывании содержимого микросхемы с целью его дальнейшего сохранения или копирования, одиночные ошибки не могут быть достоверно выявлены. Полученный образ может быть затем отдельно подвергнут анализу на ошибки путем вычисления проверочных кодов ECC внешним приложением, при условии, что точноизвестен используемый алгоритм и разметка страницы.
Программное обеспечение программатора ChipStar предлагает косвенный статистический способ выявления и устранения одиночных ошибок. Способ позволяет выявить только неустойчивые ошибки с не гарантированной достоверностью. Для выполнения чтения с выявлением ошибок нужно выбрать режим «Выборочное чтение» и на закладке «NAND» отметить флажок «Включить режим исправления ошибок«
Можно настроить количество повторов чтения для сравнения и общее количество повторов чтения при ошибке. Следует иметь в виду, что использование данного способа существо замедляет процесс чтения.
Статистический алгоритм выявления ошибок работает следующим образом:
Алгоритм хорошо работает в том случае, если вероятность ошибки в конкретном бите микросхемы меньше 0.5. При чтении микросхемы ведется подсчет «исправленных» ошибок и вероятности правильного чтения.
2.6. Преобразование двоичного образа в образ NAND
Все описанное выше больше касалось копирования NAND и записи по образцу микросхемы, однако часто бывает нужно записать исходный бинарный образ программы в чистую микросхему. Перед записью нужно преобразовать двоичный образ в образ NAND, добавив к каждой странице запасную область и правильно заполнив ее. Для этого откройте ваш двоичный файл, выберите пункт меню «Правка|Переключить режим NAND редактора«. Появится диалог:
Задайте режим преобразования в формат NAND: «Образ двоичный.«, укажите размер страницы и блока NAND или выберите необходимую микросхему. Выберите формат запасной области. Программатор поддерживает простое заполнение области значениями FF встроенными средствами и другие способы при помощи плагинов. Вместе с программатором поставляется плагин, реализующий стандарт назначения запасной области, рекомендованный Самсунг.
2.7. Совместимость с образами NAND, считанными другими программаторами
Если у вас есть образ NAND, считанный другим программатором или полученный из другого источника, его нужно преобразовать в формат, пригодный для записи программатором ChipStar.
Для этого выполните следующие действия:
Таким же образом нужно преобразовать файлы, созданные программным обеспечением ChipStar версий ранее, чем 3.5.1.0.
Новый Год – приятный, светлый праздник, в который мы все подводим итоги год ушедшего, смотрим с надеждой в будущее и дарим подарки. В этой связи мне хотелось бы поблагодарить всех хабра-жителей за поддержку, помощь и интерес, проявленный к моим статьям (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»