Для успешной работы с микросхемами NAND FLASH (нанд флэш) необходимо, как минимум:
Иметь представление о структуре NAND FLASH (нанд флэш), существующих способах и алгоритмах использования информации хранимой в такой памяти.
Иметь программатор, который корректно поддерживает работу с памятью NAND Flash т.е. позволяет выбрать и реализовать необходимые параметры и алгоритмы обработки.
Программатор для NAND FLASH должен быть очень быстрым . Программирование или чтение микросхемы обьемом в несколько Гбит на обычном программаторе по времени занимает несколько часов. Очевидно, что для более или менее регулярного программирования NAND Flash нужен специализированный быстрый программатор, адаптированный для работы с мс. высокой плотности. На сегодняшний день, самый быстрый программатор Flash NAND - ChipProg-481.
Программирование NAND FLASH на программаторах ChipProg
При работе с NAND Flash программатор предоставляет широкий спектр возможностей по выбору/настройке способов и параметров программирования. Все параметры влияющие на алгоритм работы программатора с микросхемой, выводятся в окно "Редактор параметров микросхемы и алгоритма программирования". При необходимости, любой из этих параметров может быть изменен, с тем что бы выбранное действие (программирование, сравнение, чтение, стирание) - производилось по алгоритму необходимому пользователю программатора.
Окно "Редактор параметров микросхемы и алгоритма программирования" в интерфейсе программатора при программировании NAND Flash .
Большое количество настраиваемых параметров, формирующих алгоритм работы программатора NAND Flash продиктовано желанием предоставить универсальный инструмент, позволяющий пользователю максимально полно реализовать все особенности присущие структуре NAND Flash . Для облегчения жизни, программаторы ChipProg-481 предоставляют следующие возможности при выборе любой микросхемы NAND Flash :
- Все параметры принимают значения заданные в предшествующем сеансе (сессии) программирования выбранной NAND Flash . (количество сохраненных сессий неограниченно).
- Все параметры принимают значения заданные для данной NAND Flash в рамках "проекта" (количество "проектов" неограниченно)
- Все параметры автоматически принимают необходимые значения после запуска "скрипта". "Скрипты" пишутся на встроенном в оболочку программатора C подобном языке.
- Все (или выборочно) параметры принимают значения по умолчанию.
- Значения всех параметров доступны для редактирования в графическом интерфейсе программатора.
Рассмотрим режимы и параметры программирования реализованные в программаторе.
Режимы программирования.
- Invalid Block Management
- Spare Area Usage
- Guard Solid Area
- Tolerant Verify Feature
- Invalid Block Indication Option
1. Работа с плохими блoками .
Перед программированием NAND Flash можно/нужно выбрать один из способов работы с плохими блоками.
2. Использование области Spare Area.
Do Not Use |
Spare Area в микросхеме не используется. В микросхеме программируются страницы памяти без учета Spare Area. |
User Data |
Spare Area используется как пользовательская память. В этом случае при программировании микросхемы информация из буфера помещается сначала в основную страницу микросхемы, а затем в дополнительную область Spare Area. В этом случае буфер программатора выглядит как непрерывный поток основных страниц микросхемы и пристыкованных к ним областей Spare Area. |
User Data with IB Info Forced |
Spare Area интерпретируется аналогично предыдущему случаю за исключением того, что маркеры плохих блoкoв прописываются вместо информации пользователя. |
3. Guard Solid Area
Режим использования специальной области без плохих блoкoв. Обычно такие области используются в качестве загрузчиков микропроцессоров. В этой области недопустимо использование плoxих блoкoв.
Опция используется совместно с параметрами:
- Solid Area - Start Block - начальный блoк области без плoxих блoкoв.
- - количество блoкoв в этой области.
В случае, если внутри заданного диапазона Solid Area попадется плохой блoк, программатор выдаст ошибку.
4. Не чувствительность к ошибкам сравнения.
Эта опция позволяет включить режим не чувствительности к ошибкам сравнения.
Обычно, эту опцию имеет смысл использовать, если в устройстве пользователя применяются алгоритмы контроля и коррекции ошибок (ECC). В этих случаях допускается наличия определенного количества ошибок на определенный размер массива данных. Эти параметры и указываются в параметрах алгоритма программирования NAND
Flash
:
- ECC Frame size (bytes) - размер массива данных.
- Acceptable number of errors - допустимое количество однобитных ошибок.
5. Invalid Block Indication Option.
В этой опции выбирается информация, которая используется в качестве маркера плохих блоков. Допускается выбрать либо значение 00h, либо 0F0h.
- IB Indication Value ~ 00 или F0
Параметры программирования.
- User Area
- Solid Area
- RBA Area
- ECC Frame size
- Acceptable number of errors
a. Пользовательская область.
Пользовательская область - это область микросхемы, с которой работают процедуры Программирования, Чтения и Сравнения.
Процедуры Стирания и Контроля на чистоту работают со всем массивом микросхемы.
Пользователю необходимо установить параметры:
- User Area - Start Block - начальный блoк пользовательской области.
- User Area - Number of Blocks - количество блoков в пользовательской области.
b. Область без ошибок.
Параметры режима Guard Solid Area.
- Solid Area - Start Block - начальный блoк области без плoхих блоков.
- Solid Area - Number of Blocks - количество блоков в этой области.
c. Область размещения RBA.
- RBA Area - Start Block - начальный блок таблицы RBA.
- RBA Area - Number of Blocks - количество блоков в таблице RBA.
d. Размер фрейма ECC .
- ECC Frame Size - параметр определяющий размер массива данных, в котором допускаются однобитные ошибки.
e. Допустимое количество ошибок .
- Acceptable number of errors - параметр определяет количество однобитных ошибок, допустимых в массиве, размер, которого определяется параметром ECC Frame size.
Карта плохих блоков
Карта плохих блоков создается в подслое Invalid Block Map. Карта блоков представляется как непрерывный массив бит. Хорошие блоки представляются значением 0, плохие блоки - 1.
Например, значение 02h по нулевому адресу говорит о том, что 0,2,3,4,5,6,7 блоки являются хорошими, 1-ый блок является плохим. Значение 01h по первому адресу говорит о том, что только 8-ой блок является плохим из группы блоков 8..15.
Копирование NAND Flash
В качестве иллюстрации важности "зрячего" выбора режимов и параметров при программировании NAND Flash в программаторе, рассмотрим ситуацию, при которой у некоторых программистов возникают проблемы. Чаще всего, это замена NAND Flash в "устройстве", которое перестало работать. Стандартный подход - по аналогии с заменой обычной микросхемы памяти:
- Получить прошивку работающей микросхемы. Как правило, для этого считывается содержимое из микросхемы-оригинала.
- Прошить новую аналогичную микросхему.
- Сравнить содержание запрограммированной мс. с прошивкой "оригинала". Если сравнение прошло, микросхема - копия готова.
В случае, когда требуется программировать NAND Flash , не все так просто и однозначно.
- Прошивка Nand Flash , полученная при считывании программатором из "оригинала" - существенным образом зависит от установленных в программаторе режимов и параметров.
- Для того что бы корректно запрограммировать новую NAND Flash и получить полную копию, необходимо перед программированием установить в программаторе режимы и параметры соответствующие прошивке "оригинала". При этом, необходимо учитывать возможность существования плохих блоков.
Для получения микросхемы-копии, у которой прошивка NAND Flash идентична образцу, необходимо поступать следующим образом.
Подготовка к копированию.
Для копирования необходимы микросхема-оригинал и микросхема-копия (мс. в которую предполагается записать образ оригинала). Обязательные требования:
- Обе микросхемы NAND Flash и оригинал и копия должны быть одного типа.
- Микросхема-копия не должна иметь плохих блоков.
Чтобы определить, имеет ли микросхема-копия плохие блоки, необходимо установить микросхему в программатор, и в окне “Редактор параметров микросхемы” задать параметры микросхемы по умолчанию - кнопка "All Default".
Запускается процедура контроля на стертость (для экономии времени можно сразу же отменить эту процедуру, считывание карты плохих блоков осуществляется в самом начале). В окне "Программирование" интерфейса программатора, в поле “Информация об операциях” появляется информация о плохих блоках.
Копирование.
Перед копированием микросхемы NAND Flash в программаторе обязательно должны быть сделаны следующие настройки параметров в окне “Редактор параметров микросхемы”:
Invalid Block(IB) Management |
Do NOT USE |
Spare Area Usage |
User Data |
User Area – Number of Blocks |
Максимальное значение блоков в микросхеме |
В программатор устанавливается NAND Flash образец и считывается. Затем в программатор устанавливается микросхема-копия, стирается, записывается и сравнивается. В случае успешного прохождения всех трех процедур запрограммированная NAND Flash оказывается полной копией оригинала.
Структура памяти NAND Flash.
NAND Flash память * подразделяется на блоки (Block) памяти, которые в свою очередь делятся на страницы (Page). Страницы бывают большие (large page) и маленькие (small page). Размер страницы зависит от общего размера микросхемы. Для маленькой страницы обычно характерны микросхемы объемом от 128Kбит до 512Кбит. Микросхемы с большим размером страницы имеют объем от 256Кбит до 32Гбит и выше. Маленький размер страницы равен 512 байтам для микросхем с байтной организацией и 256 словам для микросхем со словной организаций шины данных. Большая страница имеет размер 2048 байт для байтных микросхем и 1024 для словных. В последнее время появляются микросхемы с еще большим размером страницы. Она уже составляет 4096 байт для байтных микросхем.
Структура памяти микросхем NAND Flash с малым размером страницы фирмы STMicroelectronics.
Структура памяти микросхем с большим размером страницы фирмы STMicroelectronics.
Плохие блоки NAND Flash
Характерной особенностью микросхем NAND Flash является наличие плохих (дефектных) блоков (Bad blocks) как в новых микросхемах, так и появление таких блоков в процессе эксплуатации. Для маркирования плохих блоков, а также для сохранения дополнительной служебной информации или кодов коррекции, в архитектуре NAND Flash в дополнении к каждой странице памяти данных предусмотрена добавочная область Spare area. Для микросхем с малой страницей эта область имеет размер 16 байт / 8 слов. Для микросхем с большой страницей - 64 байта / 32 слова.
Обычно производитель микросхем гарантирует количество плохих блоков, не превышающее определенного размера. Информация о плохих блоках поставляется производителем микросхем в определенном месте дополнительной области Spare Area.
Маркирование плохих блоков в микросхемах NAND Flash осуществляется записью обычно значения 0 по определенному адресу в области Spare Area нулевой страницы плохого блока. Маркеры плохих блоков лежат в определенных адресах области Spare Area.
Организация памяти |
Адрес маркеров плохих блоков в Spare Area |
Байтная организация, размер страницы - 512 байт. |
|
Словная организация, размер страницы - 256 слов. |
|
Байтная организация, размер страницы - 2048 байт и больше. |
|
Словная организация, размер страницы - 1024 слов и больше. |
Нужно иметь ввиду, что маркеры плохих блоков помещаются в обычные ячейки Flash памяти Spare Area, которые стираются при стирании всего блока памяти. Поэтому для сохранения информации о плохих блоках перед стиранием обязательно нужно сохранить эту информацию, а после стирания ее - восстановить.
В программаторах ChipProg при установке опции InvalidBlockManagement
в любое значение кроме Do Not Use
сохранение и восстановление информации о плохих блоках происходит автоматически.
Существует три наиболее распространенных способа обработки плохих блоков:
- Skip Bad Blocks (Пропуск плохих блоков. )
- Reserved Block Area (Резервирование блоков)
- Error Checking and Correction (Контроль и коррекция ошибок. )
1. Пропуск плохих блоков .
Алгоритм пропуска плохих блоков заключается в том, что при записи в микросхему анализируется в какой блок осуществляется запись. В случае наличия плохого блока, запись в этот блок не осуществляется, плохой блок пропускается, запись осуществляется в блок следующий после плохого.
2. Резервирование блоков.
В этом методе память всей микрохемы делится на три области: User Block Area (UBA) - пользовательская область, Block Reservoir - резервная область, следуемая сразу за пользовательской областью, и таблицу соответствия плохих блоков хорошим (Reserved Block Area - RBA).
Алгоритм замены плохих блоков в этом методе таков: при выявлении плохого блока из области UBA блок переносится в область Block Reservoir, при этом в таблице RBA делается соответствующая запись замены блока.
Формат таблицы RBA:
2 байта В области RBA находятся две таблицы в двух блоках. Таблица во втором блоке используется как резервная на случай, если информация в первой окажется недостоверной. 3. Контроль и коррекция ошибок . Для увеличения достоверности данных могут использоваться алгоритмы контроля и коррекции ошибок (Error Checking and Correction - ECC). Эта дополнительная информация может помещаться в свободное пространство Spare Area. *) Примечание: NAND ~ Not AND - в булевой математике обозначает отрицание «И» |