«Вставки» (Часть 1: Теория)

Уже на протяжении многих лет Вы, уважаемые пользователи задаётесь вопросом — «Что такое вставки…», но полноценного ответа на этот вопрос так ни от кого добиться не можете по различным причинам. Данная статья призвана приоткрыть завесу этой, не побоюсь слова, страшной тайны, охраняемой как производителями микросхем, так и многими компаниями разрабатывающими программное обеспечение для восстановления данных с Flash накопителей.

Так что же такое вставки ? На самом деле это совсем не вставки, а битые столбцы. Для того, что бы понять что такое битые столбцы мы рассмотрим принцип адресации массива ячеек и как ведёт себя программное обеспечение контроллеров (прошивка) в таких ситуациях.

Для того, что бы это понять обратимся к очень простому и наглядному скриншоту, представив, что у нас микросхема со стандартным для TLC памяти размером страницы 9216 байта и со стандартным размером блока 258 страниц:

1Исходя их скриншота система адресации микросхем памяти это обычная матрица состоящая из строк и столбцов, в которой кол-во столбцов равно размеру страницы и каждый байт страницы ни что иное как столбец, и строк, где каждая страница массива ячеек микросхемы является строкой. В начале этой статьи я не спроста сделал акцент на том, что вставки это не вставки, а битые столбцы (Bad Column), которые на нашем скриншоте помечены красной буквой X и при этом имеют повторяемость от странице к странице в пределах блока. На повторяемости позиций битых столбцов в пределах блока я делаю особый акцент, который необходимо всегда помнить !!! Но о других факторах повторяемости мы поговорим немного позже, потому что есть рад нюансов, которые завязаны на группировки блоков в плоскости, а пока что рассмотрим как действует контроллер в случаях если у накопителя используется система управления битыми столбцами.

Для этого обратимся к ещё одному скриншоту, который представляет из себя фрагмент какой то произвольной страницы имеющей размер 9216 байта:

2

В данном примере у микросхемы по позициям 4 и 6 находятся два битых столбца (байта). С точки зрения логики и здравого смысла записывать полезную информацию в эти байты нет никакого смысла, потому что информация находящаяся в этих байтах будет всегда содержать битовые ошибки, уменьшая тем самым шансы успешной работы ECC корректора, который к слову не может исправить бесконечное кол-во ошибок и его корректирующая способность жёстко ограничена применяемым в конкретно взятом случае алгоритмом. Следовательно раз нам не нужно в эти байты записывать информацию, то эти участки можно обойти. Вот на этом этапе как я уже успел заметить, многие пользователи с упорством достойным похвалы пытаются применить знания полученные при работе с жёсткими дисками и многие из Вас считают, что эти байты заменяются байтами из резерва с пометкой в трансляторе. Скажу откровенно, если Вы так думаете, то Вы очень далеки от истины, которая гораздо проще и эффективнее, чем может показаться на первый взгляд, но тем не менее, какая то доля правды в этих домыслах всё же есть, но об этом чуть позже, для начала посмотрим как на самом деле поступит контроллер накопителя в такой ситуации. Как мы помним, в нашем случае на странице есть два битах столбца (2 байта), находящихся в позиции 4 и 6, и допустим нам необходимо записать на страницу начиная с нулевой позиции слово, скажем — информация, имеющее размер 10 байт (10 столбцов). Вот как это сделает контроллер:

3

Как видим никакого замещения из резервной области не было, контроллер просто раздвинул наше слово, что бы его буквы не попали на битые участки. При чтении контроллер читает всю страницу целиком и по таблице битых столбцов сдвигает данные, что бы получилось целое слово.  Как видим, ничего сложного в механизме работы битых столбцов нет, всё крайне просто и очевидно за исключениями неких нюансов, о которых ранее упоминал.

Эти нюансы связаны особенностью повторяемости позиций битых столбцов. Как я уже писал, в пределах блока у всех страниц позиции битых столбцов идентичны, но тем не менее при всей кажущейся простоте механизма позиции вставок далеко не всегда одинаковы для всех блоков и повторяемость позиций вставок для блоков основана на одном крайне важном параметре — кол-ве плоскостей.  У современных микросхем памяти кол-во плоскостей может варьироваться и быть таким — 1, 2, 4, у самых современных микросхем, которые ещё не поступили в массовое производство на момент написания этой статьи кол-во плоскостей может быть 8. Но что нам даёт кол-во плоскостей ? Для этого рассмотрим взаимосвязь периода повторяемости битых столбцов по отдельности для наиболее часто встречающихся случаев:

