Низкоуровневая программно-техническая экспертиза iOS

Содержание

Как восстановить nand flash на iphone. В данном посте мы опишем, как получить образ NAND и использовать FTL-метаданные для восстановления удаленных файлов на устройствах, использующих процессор A4.

Низкоуровневая программно-техническая экспертиза iOS

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

image

Механизмы шифрования и защиты данных файловой системы iOS теперь хорошо документированы и поддерживаются многими утилитами ПТЭ (программно-технической экспертизы или forensics). В качестве основной области хранения данных iOS-устройства используют NAND flash-память, но создание физических образов обычно имеет отношение к "dd image" логических разделов. Уровень трансляции Flash в iOS для текущих устройств имеет программную основу (реализован в iBoot и ядре), что означает, что CPU имеет прямой доступ к сырой NAND-памяти. В данном посте мы опишем, как получить образ NAND и использовать FTL-метаданные для восстановления удаленных файлов на устройствах, использующих процессор A4. Информация, представленная здесь, основана на серьезной работе по реверс-инжинирингу, выполненной командой iDroid/openiBoot.

Чтение NAND-памяти

iOS-устройства используют один или несколько идентичных чипов, адресуемых номером CE ("chip enable"). Фактические параметры геометрии (число CE, число блоков на CE, число страниц на блок, размер страниц и резервной области) зависят от модели устройства и общей емкости хранилища. Физический адрес составляется из CE-номера чипа и физического номера страницы (PPN) на этом чипе.

Из-за ограничений NAND в операционных системах распространены механизмы трансляции (FTL), которые позволяют использовать NAND-память как обычное блочное устройство, оптимизируя при этом ее производительность и срок службы. Главная цель FTL заключается в уменьшении операций стирания и распределения их по всем блокам. С точки зрения ПТЭ, интересным побочным эффектом здесь является то, что при перезаписи логического блока на уровне блочного устройства старые данные на физическом уровне обычно не стираются сразу. Поэтому при поиске удаленных данных работа с сырым образом NAND может быть очень полезна.

Можно прочитать сырые данные NAND с помощью openiBoot, но передача данных по USB на данный момент довольно медленна, что делает этот способ непрактичным для выгрузки содержимого всей Flash-памяти.

Начиная с iOS 3 на ram-дисках Apple iOS можно найти программу ioflashstoragetool. Данная утилита может производить множество низкоуровневых операций, касающихся flash-хранилища и может читать сырые NAND-страницы и резервные области (не производя никакого рода дешифрования). Данная функциональность предоставлялась сервисом ядра IOFlashControllerUserClient.

В iOS 5 большая часть функций, предоставлявшихся данным интерфейсом IOKit, была убрана. Чтобы создать дамп посредством этого интерфейса, мы можем загрузить ram-диск с помощью более старой, четвертой версии ядра iOS. Это отлично работает, однако в таком случае мы потеряем способность использовать имеющийся код ядра для атаки перебором более новых связок ключей iOS 5. Чтобы выгрузить NAND под пятой версией ядра iOS, мы заново реализовали часть функции IOFlashControllerUserClient::externalMethod, ответственной за функциональность чтения. Когда наш инструмент выгрузки запускается под пятой версией ядра iOS, он замещает данную функцию той, что обрабатывает селектор kIOFlashControllerReadPage.

Кроме того, мы можем установить флаг загрузки nand-disable-driver, чтобы предотвратить высокоуровневый доступ к NAND и гарантировать, что ее содержимое не изменится в ходе получения.

Уровень преобразования Flash в iOS

Virtual Flash Layer (VFL) ответственен за переназначение bad-блоков и представление NAND, не содержащее ошибок, для FTL-слоя. VFL-слой знает физическую геометрию и транслирует виртуальные номера страниц, используемые FTL, в физические адреса (номер CE + номер физической страницы).

Слой FTL оперирует над VFL и предоставляет операционной системе интерфейс блочного устройства. Он транслирует номера логических страниц блочного устройства (LPN) в виртуальные номера страниц, занимается wear leveling и сборкой мусора в для блоков, содержащих устаревшие данные. На устройствах, поддерживающих аппаратное шифрование, все страницы, содержащие структуры данных, связанные с VFL и FTL, зашифрованы статическим ключом метаданных.

