Ок!Закрыть
Содержимое

Программирование NAND FLASH

Для успешной работы с микросхемами  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 продиктовано желанием предоставить универсальный инструмент, позволяющий пользователю максимально полно реализовать все особенности присущие структуре NAND Flash. Для облегчения жизни, программаторы ChipProg-481 предоставляют следующие возможности при выборе любой микросхемы NAND Flash:

  • Все параметры принимают значения заданные в предшествующем сеансе (сессии) программирования выбранной NAND Flash. (количество сохраненных сессий неограниченно).
  • Все параметры принимают значения заданные для данной NAND Flash в рамках "проекта" (количество "проектов" неограниченно)
  • Все параметры автоматически принимают необходимые значения  после запуска "скрипта". "Скрипты" пишутся на встроенном в оболочку программатора C подобном языке.
  • Все (или выборочно) параметры принимают значения по умолчанию.
  • Значения всех параметров доступны для редактирования в графическом интерфейсе программатора.

Рассмотрим режимы и параметры программирования реализованные в программаторе.

Режимы программирования.

  1. Invalid Block Management   
  2. Spare Area Usage
  3. Guard Solid Area
  4. Tolerant Verify Feature
  5. Invalid Block Indication Option

 1. Работа с плохими блoками.

Перед программированием  NAND   Flash  можно/нужно выбрать один из способов работы с плохими блоками.

  Do Not Use

  Не обрабатывать информацию о плoxих блoках.

  Skip IB

  Пропускать плoxие блoки.

  Skip IB with Map in 0-th Block

  Пропускать плoxие блоки, в нулевой блoк помещать карту плoxих блoкoв.

  RBA (Reserved Block Area)

  Использовать алгоритм RBA.

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в.
  • Solid Area - Number of Blocks- количество бл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

 

Параметры программирования.

  1. User Area
  2. Solid Area
  3. RBA Area
  4. ECC Frame size
  5. 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 в "устройстве", которое перестало работать. Стандартный подход - по аналогии с заменой обычной микросхемы памяти:

  1. Получить прошивку работающей микросхемы. Как правило, для этого считывается содержимое из микросхемы-оригинала.
  2. Прошить новую аналогичную микросхему.
  3. Сравнить содержание запрограммированной мс. с прошивкой "оригинала". Если сравнение прошло, микросхема - копия готова.

В случае, когда требуется программировать NAND Flash, не все так просто и однозначно.

  1. Прошивка Nand Flash, полученная при считывании программатором из "оригинала" - существенным образом зависит от установленных в программаторе режимов и параметров.
  2. Для того что бы корректно запрограммировать новую NAND Flash и получить полную копию, необходимо перед программированием установить в программаторе режимы и параметры соответствующие прошивке "оригинала". При этом, необходимо учитывать возможность существования плохих блоков.

Для получения микросхемы-копии, у которой прошивка NAND Flash идентична образцу, необходимо поступать следующим образом.

Подготовка к копированию.

Для копирования необходимы микросхема-оригинал и микросхема-копия (мс. в которую предполагается записать образ оригинала). Обязательные требования:

  1. Обе микросхемы NAND Flash и оригинал и копия должны быть одного типа.
  2. Микросхема-копия не должна иметь плохих блоков.

Чтобы определить, имеет ли микросхема-копия плохие блоки, необходимо установить микросхему в программатор, и в окне “Редактор параметров микросхемы” задать параметры микросхемы по умолчанию - кнопка "All Default".

Программатор Nand Flash (нанд флэш) - интерфейс.

Запускается процедура контроля на стертость (для экономии времени можно сразу же отменить эту процедуру, считывание карты плохих блоков осуществляется в самом начале). В окне "Программирование" интерфейса программатора, в поле “Информация об операциях” появляется информация о плохих блоках.

Программатор Nand Flash (нанд флэш) - окно "Программирование".

Копирование.

Перед  копированием  микросхемы 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.

NAND Flash память* подразделяется на блоки (Block) памяти, которые в свою очередь делятся на страницы (Page). Страницы бывают большие (large page) и маленькие (small page). Размер страницы зависит от общего размера микросхемы. Для маленькой страницы обычно характерны микросхемы объемом от 128Kбит до 512Кбит. Микросхемы с большим размером страницы имеют объем от 256Кбит до 32Гбит и выше. Маленький размер страницы равен 512 байтам для микросхем с байтной организацией и 256 словам для микросхем со словной организаций шины данных. Большая страница имеет размер 2048 байт для байтных микросхем и 1024 для словных. В последнее время появляются микросхемы с еще большим размером страницы. Она уже составляет 4096 байт для байтных микросхем. 

Nand-Flash - структура страниц м. 

 Структура памяти микросхем NAND Flash с малым размером страницы фирмы STMicroelectronics.

 
 Nand-Flash - структура страниц б.

 Структура памяти микросхем с большим размером страницы фирмы 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 байт.
5
  Словная организация, размер страницы - 256 слов.
0
  Байтная организация, размер страницы - 2048 байт и больше.
0 или 5
  Словная организация, размер страницы - 1024 слов и больше.
0

Нужно иметь ввиду, что маркеры плохих блоков помещаются в обычные ячейки Flash памяти Spare Area, которые стираются при стирании всего блока памяти. Поэтому для сохранения информации о плохих блоках перед стиранием обязательно нужно сохранить эту информацию, а после стирания ее - восстановить.
В программаторах ChipProg при установке опции InvalidBlockManagement в любое значение кроме Do Not Useсохранение и восстановление информации о плохих блоках происходит автоматически.

Существует три наиболее распространенных способа обработки плохих блоков:

  1. Skip Bad Blocks   (Пропуск плохих блоков.)
  2. Reserved Block Area   (Резервирование блоков)
  3. Error Checking and Correction   (Контроль и коррекция ошибок.)

1. Пропуск плохих блоков.

Алгоритм пропуска плохих блоков заключается в том, что при записи в микросхему анализируется в какой блок осуществляется запись. В случае наличия плохого блока, запись в этот блок не осуществляется, плохой блок пропускается, запись осуществляется в блок следующий после плохого.

2. Резервирование блоков.

В этом методе память всей микрохемы делится на три области: User Block Area (UBA) - пользовательская область, Block Reservoir - резервная область, следуемая сразу за пользовательской областью, и таблицу соответствия плохих блоков хорошим (Reserved Block Area - RBA).

Алгоритм замены плохих блоков в этом методе таков: при выявлении плохого блока из области UBA блок переносится в область Block Reservoir, при этом в таблице RBA делается соответствующая запись замены блока.

Формат таблицы RBA:

2 байта
2 байта
2 байта
2 байта
....
2 байта
2 байта
Маркер
Count Field
Invalid Block
Replaced Block
....
Invalid Block
Replaced Block

Маркер имеет значение 0FDFEh.

Count Field начинается с 1 и значение этого поля увеличивается на 1 на каждой следующей странице данного блока.

Invalid Block - номер замененного плохого блока.

Replaced Block - номер блока, на который был заменен плохой блок.
Пары Invalid Block и Replaced Block следуют одна за другой до конца страницы.
В области RBA находятся две таблицы в двух блоках. Таблица во втором блоке используется как резервная на случай, если информация в первой окажется недостоверной.

3. Контроль и коррекция ошибок.

Для увеличения достоверности данных могут использоваться алгоритмы контроля и коррекции ошибок (Error Checking and Correction - ECC). Эта дополнительная информация может помещаться в свободное пространство Spare Area.

 

*) Примечание: NAND ~ Not AND  - в булевой математике обозначает отрицание «И»