реклама на сайте
подробности

 
 
> CycloneII и NAND Flash, ошибка при чтении ID
torik
сообщение Aug 4 2009, 06:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
torik
сообщение Aug 6 2009, 04:55
Сообщение #2


Гуру
******

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



Цитата
И еще по теме, но не по вопросу - при разработке системы на будущее имейте ввиду, что со сременем все растет, а в этих флэшах растет в первую очередь размер страницы. Уже сейчас искать большие чипы с 2К страницей тяжело - делают 4К.

Спасибо, учту.
Цитата
Использовать можно, но помните о возможности возникновения bad-блоков на лету. Лучше использовать это место для индикации занятости/неисправности страницы. Дополнительно можно хранить и другие служебные данные.


Цитата
Дело не в файловой системе, "лишние" 144 байта это 36 дополнительных байт на каждую подстраничку из 512 байт.
В эти 36 байт пишется номер странички, адрес предыдущей и последующей страничек, контрольные суммы для восстановления.
В настоящее время в NAND упор делается как раз на восстановление данных. И Вы, уверен на 100%, поставите в свой проект
самый дешевый чип за 400 рублей. А они сделаны как раз по MLC технологии. Основное "достоинство" этой технологии в том,
что максимальное число записей не более 10 тысяч, и сыпятся данные в них с максимально возможной скоростью.
Если Вы не будете использовать процедуру восстановления данных, полноценно работать с NAND просто не сможете.
Данные будут постоянно теряться. Как вариант писать параллельно в несколько мест. Тогда можно не использовать
лишние несколько байт в странице. Потому что у Вас контрольная сумма в полный размер данныхsmile.gif


Собственно, в качестве служебных данных я и хотел использовать данные о том, занята страница или нет, битый ли блок (насколько я понимаю, битый блок не означает, что его нельзы использовать?). Место под CRC обязательно оставлю на будущее.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - Alex11   Все производители пишут, что битый блок не следует...   Aug 7 2009, 04:57
- - torik   ЦитатаВсе производители пишут, что битый блок не с...   Aug 7 2009, 11:21
- - zverek   Сорри за оффтопик, (думал создавать ли новую тему ...   Aug 10 2009, 23:12
- - torik   Ну так чё, кто подскажет алгоритм работы? Мне в п...   Aug 12 2009, 07:19
|- - awa   Можно покопаться в исходниках файловой системы YAF...   Aug 12 2009, 13:42
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 20:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016