1. Распределение блоков для микросхем с одной плоскостью:

У микросхем с одной плоскостью все блоки идут с линейной нумерацией в пределах одного слоя (Plane), по этой причине у данных микросхем позиции вставок для всех страниц всех блоков одинаковы и так называемые период следования вставок равен единице. Этот случай самый простой и по этой причине не нуждается в особых комментариях.

2. Распределение блоков для микросхем с двумя плоскостями:

Данный случай несколько сложнее. В случае если у микросхемы две плоскости (Plane), то все страницы из блоков относящихся к плоскости 0 будут иметь одну таблицу позиций вставок, а все страницы из блоков относящихся к плоскости 1 будет иметь другую, собственную таблицу вставок. Такое разделение связано с тем, что плоскости, они же слои, это независимые массивы ячеек объединённые лишь логической частью микросхемы, при этом каждый такой массив ячеек не обязан иметь равнозначные позиции битых столбцов, что мы и видим на практике. Принцип распределения блоков для микросхем с двумя плоскостями можно посмотреть на скриншоте:

 4

Если обратите внимание на таблицу разделение блоков по плоскостям, то становится видно, что существует разделение на чётные и нечётные блоки. В результате такого разделения мы и получаем ситуацию, когда все страницы чётных блоков имеют одну таблицу позиций битых столбцов, а все страницы нечётных блоков другую таблицу позиций битых столбцов. Следовательно период следования «вставок» равен 2 (через блок), то есть равен кол-ву плоскостей.

3. Распределение блоков для микросхем с четырьмя плоскостями:

Микросхемы с четырьмя плоскостями не на много сложнее микросхем с двумя плоскостями, различие заключается лишь в принципах разделения блоков по плоскостям, который можно посмотреть на скриншоте, в остальном ситуация та же, что и с микросхемами имеющими две плоскости за тем исключением, что у микросхем с четырьмя плоскостями 4 таблицы позиций битых столбцов, то есть на каждую плоскость по таблице.

5

Исходя из скриншота все страницы всех блоков плоскости 0 будут иметь одну таблицу позиций битых столбцов (вставок), все страницы из всех блоков плоскости 1 будут иметь свою таблицу позиций вставок и т.д. Как уже писалось ранее, это происходит потому, что плоскости это не один массив ячеек, а разные, с собственными уникальными дефектами. В результате для микросхем с 4 плоскостями у нас 4 таблицы позиций битых столбцов и период следования вставок равен 4, то есть 4 плоскостям.

Кроме нюансов с периодом повторяемости позиций битых столбцов (вставок) существует ещё один нюанс — размерность битого столбца (вставки). Вставки бывают двух размеров — 1 байт и 2 байта, при этом наиболее часто встречающийся вариант 2 байта.

Если рассматривать историю развития системы управления битыми столбцами, то можно сказать, что идея пришла от производителя NAND памяти Toshiba в момент появления первого поколения TLC памяти, причины по которым они не сделали обход битых столбцов аппаратным, как это реализовано у микросхем Micron и Samsug неизвестны, возможно конечно, что из-за желания сэкономить, ведь TLC память Toshiba (Sandisk) стоит дешевле, чем аналоги других производителей. Но нас сейчас больше интересуют не аппаратные реализации и не цены, а всё же размерность битых столбцов (вставок). Раз родоначальником данной идеи была компания Toshiba, то производители накопителей при использовании памяти этого производителя стараются использовать рекомендованные алгоритмы работы, а раз Toshiba в документации к микросхемам пишет, что размерность битого столбцы 2 байта, то и производители как правило используют 2 байта, тем более, что сами микросхемы Toshiba и Sandisk содержат в себе таблицу двухбайтовых битых столбцов для каждой плоскости и если в процессе производства накопителя результаты тестов памяти совпадают с этой таблицей, то её и используют.

Откуда же берутся 2 байта в размерности битых столбцов. Здесь всё просто, на этапе производства микросхема не имеет разрядности, паспорта (идентификатора) и прочих сконфигурированных модулей как у готовой к продаже, соответственно у этих микросхем может быть 2 варианта разрядности — 8 и 16 бит, вот тут и получается, что в угоду совместимости и унификации программных кодов размерность вставок 16 бит, то есть 2 байта, так как 16 битная память за один такт при запросе контроллера возвращает как раз 2 байта. Из этого же момента напрямую получается ещё одно очень важное правило — при размерности вставки 2 байта позиции вставок всегда кратны двойке, к примеру не может быть позиции 3 для двухбайтовой вставки, она может быть только 2:

