Перейти к содержанию
    

AT91RM9200 + IS42S16400B нужна помощь

Не удается запустить SDRAM IS42S16400B на платке с AT91RM9200. Возможно что-то напутал с таймингами ...

 

Если есть у кого работающий код инициализации этих SDRAM, поделитесь пожалуйста!

 

Или, возможно, найдете ошибку в моём?

 

#define SLOWCLOCK                32768        //* In Hz
#define MAIN_OSC_CLK                        16000000    //* In Hz
#define CPU_HZ                                  (MAIN_OSC_CLK * 45 / 4) // Processor clock (180,000000 MHz for PCK).
#define MASTER_CLOCK                            (CPU_HZ / 3) // Master clock 60.000 MHz

#define  BSP_CLK_DBGU_BAUD_RATE                       115200

#define    PLLAR                           0x202CBF04    // 180,000000 MHz for PCK
#define    PLLBR                           0x10173E04    // 48,000000 MHz (divider by 2 for USB)
#define    MCKR                            0x00000202    // PCK/3 = MCK Master Clock = 60,000000 MHz with PLLA selected


#define C1_IDC        (1<<2)    // icache and/or dcache off/on 
#define DRAM_SIZE       0x1000000

#define BASE_EBI_CS1_ADDRESS    0x20000000    //* base address to access memory on CS1

void AT91F_InitSDRAM()
{
        int     i;
    volatile int     *pSDRAM = (int *)BASE_EBI_CS1_ADDRESS;
        
        //unsigned int sdram_cfg;

    //* Configure PIOC as peripheral (D16/D31)
    AT91F_SDRC_CfgPIO();
    
    // Setup MEMC to support CS0=FLASH, CS1=SDRAM
    AT91C_BASE_EBI->EBI_CSA |= AT91C_EBI_CS1A_SDRAMC;
    AT91C_BASE_EBI->EBI_CFGR = (AT91C_EBI_DBPUC & 0x00) | (AT91C_EBI_EBSEN & 0x00);

    //* Init SDRAM
        
        #define AT91C_SDRC_TWR_1        ((unsigned int) 0x1 <<  7) //  10ns (SDRC) Number of Write Recovery Time Cycles
        #define AT91C_SDRC_TRC_6        ((unsigned int) 0x6 << 11) // -70ns (SDRC) Number of RAS Cycle Time Cycles
        #define AT91C_SDRC_TRP_2        ((unsigned int) 0x2 << 15) // -20ns (SDRC) Number of RAS Precharge Time Cycles
        #define AT91C_SDRC_TRCD_2       ((unsigned int) 0x2 << 19) // -20ns (SDRC) Number of RAS to CAS Delay Cycles
        #define AT91C_SDRC_TRAS_4       ((unsigned int) 0x4 << 23) // -50ns (SDRC) Number of RAS Active Time Cycles
        #define AT91C_SDRC_TXSR_1       ((unsigned int) 0x1 << 27) // (SDRC) Number of Command Recovery Time Cycles

        
        #define SDRC_CR_VAL         \
    (             \
     AT91C_SDRC_NR_12    |\
     AT91C_SDRC_NB_4_BANKS    |\
     AT91C_SDRC_CAS_2    |\
     AT91C_SDRC_TWR_1    |\
     AT91C_SDRC_TRC_6    |\
     AT91C_SDRC_TRP_2    |\
     AT91C_SDRC_TRCD_2    |\
     AT91C_SDRC_TRAS_4    |\
     AT91C_SDRC_TXSR_1     \
    )


    //* 1. A minimum pause of 200us is provided to precede any signal toggle
        //sdram_cfg = AT91C_SDRC_NC_9 | SDRC_CR_VAL;
    //AT91C_BASE_SDRC->SDRC_CR = sdram_cfg;
    AT91C_BASE_SDRC->SDRC_CR = AT91C_SDRC_NC_8 | SDRC_CR_VAL;

    //* 2. A Precharge All command is issued to the SDRAM
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_PRCGALL_CMD;
    *pSDRAM = 0;

    //* 3. Eight Auto-refresh are provided
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_RFSH_CMD;
    for(i=0;i<8;i++)
        *pSDRAM = 0;

    //* 4. A mode register cycle is issued to program the SDRAM parameters
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_LMR_CMD;
    *(pSDRAM+0x80) = 0;

    //* 5. Write refresh rate into SDRAMC refresh timer COUNT register
        AT91C_BASE_SDRC->SDRC_TR = (AT91C_SDRC_COUNT & (64 * (MASTER_CLOCK / 1000) / 4096));
        *pSDRAM = 0;

        // Extra: Self refresh on
        AT91C_BASE_SDRC->SDRC_SRR = AT91C_SDRC_SRCB;
        *pSDRAM = 0;
        
    //* 6. A Normal Mode Command is provided, 3 clocks after tMRD is set
    AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_NORMAL_CMD;
    *pSDRAM = 0;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Она у Вас правильно подключена?

Так вроде ничего 12 рядов на 8 столбцов

A2-A0,A11-A9,SDA10-A10,A13-A11,A16-BA0,A17-BA1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может проблема раньше, просто PLL не завелась?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может проблема раньше, просто PLL не завелась?

А программка чтонибудь выдает. После инициализации SDRAM - она может чтото выдать в консоль, посмотрите по тексту - если это после моих правок, а по виду после моих, то должна быть выдача.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Она у Вас правильно подключена?

Так вроде ничего 12 рядов на 8 столбцов

A2-A0,A11-A9,SDA10-A10,A13-A11,A16-BA0,A17-BA1

 

Да, перепроверил ещё раз. Единственное, что не так, это A14 (150 нога MCU) выведен на NC контакт (36 нога RAM), там у других микросхем A12, а в этой NC.

 

 

Сам процессор заводится, по JTAG во внутреннюю память програмку загружает, DBGU настраивается и выдает тестовые сообщения на нужной скорости.

 

AT91F_US_Configure (
        (AT91PS_USART) AT91C_BASE_DBGU,             // DBGU base address
        MASTER_CLOCK,                                                  // 60 MHz
        AT91C_US_CHMODE_NORMAL | AT91C_US_PAR_NONE ,// mode Register to be programmed
        BSP_CLK_DBGU_BAUD_RATE ,       // 115200                                            // baudrate to be programmed
        0);

 

Работает на 115200 штатно, значит PLL заводится на штатных 60 Мгц.

 

Видимо, не избежать мне осциллоскопического исследования :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работает на 115200 штатно, значит PLL заводится на штатных 60 Мгц.

дальше, вроде по тексту шел тест SDRAM он что выдает, может там непропай или замыкание

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дальше, вроде по тексту шел тест SDRAM он что выдает, может там непропай или замыкание

 

Действительно, оказался банальный непропай одного бита :)

 

Спасибо большое!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...