Добрый день всем.
Испытываю проблемы при работе с NAND flash памятью через EMIFA.
Могу передавать команды и читать данные (работает команда ReadId)
Вижу разные статусы стирания при WP 1 и 0.
А вот остальные команды (чтение/запись/стирание) - не работают.
Пробовал разные типы флешек. Результат - одинаков.
В чем проблема - не пойму.
Flash - K9F8G08.
CS - CS3
A0 - не используется
A1 - ALE
A2 - CLE
Все точно как в документе SPRUFV0A, только CS и WP управляются вручную.
Делаю все так (текст немного подправил):
Код
#define NAND_OFFSET_DATA (0x00)
#define NAND_OFFSET_ALE (0x08)
#define NAND_OFFSET_CLE (0x10)
void _nand_cs_write ( uint in_offset, uint8 data ) {
volatile uint8 *latch;
latch = (volatile uint8 *)(0x62000000 + in_offset); // CS3 base + offset
*latch = in_data;
}
void nand_init ( ) {
CLRBIT( SYS_CFG->REG_CFGCHIP[3], EMIFA_CLKSRC );
CLRBIT( EMIFA->REG_NANDFCR, ECCSEL_MASK );
CLRBIT( EMIFA->REG_NANDFCR, CSSEL_MASK );
SETBIT( EMIFA->REG_NANDFCR, ECCSEL_CS3 );
SETBIT( EMIFA->REG_NANDFCR, CS3NAND );
EMIFA->REG_CE3CFG = 0x3FFFFFFC; // Setup CS3 - 8-bit + maximal timings
// Switch the EMA_WAIT pin to the GPIO
PINMUX15 &= ~(0x0F000000); // NAND_WP pin
PINMUX15 |= (0x08000000); // NAND_WP Pin
PINMUX18 &= ~(0x000F0000); // EMA_CS
PINMUX18 |= (0x00080000); // EMA_CS
GPIO_set_direction ( NAND_PIN_WP, GPIO_OUT );
GPIO_set_direction ( NAND_PIN_CS, GPIO_OUT );
SETBIT (PIN_BANK23->REG_IRQSTAT, 0xFFFFFFFF);
SETBIT (PIN_BANK23->REG_SET_RIS_TRIG, 0x00000400);
SETBIT (PIN_BANK23->REG_CLR_FAL_TRIG, 0x00000400);
SETBIT (GPIO_CTRL->REG_BINTEN, 0x00000004);
_cs_low();
_nand_cs_write(NAND_OFFSET_CLE, NAND_CMD_READ_ID);
_nand_cs_write(NAND_OFFSET_ALE, 0);
_nand_read_data ( device_id, 5);
// Здесь получаю нормальные данные
_nand_cs_high();
}
void nand_block_erase ( ) {
_nand_wp_low();
_nand_cs_low();
_nand_cs_write ( NAND_OFFSET_CLE, 0x60 );
_nand_cs_write ( NAND_OFFSET_ALE, 0 );
_nand_cs_write ( NAND_OFFSET_ALE, 0 );
_nand_cs_write ( NAND_OFFSET_CLE, 0xD0);
// Флешка Read/Busy не выставляет и блок не стирает.
// Стирания не происходит. Почему?
_nand_cs_high();
_nand_wp_high();
}
Сообщение отредактировал _sv_ - Oct 28 2011, 11:46