Перейти к содержанию
    

Размер out-of-band данных в YAFFS2

Здравствуйте, вопрос к тем, у кого есть опыт работы с YAFFS

Тут возникло глобальное недопонимание. Я настраиваю yaffs2 для применения на AT45DB321D -- NAND, сектор 512+16 байт. chunk делаю размером в 2 сектора флеши -- 1024 байт данные 32 байта на всё остальное.

В документации http://www.yaffs.net/yaffs-2-specification есть таблица Tag structure, из которой следует, что мне как раз хватает на всё, включая ECC на данные и на саму структуру тэгов тоже.

 

╔═══════════════╦═════════════════════════════════════╦═════════════════════╦═════════════════════╗
║ Field         ║ Comment                             ║ Size for 1kb chunks ║ Size for 2kB chunks ║
╠═══════════════╬═════════════════════════════════════╬═════════════════════╬═════════════════════╣
║ blockState    ║ Block state. non-0xFF for bad block ║ 1                   ║ 1                   ║
║ chunkId       ║ 32-bit chunk Id                     ║ 4                   ║ 4                   ║
║ objectId      ║ 32-bit object Id                    ║ 4                   ║ 4                   ║
║ nBytes        ║ Number of data bytes in this chunk  ║ 2                   ║ 2                   ║
║ blockSequence ║ sequence number for this block      ║ 4                   ║ 4                   ║
║ tagsEcc       ║ ECC on tags area                    ║ 3                   ║ 3                   ║
║ ecc           ║ ECC, 3 bytes/256 bytes of data      ║ 12                  ║ 24                  ║
║ Total         ║                                     ║ 30                  ║                     ║
╚═══════════════╩═════════════════════════════════════╩═════════════════════╩═════════════════════╝

 

Однако, когда вызываются мои функции чтения или записи chunk'а, мне передаётся oob_len равный 28 байт. Причина в том, что в файле yaffs_packedtags2.h есть структура:

struct yaffs_packed_tags2 {
    struct yaffs_packed_tags2_tags_only t;
    struct yaffs_ecc_other ecc;
};

А в yaffs_ecc.h

struct yaffs_ecc_other {
    unsigned char col_parity;
    unsigned line_parity;
    unsigned line_parity_prime;
};

 

Которые как раз и получаются размером 28 байт, если учесть выравнивание 4 байта. Т.е. на 12 байт для ECC для данных места не хватает.

 

Вопрос, как мне получить показатели, которые приведены в таблице в документации?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...