Официальный форум СВД Встраиваемые Системы
16 Декабря, 2017, 18:02:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Настройка параметров ECC у драйвера ETFS  (Прочитано 65 раз)
Endag
Интересующийся

Сообщений: 1


« : 22 Ноября, 2017, 11:28:43 »

Версия QNX 6.4.0
Драйвер ETFS на NAND из bsp-ti-omap-l137-evm

Существует ли возможность задать в драйвере параметры используемого ECC?
Изначальный bsp был создан под старые slc nand чипы, которым не требовалось большой избыточности в отличии от современных.

Поэтому в имеющейся версии драйверя используется судя имени функции 1-битный ECC,
однако в структуре etfs_devio упоминаются функции для рассчета различных вариантов ECC:

Код:
struct etfs_devio {
unsigned memtype; /* Type of device */
unsigned clustersize; /* Size of a cluster */
unsigned sparesize; /* Size of a spare area after a cluster */
unsigned clusters2blk; /* Clusters in a block */
unsigned numblks; /* Number of blks */
unsigned numrblks; /* Total Number of blocks allocated to the raw area */
unsigned blksize; /* Size of an erase blk */
unsigned flags; /* Driver capability flags */
char id[16]; /* A name for the device */
void *cio; /* Points to a device specific io struct defined in the driver */
volatile int preempt; /* If no zero higher level wants us to preempt */
int reserved[16]; /* Future expansion */

unsigned (*crc16)(_Uint8t *buf, int len);
unsigned (*crc32)(_Uint8t *buf, int len);
int (*ecc)(_Uint8t *buf, _Uint8t (*vec)[3], int nvec, int correct);
int (*ecc32)(_Uint8t *buf, _Uint8t (*vec)[3], int nvec, int correct);
int (*ecc64)(_Uint8t *buf, _Uint8t (*vec)[3], int nvec, int correct);
int (*ecc128)(_Uint8t *buf, _Uint8t (*vec)[3], int nvec, int correct);
int (*ecc256)(_Uint8t *buf, _Uint8t (*vec)[3], int nvec, int correct);
void (*log)(int severity, const char *fmt, ...);
};

Вопрос в том, реально ли сушествуют эти функции или это указатели куда надо поместить собственные реализации.
И если эти функции уже реализованы тот как их правильно вызывать.
Записан
Владимир Махилёв
Сотрудник СВД ВС
Ветеран

Сообщений: 669



WWW
« Ответ #1 : 22 Ноября, 2017, 19:04:23 »

По умолчанию ecc() ссылается на ecc256, т.е. если в коде драйвера не вызывается явно ecc32/64/... используется старшая версия.
Размер ECC зависит от физического размера spare области страницы памяти. Данные для восстановления записываются именно туда и предназначены они в первую очередь для восстановления единичных 1битных ошибок.

Сделать свою реализацию можно. Она будет существовать параллельно с штатным вариантом (т.е. заполнять указатели не нужно) и необходимо самостоятельно обеспечить работу с ECC при записи и чтении. Вполне вероятно также, что некоторые контроллеры умеют подсчитывать ECC аппаратно. Например, обратите внимание на реализацию драйвера ETFS в BSP TI Jacinto 6 DRA74x
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2017 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 23 Ноября, 2017, 10:25:28