|
CycloneII и NAND Flash, ошибка при чтении ID |
|
|
|
Aug 4 2009, 06:03
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Всем привет. Итак, на плате с CycloneII имеется NAND Flash (от микрона, хотя это не суть важно, т.к. интерфейс один у всех). Для начала пробую работать с этой памятью с помощью Nios через PIO. Первая же простейшая операция чтения ID явно происходит неверно. 5 байт вместо ID кода получаю 0xfe,0x00,0x00,0x00,0xbc. Выкладываю код подпрограммы чтения ID и картинку, по которой я это делаю. Код void flash_r_id (unsigned char* res) { unsigned int i; IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_F_DQ_BASE, 1); //данные на выход IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_ALE_BASE,0); //ALE = 0 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_CE1_N_BASE,0); //CE = 0 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_CLE_BASE,1); //CLE = 1 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_WE_N_BASE,0); //WE = 0 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_RE_N_BASE,1); //RE = 1 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_DQ_BASE,0x90); // flash_delay();
IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_WE_N_BASE,1); //WE = 1 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_CLE_BASE,0); //CLE = 0 flash_delay(); IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_ALE_BASE,1); //ALE = 1 flash_delay();
IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_WE_N_BASE,0); //WE = 0 IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_DQ_BASE,0x00); // flash_delay(); IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_WE_N_BASE,1); //WE = 1 flash_delay(); flash_delay(); flash_delay(); flash_delay(); IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_ALE_BASE,0); //ALE = 0 flash_delay(); flash_delay(); flash_delay();
IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_F_DQ_BASE, 0); //данные на вход for (i = 0; i < 5; i++) { IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_RE_N_BASE,0); //RE = 0 flash_delay(); flash_delay(); *res = IORD_ALTERA_AVALON_PIO_DATA(PIO_F_DQ_BASE); IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_RE_N_BASE,1); //RE = 1 }
IOWR_ALTERA_AVALON_PIO_DATA(PIO_F_CE1_N_BASE,1); //CE = 0
}
void flash_delay() { unsigned char i; for(i = 0; i < 100; i++){}; } Вот, поглядите, может что забыл или вовсе не то делаю?
Эскизы прикрепленных изображений
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
 |
Ответов
|
Aug 12 2009, 07:19
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Ну так чё, кто подскажет алгоритм работы?
Мне в памяти надо хранить кадры изображения (5 блоков каждый) и, наверное, доп. информацию о битых блоках и прочее.
Сперва форматируем память, в процессе чего определяем какие блоки неисправны, получаем таблицу из 4096 байт, каждый из которых говорит о состоянии конкретного блока. Теперь хотелось бы записать эти данные на флеш, чтобы при последующем включении прочитать их. Модификация таблицы и запись будет происходить, по идее, каждый раз, когда появляется битый блок (как минимум), а может и после записи каждого кадра. Получается, что писать в один блок нельзя, надо несколько блоков под это дело выделить и писать поочередно (увеличить ресурс памяти).
Вообще как-то все запутано, может есть рекомендации/алгоритм или статься по FAT для Flash? Самое главное - как обеспечить надежную запись служебной таблицы всвязи с довольно частой ее перезаписью?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Aug 12 2009, 13:42
|
Группа: Участник
Сообщений: 6
Регистрация: 6-04-07
Из: Россия
Пользователь №: 26 821

|
Можно покопаться в исходниках файловой системы YAFFS (http://ru.wikipedia.org/wiki/YAFFS/ http://www.yaffs.net/), если есть много свободного времени.  В двух словах, надо разделить физический блок памяти (страницу NAND например) и логический. В таком случае вся реализация контроля целостности, равномерности распределения перезаписей и т.п. будет реализовываться при работе с физическим блоком. Вот тут как раз и используются те самые дополнительные байты в каждой странице NAND. Таким образом получается, что при работе с логическими блоками Вы уже не думаете о всех заморочках NAND, а просто используете "идеальные" блоки памяти, на которые можно хоть FAT положить. Но в Вашем случае можно вместо FAT и по проще самопальную "файловую систему" использовать. Цитата(torik @ Aug 12 2009, 11:19)  Самое главное - как обеспечить надежную запись служебной таблицы всвязи с довольно частой ее перезаписью? При указанном подходе отпадает надобность в такой таблице. Для каждого физического блока все служебные данных хранятся в его же дополнительных байтах. Если интересует, могу коротко рассказать суть. Когда то разрабатывал подобную FS (еще до появления YAFFS, вернее параллельно с ней по времени). Единственно, что к FPGA это не имеет никакого отношения, чистое программирование.
|
|
|
|
Сообщений в этой теме
torik CycloneII и NAND Flash Aug 4 2009, 06:03 torik Вобщем-то в приведенном куске кода две глупых ошиб... Aug 4 2009, 12:35 torik Вот еще вопрос появился.
в каждой странице памяти ... Aug 5 2009, 09:27 baken Цитата(torik @ Aug 5 2009, 13:27) Вот еще... Aug 5 2009, 15:05 Alex11 Использовать можно, но помните о возможности возни... Aug 5 2009, 14:48 torik ЦитатаИ еще по теме, но не по вопросу - при разраб... Aug 6 2009, 04:55 Alex11 Все производители пишут, что битый блок не следует... Aug 7 2009, 04:57 torik ЦитатаВсе производители пишут, что битый блок не с... Aug 7 2009, 11:21 zverek Сорри за оффтопик, (думал создавать ли новую тему ... Aug 10 2009, 23:12  zverek Цитата(awa @ Aug 12 2009, 17:42) Единстве... Aug 13 2009, 00:40 Alex11 Если запись подряд, то можете слизать алгоритм с м... Aug 12 2009, 22:57 torik ЦитатаМожно покопаться в исходниках файловой систе... Aug 13 2009, 04:53 Alex11 ЦитатаНад этим вопросом я тоже задумывался. Предпо... Aug 13 2009, 08:50 torik ЦитатаПо поводу разбиений блоков данных - у меня н... Aug 13 2009, 10:09 awa Вот подробнее, но как то сумбурно получилось.
Дл... Aug 13 2009, 11:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|