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

 
 
> 16xNAND и AT91RM9200, подключение 16 битной NAND flash и драйвер для работы с ней
primus
сообщение Jul 3 2009, 09:09
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 9-04-07
Из: Санкт-Петербург
Пользователь №: 26 884



Доброго времени суток, ALL!

Надеюсь на вашу помошь, т.к. собственных сил уже не хватает.

Subj, заключается в следующем.

Появилась необходимость повышения производительности в работе с NAND flash, поэтому заменил ранее использовавшуюся 8-ми битную NAND Micron MT29F4G08AAAWP ET
на аналогичную ей 16-ти битную Micron MT29F2G16AAD ET D. Возникла проблема - не могу считать ID c 16 битной NAND, когда на 8-ми битной все работает.

Подкорректировал схему включения микросхемы, но структорно она осталась прежней:

AT91RM9200 MICRON

NSC3| ------------->| !CE
A19| ------------->| CLE
A20| ------------->| ALE
NANDOE| ------------->| !RE
NANDWE| ------------->| !WE
PC8|<-------------- | !R/b
16x I/0|--< шина >--| 16x I/0


где !СE - инвертированный вход, аналогично как и RE, WE

Сигналы все проходят (проверил осциллогорафом).

Схемотехнически, imho, все выполненно правильно. В цепи питания видимых ошибок не обнаруженно.
(да и ошибиться-то там негде)
написал маленький дравер для работы с NAND (первичный загрузчик отлажен и проверен (100% работает!)):

//listing...

CODE

//чтение данных
#define read_data() (*(volatile unsigned short*)0x40000000)

//запись данных
#define write_data(x) *((volatile unsigned short*)0x40000000) = (unsigned short)(x)
//запись команды - поднимается CS и адресс A19 (CLE)
#define write_command(x) *((volatile unsigned short*)0x40080000) = (unsigned short)(x)
//запись адреса - поднимается CS и адресс A20 (ALE)
#define write_address(x) *((volatile unsigned short*)0x40100000) = (unsigned short)(x)

// инициализация NAND
void nand_init(void)
{

// Конфигурирование EBI - CS3 настраивается для работы с NAND (CS - !CE)
SET(MCU_MC|EBI_CSA, 0x00000008);

/*
настройка регистра SMC Chip Select Register 3
( Byte Access Type = 16 бит;
Data Bus Width = 16 бит;
Wait State Enable = 1;
Number of Wait States = 127;
перепробовал все варианты, с учетом всех задержек и временных диаграмм
)
*/
SET(MCU_MC|SMC_CSR3, 0x000030FF);

// настройка PIO - здесь все просто
SET(MCU_PIOC|PIO_ASR, 0x0000000a);
//SET(MCU_PIOC|PIO_MDDR, 0x0000000a);
SET(MCU_PIOC|PIO_PUER, 0x0000000a);
SET(MCU_PIOC|PIO_PDR, 0x0000000a);
}

// чтение ID
void NAND_READ_ID(void)
{

unsigned short status;

write_command(0x0090); // в старших адресах 0x00
write_address(0x0000);

status = read_data();
printf("NAND status = %.4x\n", (unsigned)status);

status = read_data();
printf("NAND status = %.4x\n", (unsigned)status);

status = read_data();
printf("NAND status = %.4x\n", (unsigned)status);

status = read_data();
printf("NAND status = %.4x\n", (unsigned)status);
}



На выходе получаю FFFF. Шина данных подтянута. Такое ощущение, что nand просто не работает.
Но! При подаче управляющего сигнала переазгрузки (write_command(0x00FF); ) сигнал R/B генерируется и прерыване возбуждается. Что говорит о том что NAND срабатывает. Ошибки в передаче по сигнальным линиям быть не может.
Очень часто данная команда "не проходит", но всегда прохоит команда (write_command(0xFFFF)!!! С чем это связанно я не знаю.
Аналогичный алгоритм работает при использовани 8 битной NAND.

При использовании другого значения для SMC Chip Select Register 3 ( SET(MCU_MC|SMC_CSR3, 0x77033F80)) в соответствии с даташитом.
Получаю на выходе 0x1111.

Может кроме EBI и SMC нужно что-то еще настраивать?
Мог накосячить в разыменовании указателя типа short, но в листинге (см. выше) ошибок не нашел.
Думаю косяк в програмной части, но где найти не могу.
Подскажите! Собственных сил уже не осталось, все волосы с задницы вырвал.
Расчитываю на вашу помощь!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kadr
сообщение Nov 16 2011, 11:07
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 10-04-08
Из: Минск
Пользователь №: 36 637



На ревизию D немного отличается распиновка ног. Надо присоединить к питанию дополнительно 34 и 39 ноги, а к земле 36 ногу микросхемы
Go to the top of the page
 
+Quote Post
Kadr
сообщение Nov 16 2011, 12:26
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 10-04-08
Из: Минск
Пользователь №: 36 637



Цитата(Kadr @ Nov 16 2011, 14:07) *
На ревизию D немного отличается распиновка ног. Надо присоединить к питанию дополнительно 34 и 39 ноги, а к земле 36 ногу микросхемы

плюс еще ноги данных были поменяны местами
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:14
Рейтинг@Mail.ru


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