В различных версиях iOS использовались следующие варианты подсистем FTL:

  • iOS 1.x и 2.x : "legacy" FTL/VFL
  • iOS >= 3 : YaFTL / VSVFL
  • Начиная с iOS 4.1, некоторые из новых устройств оснащены PPN (Perfect Page New) NAND, которая использует особый PPNFTL.

PPN-устройства имеют свой собственный контроллер с прошивкой, которая может быть изменена через интерфейс IOFlashControllerUserClient, но большая часть работы FTL похоже все еще выполняется программно – с помощью YaFTL поверх нового PPNVFL.

На основании кода openiBoot мы написали минимальную read-only реализацию YaFTL/VSVFL на Питоне, чтобы получить возможность просматривать образы NAND как блочные устройства. В сочетании с реализацией HFS+ на Питоне она позволяет извлечение логических разделов для получения эквивалента dd-image. Далее нам нужно понять механизмы YaFTL, чтобы воспользоваться дополнительными данными, доступными в образе NAND.

YaFTL

  • Контекстные страницы содержат всю информацию, необходимую для инициализации YaFTL, включая массив userTocPages, который указывает на актуальные индексные страницы. Он также хранит счетчики стирания для для wear-levelling.
  • Индексные страницы хранят указатели на страницы пользователя
  • Страницы пользователя содержат данные блочного устройства

Следующий рисунок обобщает процесс преобразования YaFTL:

В ходе нормальной работы в каждый момент лишь один суперблок каждого типа является "открытым": страницы записываются последовательно в манере log-block. Когда текущий суперблок заполнен, YaFTL находит пустой суперблок для продолжения процесса. старевшие пользовательские данные стираются только в процессе работы сборщика мусора.

Последние страницы индексного и пользовательского суперблоков используются для хранения BTOC (таблица содержимого блока). Для пользовательских блоков BTOC перечисляет логические номера страниц, хранимые в этих блоках. В индексном блоке BTOC хранит первые логические номера страниц, на которые указывает каждая из индексных страниц.

Восстановление FTL производится при загрузке, если FTL не был должным образом отмонтирован (после kernel panic или жесткой перезагрузки, например) и контекстная информация не была зафиксирована на flash-носителе. Функции восстановления FTL приходится исследовать все блоки (используя BTOC для ускорения процесса), чтобы восстановить корректный контекст.

Метаданные резервной области

Поле lpn позволяет FTL-коду проверять корректность преобразования при чтении страницы. Оно также используется в ходе процесса восстановления FTL, чтобы обнаруживать страницы в "открытых" суперблоках, которые не имеют BTOC.

В поле usn записывается глобальный порядковый номер обновления во время записи страницы. Этот номер увеличивается каждый раз при фиксации новой версии контекста FTL или когда суперблок заполнен и происходит открытие нового суперблока. Данное поле позволяет легко сортировать суперблоки по возрасту.

"Отбеливание" метаданных

Признак того, что отбеливание метаданных включено, находится в поле флагов специальной страницы NANDDRIVERSIGN.

Восстановление удаленных файлов

  • Считать каждую резервную область в образе, чтобы найти страницы с типом PAGETYPE_LBN, и прочитать поле lpn (метод грубой силы)
  • Пробежать каждый непустой пользовательский суперблок, прочитать BTOC, где это возможно, или просканировать все страницы, если блок не полный