6

То, что писалось выше для двухбайтовых битых столбцов (вставок) конечно наиболее часто встречающаяся ситуация, но тем не менее производители накопителей достаточно часто используют эту технологию для в так называемом софтовом режиме, когда таблица позиций вставок хранится не в специальной области микросхемы, как это делается у TLC Toshiba (Sandisk), а где то в модулях служебной информации. Причина появления «софтовых» вставок очень проста и в первую очередь основана на экономической составляющей, ведь производителю накопителя выгоднее продать потенциально проблемную память конечному потребителю, чем списать брак и получить убытки. Вот для этого у производственных утилит есть специальный режим работы, который по результатам собственного, можно сказать независимого тестирования принимает решение использовать то, что зашито компанией Toshiba (Sandisk) в микросхему или нет и если тест показывает большее число битых столбцов, то производители накопителя запросто могут отказаться от штатной таблицы хранящейся в микросхеме и использовать собственную основанную на результатах теста, при этом если кол-во «вставок» превышает 24 на плоскость, то переходят к работе в однобайтовом режиме, в котором допускается до 48 позиций битых столбцов, но и это ещё не всё, в некоторых случаях производители даже сознательно уменьшают размерность корректирующего кода, что бы можно было закрыть как можно больше однобайтовых битых столбцов.

Всё, что было сказано ранее про размерность вставок относилось к TLC микросхемам Toshiba и Sandisk. А как обстоят дела с микросхемами других производителей ? Здесь ситуация не однозначна, хоть система управления битыми столбцами (Bad Column Management) и разработана и запатентована компанией Toshiba, некоторые производители контроллеров и накопителей видимо имея разрешение вышеуказанной компании имеют право применять данную технологию и при использовании других микросхем в софтовом режиме, при этом наличие «вставок» может встречаться как в случае применения MLC, так и TLC микросхем любых производителей, к примеру Hynix и в более редких случаях при использовании памяти Samsung. Из практики такие случаи встречались на накопителях использующих контроллеры к примеру Phison Electronics и менее популярных контроллерах Китайского производства. Единственное, что необходимо помнить, что «вставки» в таких случаях за редкими исключениями как правило однобайтовые и первым признаком наличия таких вставок может служить проблема с определением типа ECC.

Отдельно стоит рассказать про «вставки» у современных микросхем TLC Toshiba и Sandisk произведённых с применением технологии Multi LUN. У данного типа микросхем может существовать разделение таблиц битых столбцов не только по плоскостям, а ещё и по LUN (Logical Unit), которые так же как и плоскости являются отдельными независимыми массивами ячеек в отличие от микросхем выполненных по классической технологии. Смысл разделения таблиц в таких случаях такой:

Допустим у нас есть микросхема 98 3C 9A 92. У данной микросхемы 2 LUN, как указано в особых правилах чтения:

7

 и каждый LUN имеет по 4 плоскости, в результате чего не редки случаи, когда контроллеры для микросхем используют 4 таблицы вставок для первого LUN и 4 таблицы вставок для второго LUN, в результате чего у нас получается 8 таблиц позиций битых столбцов. Иными словами для первой половины дампа у нас получается одни 4 таблицы позиций битых столбцов, а для второй половины дампа свои 4 таблицы позиций битых столбцов.

Крутевич Алексей
PC3000 Flash technical support

 

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (4 голосов, средний: 5,00)
Loading...Loading...

Об авторе Крутевич Алексей

PC3000 Flash Technical Support and Development
Запись опубликована в рубрике PC-3000 Flash с метками , , , , , , , . Добавьте в закладки постоянную ссылку.

3 комментария на ««Вставки» (Часть 1: Теория)»

  1. Михаил говорит:

    Отличная статья!
    Теперь очень хочется увидеть практику удаления этих самых вставок-битых столбцов. И конечно же в видео формате.

    • Здравствуйте, Михаил. Видео сделаем конечно, но это не просто, потому что всевозможных вариантов существует великое множество и охватить даже четверть случаев будет потенциально проблематично.

      По этому гораздо проще и эффективнее если Вы как пользователь нашего комплекса обратитесь ко мне или другим инженерам технической поддержки и мы покажем Вам на практике как это делается. Для этого потребуется лишь немного Вашего времени и прочитанный Вами дамп микросхемы из флешки или карты памяти контроллер которой использует Bad Column Management.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>