Найти в Дзене
merkulss

BCH NAND Dump Check and Correction Tool: Скрипт для проверки и коррекции ошибок в дампах NAND-памяти

При работе с NAND-памятью одной из ключевых задач является обеспечение целостности данных. NAND-память подвержена ошибкам, которые могут возникать из-за износа ячеек, внешних помех или других факторов. Для исправления таких ошибок используются коды коррекции ошибок (ECC), такие как BCH (Bose–Chaudhuri–Hocquenghem). В этой статье я представляю скрипт BCH NAND Dump Check and Correction Tool, который позволяет проверять и корректировать ошибки в дампах NAND-памяти с использованием BCH-кодов.
Скрипт предоставляет следующие функции: Конфигурационный файл (например, dump.cfgecc) может выглядеть так:
{
"page_size": 2112,
"data_parts_per_page": 4,
"skip_ff": false,
"skip_00": false,
"prim_poly": 16427,
"t": 8,
"swap_bits": false,
"data_parts": [
{
"data_start_address": 0,
"data_size": 512,
"ecc_start": 514,
"ecc_length": 14,
"xor_mask_data": "0xFF",
"xor_mask_ecc": 0
},
Оглавление

Введение

При работе с NAND-памятью одной из ключевых задач является обеспечение целостности данных. NAND-память подвержена ошибкам, которые могут возникать из-за износа ячеек, внешних помех или других факторов. Для исправления таких ошибок используются коды коррекции ошибок (ECC), такие как BCH (Bose–Chaudhuri–Hocquenghem). В этой статье я представляю скрипт BCH NAND Dump Check and Correction Tool, который позволяет проверять и корректировать ошибки в дампах NAND-памяти с использованием BCH-кодов.

Пример работы
Пример работы

Основные возможности скрипта

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

  1. Коррекция ошибок:
    Исправление ошибок в данных с использованием ECC (Error Correction Code).
    Поддержка BCH-кодов с настраиваемыми параметрами (количество корректируемых ошибок, примитивный полином).
  2. Пересчет ECC:
    Пересчет ECC для данных с возможностью применения XOR-масок.
  3. Гибкая настройка:
    Поддержка конфигурационных файлов для хранения параметров.
    Возможность настройки размера страницы, количества частей данных, XOR-масок и других параметров.
  4. Поддержка больших дампов:
    Скрипт работает с дампами любого размера, обрабатывая данные постранично.
  5. Подробный вывод:
    В случае обнаружения ошибок скрипт выводит адрес ошибки, исходный и исправленный байты.
    В конце работы выводится общее количество исправленных ошибок и количество страниц, содержащих ошибки.

Пример использования

Установка и запуск

  1. Убедитесь, что у вас установлен Python 3 и необходимые библиотеки:
    pip install bchlib tqdm
  2. Скачайте скрипт и запустите его:
    python3 bch_nand_dump_check.py <путь_к_файлу>
  3. Выберите режим работы:
    1: Коррекция ошибок.
    2: Пересчет ECC.

Пример конфигурационного файла

Конфигурационный файл (например, dump.cfgecc) может выглядеть так:
{
"page_size": 2112,
"data_parts_per_page": 4,
"skip_ff": false,
"skip_00": false,
"prim_poly": 16427,
"t": 8,
"swap_bits": false,
"data_parts": [
{
"data_start_address": 0,
"data_size": 512,
"ecc_start": 514,
"ecc_length": 14,
"xor_mask_data": "0xFF",
"xor_mask_ecc": 0
},
{
"data_start_address": 528,
"data_size": 512,
"ecc_start": 1042,
"ecc_length": 14,
"xor_mask_data": "0xFF",
"xor_mask_ecc": 0
},
{
"data_start_address": 1056,
"data_size": 512,
"ecc_start": 1570,
"ecc_length": 14,
"xor_mask_data": "0xFF",
"xor_mask_ecc": 0
},
{
"data_start_address": 1584,
"data_size": 512,
"ecc_start": 2098,
"ecc_length": 14,
"xor_mask_data": "0xFF",
"xor_mask_ecc": 0
}
]
}

Пример вывода

При коррекции ошибок скрипт выводит информацию о каждом исправленном байте:
Error corrected at address 0x00000100: Original byte 0x12, Corrected byte 0x34

Error corrected at address 0x00000101: Original byte 0x56, Corrected byte 0x78

Total errors corrected: 2

Pages containing errors: 1

Настройка параметров

Скрипт поддерживает настройку через конфигурационный файл или интерактивный ввод параметров. Основные параметры:

  • page_size: Размер страницы (включая OOB) в байтах.
  • data_parts_per_page: Количество частей данных на странице.
  • skip_ff: Пропускать блоки, заполненные 0xFF.
  • skip_00: Пропускать блоки, заполненные 0x00.
  • prim_poly: Примитивный полином для BCH-кода.
  • t: Количество корректируемых ошибок.
  • swap_bits: Изменять порядок битов в байтах.
  • data_parts: Список частей данных на странице с параметрами:
    data_start_address: Начальный адрес данных.
    data_size: Размер данных.
    ecc_start: Начальный адрес ECC.
    ecc_length: Длина ECC.
    xor_mask_data: XOR-маска для данных.
    xor_mask_ecc: XOR-маска для ECC.

Заключение

Скрипт BCH NAND Dump Check and Correction Tool является удобным инструментом для работы с дампами NAND-памяти. Он позволяет не только обнаруживать и исправлять ошибки, но и пересчитывать ECC для данных. Гибкая настройка параметров делает его применимым для различных типов NAND-памяти и конфигураций.

bch_ecc

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