Когда таблица поиска построена, мы можем легко обратиться ко всем доступным версиям заданной логической страницы. Чтобы восстановить удаленные данные на разделе мы реализовали простой алгоритм, похожий на метод вырезания данных из журнала HFS:

  • Перечислить все идентификаторы файла на разделе данных в его текущем состоянии: мы используем обычную трансляцию FTL и EMF-ключ для расшифровки данных.
  • Получить местоположение текущего файла каталога и файла аттрибутов (диапазоны LBA)
  • Для каждого LBA, принадлежащего файлу каталога
    • Для каждой версии текущего LBA
      • Считать страницу для данной версии, расшифровать ее с помощью EMF-ключа
      • найти в странице записи файла каталога, файловые идентификаторы которых не присутствуют в текущем списке файловых идентификаторов (удаленные файлы)
      • Пробежать в цикле все возможные ключи шифрования и версии первого логического блока, пока расшифрованное содержимое не совпадет с магическим числом (обычная магия файловых заголовков). См. функцию isDecryptedCorrectly (которую можно улучшить).
      • если найдены ключ шифрования и USN первого блока, считать следующие блоки файлов, используя данный USN как ссылку. Другой метод – начать считывать страницы, начиная с первого найденного блока файлов, следуя "порядку записи" FTL: читать до конца суперблока, затем продолжить в следующем с более высоким значением USN, и так, пока не будут найдены все блоки файла.

      Данный наивный алгоритм дает хорошие результаты на "статичных" файлах вроде изображений, где весь файл записывается один раз и более не обновляется. Для файлов вроде баз данных SQLite понадобится больше логики, чтобы восстановить состоятельные снимки последовательных версий. Для этого можно, например, обнаруживать акты записи в заголовок файла или отслеживать модификации в записях файла каталога (дата модификации файла).

      Один из файлов, который было бы интересно восстановить – системное хранилище ключей. Если атакующий смог получить доступ к первой версии системного хранилища ключей (без установленного пароля, сразу после восстановления прошивки), он мог бы затем получить доступ ко всем ключам классов без необходимости в атаке пароля пользователя. Однако, эксплуатировать более старые версии хранилища ключей невозможно из-за второго слоя шифрования: полезная нагрузка systembag.kb шифруется ключом BAG1, который хранится в уничтожаемой области и принимает случайное значение каждый раз, когда на диск записывается новая версия файла (когда пользователь меняет свой пароль). Данный механизм, очевидно, был разработан для предотвращения подобных атак, как объяснено в выступлении "Securing application data" с Apple WWDC 2010 (Сессия 209).

      Уязвимость стирания в iOS 3.x

      Инструменты получения содержимого NAND и вырезания данных теперь доступны в репозитории iphone-dataprotection. Дополнительные подробности также доступны на вики. Наконец, большое спасибо Патрику Вилдту и команде openiBoot за их работу над iOS FTL, которая позволила нам создать эти инструменты.

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

      Просмотров:(2566) 5.00 (6) Оценки, комментарии

      2017-05-25 Дата последнего изменения: 2021-02-28

      В статье рассматриваются особенности применения микросхем NAND FLASH, методы разметки страниц и управления плохими блоками, даны рекомендации по программированию на программаторах ChipStar.

      CОДЕРЖАНИЕ:

      1. ТЕОРИЯ

      1.1. Отличие микросхем NAND FLASH от обычных микросхем

      Если не вникать в тонкости технологий, то отличие микросхем NAND от других микросхем памяти заключается в следующем:

      • Микросхемы NAND имеют очень большой объем.
      • Правильно записанная микросхема NAND может давать единичные ошибки при последующем чтении.
      • Микросхемы NAND могут иметь плохие (сбойные) блоки.
      • Размер страницы записи не является степенью 2.
      • Запись в микросхему осуществляетсятолько страницами, стираниеминимум блоками.

      Есть еще несколько отличий, но первые три особенности являются ключевыми. Больше всего проблем доставляет наличие ошибок и плохих блоков.

      1.2. Разновидности микросхем NAND FLASH

      Первоначально NAND FLASH были только одного типа: обычные (RAW) NAND. И на сегодняшний день эти микросхемы составляют большинство микросхем типа NAND. Однако производители микросхем, быстро начали расширять возможности применения NAND. Это стало приводить к появлению новых разновидностей NAND. Наиболее распространенные на сегодня разновидности NAND и их основные отличия сведены в таблицу:

      Примечание: * У некоторых видов микросхем внутренее исправление ошибок может быть отключено.

      Основное отличие разных видов микросхем NAND сводится к различиям в трех факторах:

      1. Физический интерфейс и система команд
      2. Кто занимается генерацией кодов исправления ошибок: внешнее устройство (host) или сама микросхема
      3. Кто должен управлять плохими блоками: внешнее устройство (host) или сама микросхема

      В статье ниже описаны обычные микросхемы NAND или RAW NAND.

      Микросхемы со встроенной генерацией кодов исправления ошибок (BENAND в терминологии Toshiba) отличаются от обычных NAND, только тем что сами исправляют некоторое количество одиночных ошибок, что несколько упрощает работу с ними: в большинстве случаев они могут быть считаны и записаны как обычная микросхема FLASH, однако если ошибок на странице окажется много весь блок содержащий страницу должен быть помечен как "плохой". Поэтому все что здесь написано о плохих блоках в полной мере относится и к ним.

      О микросхемах c NAND с последовательным интерфейсом более подробно написано здесь.

      О микросхемах eMMC NAND более подробно можно почитать в этой статье.

      1.3. Организация микросхем NAND FLASH

      Более подробно об организации и структуре микросхем NAND можно прочитать в специальной литературе, мы же отметим, что:

      • Микросхемы NAND организованы в страницы (pages), страницы в блоки (bloks), блоки в логические модули (lun).
      • Размер страницы NANDне кратен степени 2.
      • Страница состоит из основной и запасной (spare) областей.

      По замыслу разработчиков NAND в основной области должны находятся сами данные, а в запасной (резервной) областимаркеры плохих блоков, контрольные суммы основной области, прочая служебная информация.

      Если говорят о размере страницы микросхемы NAND 512 байт или байт, то речь идет о размере основной области страницы, без учета запасной.

      1.4. Способы использования запасной области страницы

      Еще раз напомним, что по замыслу разработчиков NAND микросхем в запасной области должны находится: маркеры плохих блоков, контрольные суммы основной области данных, прочая служебная информация.

      Большинство разработчиков описывает только место расположения маркеров плохих блоков в поставляемых микросхемах. По остальным аспектам использования запасной области даются общие рекомендации и алгоритм вычисления ЕСС, обычно по Хэмингу. Samsung идут несколько дальше, разработав рекомендации с названием " Запасная область флэш-памяти NAND. Стандарт назначения " ("NAND Flash Spare Area. Assignment Standard", 27. April. 2005, Memory Division, Samsung Electronics Co., Ltd).

      Итак, этот стандарт предполагает следующее использование запасной области:

      Для микросхем с размером страницы 2048+64 байт основная и запасная область страницы разбивается на 4 фрагмента (сектора) каждая:

      ОбластьРазмер (байт)Фрагмент
      Основная512Сектор 1
      512Сектор 2
      512Сектор 3
      512Сектор 4
      Запасная16Сектор 1
      16Сектор 2
      16Сектор 3
      16Сектор 4

      Каждому фрагменту их основной области ставится в соответствие фрагмент запасной области.

      Но это не единственный "стандарт" для распределения памяти страниц, только нам известны их несколько десятков, например:

      • "NAND FLASH management under WinCE 5.0", NXP;
      • "Bad Block Management for NAND Flash using NX2LP", December 15, 2006, Cypress Semiconductor;
      • "OLPC NAND Bad Block Management", OLPC.

      1.5. Образ NAND и двоичный образ

      Вы можете столкнуться с двумя вариантами образа для записи:

      1. Двоичный файл не разбитый на страницы и без запасной области.
        Такой вариант возможен если вы — разработчик устройства с использованием NAND или получили такой файл от разработчика. Такой образ подходит для записи в микросхемы со страницами любого объема и любым распределением запасной области, только нужно знать каким методом будет формироваться запасная область.
      2. Образ, считанный из другой микросхемы (образца), содержащий запасную область с разметкой плохих блоков, служебной информацией и контрольными кодами.
        Такой образ можно записать только в микросхему с точно такими же размерами страниц и блоков.

      Если ваш случай — первый, и вы — разработчик, то вы наверняка имеете всю необходимую информацию. Перед записью нужно преобразовать исходный двоичный файл в образ NAND. Смотрите раздел "Преобразование двоичного образа в образ NAND"

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

      1.6. Заводская маркировка плохих блоков

      Единственное что более или менее стандартизовано, так это заводская маркировка плохих блоков.

      • Плохие блоки маркируются на 0-й или 1-й странице для микросхем с размером страницы менее 4К.
      • Для страниц 4Ки более, маркировка может находиться на последней странице блока.
      • Сам маркер плохих блоков располагается в запасной области страницы в 5-м байте для маленьких страниц (512 байт) и в 0-м байте для больших (2K).
      • Маркер плохого блока может иметь значение 0x00 или 0xF0для маленьких страниц и 0x00для больших.
      • Хорошие блоки всегда маркируются 0xFF.
      • В любом случае значение отличное от 0xFF программатор воспринимает как маркер плохого блока.
      • Как правило, в современных NANDплохой блок полностью заполнен значением 0x00.

      Есть одна проблема: плохой блок можно стереть. Таким способом можно потерять информацию о плохих блоках микросхемы.

      Однако, если микросхема уже работала в устройстве, далеко не всегда используется такая методика маркировки плохих блоков. Иногда даже информация о плохих блоках не хранится в памяти 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 можно просматривать в закладке "Основная память":

      Рисунок: Двоичный образ NAND

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

      2.3.Стирание NAND

      По умолчанию программатор не стирает плохие блоки, но если отключить опцию "Проверка и пропуск плохих блоков" плохие блоки могут быть стерты и разметка плохих блоков может быть потеряна. Отключать эту опцию нужно только в случае необходимости.

      Рисунок: Проверка и пропуск плохих блоков NAND

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

      2.4. Тестирование микросхемы на отсутствие записи

      По умолчанию программатор игнорирует все плохие блоки при проверке, но если отключить опцию "Сканирование и пропуск плохих блоков" плохие блоки будут проверены что, естественно, приведет к ошибкам тестирования.

      Тестирование NAND

      2.5. Запись готового образа в микросхему

      Запись образа NAND в микросхему несколько отличается от обычных FLASH микросхем. Прежде всего должны совпадать размеры страниц образа и целевой микросхемы. Если используется управление плохими блоками должны совпадать размеры блоков образа и микросхемы.

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

      Способ 1: игнорирование плохих блоков

      Простое копирование с игнорированием плохих блоков (плохие блоки пишутся так же, как нормальные).

      Наиболее хорошо подходит для копирования микросхем NAND, не вникая в ее внутреннюю структуру, при условии, что записываемая микросхема не содержит плохих блоков. Если в исходном образе присутствовали плохие блоки, в итоге образуются ложные плохие блоки. Появление ложных плохих блоков не скажется на функционировании устройства. Однако, если микросхема уже содержит плохие блоки, при попытке записи в такую микросхему появятся сбойные блоки с непредсказуемыми последствиями. Совет: можно попытаться стереть микросхему полностью, включая плохие блоки, затем выполнить копирование. Если запись в плохой блок завершится успешно (такое часто бывает), ваше устройство будет функционировать правильно, в дальнейшем программное обеспечение устройства выявит плохой блок и заменит его хорошим в соответствии со своим алгоритмом работы.

      Способ 2: обход плохих блоков

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

      Способ 3: пропуск плохих блоков

      Исходный образМикросхема
      (исходное состояние)
      Микросхема
      (результат)
      Блок 0
      хороший
      Блок
      чистый
      Блок 0
      хороший
      Блок 1
      плохой
      Блок
      чистый
      Блок 2
      хороший
      Блок 2
      хороший
      Блок
      чистый
      Блок 3
      хороший
      Блок 3
      хороший
      Блок
      плохой
      Блок
      плохой
      Блок 4
      хороший
      Блок
      чистый
      Блок 4
      хороший
      Граница записи
      Блок 5
      хороший
      Блок
      чистый
      Блок
      чистый

      Запись с пропуском плохих блоков предполагает что в устройстве используется именно такой алгоритм управления плохими блоками, а не какой-либо другой. При этих условиях гарантировано правильное копирование информации.

      Способ 4: запись только гарантированно бессбойной области

      В большинстве современных NAND микросхем первые блоки (как минимум один) гарантированно не имеют сбоев. Во многих устройствах в начале микросхемы располагается код загрузчика и операционной системы устройства. Часто бывает достаточно копирования только этих областей.

      Рисунок: Запись NAND

      В диалоге настроек режимов записи укажите записываемый размер в блоках.

      Другие способы управления плохими блоками

      Программное обеспечение программаторов ChipStar поддерживает любые алгоритмы управления плохими блоками NAND при помощи внешних плагинов. При наличии установленных плагинов описания дополнительных методов появляются в списке "Управление плохими блоками NAND". Настроить параметры выбранного метода можно нажав кнопку "Внешний плагин".

      Использование кодов, исправляющих ошибки (ECC)

      Использование кодов, исправляющих ошибки позволяет восстанавливать одиночные ошибки на странице NAND.

      Могут быть использованы разные алгоритмы, восстанавливающие одиночные ошибке в секторе. В зависимости от алгоритма ECC, может быть восстановлено разное количество ошибок на сектор (512+16 байт). Под термином "одиночные" понимается ошибка только в одном бите данных. Для NAND с размером страницы 512+16 байт понятие "сектор" и "страница" совпадают. Для NAND с большим размером страниц программатор ChipStar использует схему разметки страницы на сектора, как описано выше. В установках записи или верификации можно указать, сколько ошибок на сектор может исправлять используемый в вашем устройстве алгоритм. Соответственно, микросхемы с допустимым количеством ошибок не будут забракованы, информация о количестве исправимых ошибок выводится в окне статистики:

      Рисунок: Верификация NAND. Ошибки ECC

      Информацию о количестве допустимых ошибок на сектор для каждой конкретной микросхемы можно уточнить в документации на микросхему. Все вновь добавляемые микросхемы NAND вносятся в базу данных программатора с учетом количества допустимых ошибок.

      При самостоятельном добавлении микросхем:

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

      Для новых микросхем NAND производства Samsung значение допустимого количества ошибок на сектор закодировано в составе идентификатора микросхемы. Поэтому, для таких микросхем допустимое количество ошибок на сектор также будет установлено правильно.

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

      Программное обеспечение программатора ChipStar предлагает косвенный статистический способ выявления и устранения одиночных ошибок. Способ позволяет выявить только неустойчивые ошибки с не гарантированной достоверностью. Для выполнения чтения с выявлением ошибок нужно выбрать режим "Выборочное чтение" и на закладке "NAND" отметить флажок "Включить режим исправления ошибок"

      Рисунок: Чтение NAND

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

      Статистический алгоритм выявления ошибок работает следующим образом:

      1. Страница NAND считывается несколько раз подряд (не менее трех).
      2. Считанные данные побайтно сравниваются.
      3. Если ошибок сравнения не выявлено, предполагается, что страница не содержит ошибок.
      4. Если обнаружены ошибки при сравнении, страница считывается еще несколько раз.
      5. По каждой ошибке подсчитывается количество считанных единиц и нулей.
      6. Правильным значением ("0" или "1") считается, то, которых оказалось больше.

      Алгоритм хорошо работает в том случае, если вероятность ошибки в конкретном бите микросхемы меньше 0.5. При чтении микросхемы ведется подсчет "исправленных" ошибок и вероятности правильного чтения.

      2.6. Преобразование двоичного образа в образ NAND

      Все описанное выше больше касалось копирования NAND и записи по образцу микросхемы, однако часто бывает нужно записать исходный бинарный образ программы в чистую микросхему. Перед записью нужно преобразовать двоичный образ в образ NAND, добавив к каждой странице запасную область и правильно заполнив ее. Для этого откройте ваш двоичный файл, выберите пункт меню "Правка|Переключить режим NAND редактора". Появится диалог:

      Рисунок: Редактировать как NAND

      Задайте режим преобразования в формат NAND: "Образ двоичный. ", укажите размер страницы и блока NAND или выберите необходимую микросхему. Выберите формат запасной области. Программатор поддерживает простое заполнение области значениями FF встроенными средствами и другие способы при помощи плагинов. Вместе с программатором поставляется плагин, реализующий стандарт назначения запасной области, рекомендованный Самсунг.

      Если вам необходимо реализовать какой-либо иной вариант распределения — сообщите нам, и мы подготовим соответствующий плагин, либо вы можете реализовать необходимый плагин самостоятельно.

      2.7. Совместимость с образами NAND, считанными другими программаторами

      Если у вас есть образ NAND, считанный другим программатором или полученный из другого источника, его нужно преобразовать в формат, пригодный для записи программатором ChipStar.

      Для этого выполните следующие действия:

      • Откройте ваш файл, выберите пункт меню "Правка|Переключить режим NAND редактора". Появится диалог, как показано выше.
      • Задайте режим преобразования в формат NAND: "Образ уже NAND.", укажите размер страницы и блокаNAND или выберите необходимую микросхему. Нажмите "Продолжить".
      • В редакторе появится закладка "NAND" и начнется сканирование образа на плохие блоки.
      • Полученный файл можно сохранить в формате NAND, файл получит расширение .nbin по умолчанию.

      Таким же образом нужно преобразовать файлы, созданные программным обеспечением ChipStar версий ранее, чем 3.5.1.0.

      5.00 (6)