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

 
 
> am1705 + nand flash.
_sv_
сообщение Oct 28 2011, 11:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-03-11
Пользователь №: 63 436



Добрый день всем.
Испытываю проблемы при работе с 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
Aleph
сообщение Nov 3 2011, 18:52
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 3-12-08
Пользователь №: 42 191



У это флешки для стирания блока row address должен быть 3 байта, а не 2 как вы написали.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 11:44
Рейтинг@Mail.ru


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