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

 
 
 
Reply to this topicStart new topic
> AT91RM9200 + IS42S16400B нужна помощь
Bitman
сообщение Sep 12 2008, 09:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 25-01-08
Пользователь №: 34 422



Не удается запустить 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;
}
Go to the top of the page
 
+Quote Post
dch
сообщение Sep 12 2008, 13:35
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Она у Вас правильно подключена?
Так вроде ничего 12 рядов на 8 столбцов
A2-A0,A11-A9,SDA10-A10,A13-A11,A16-BA0,A17-BA1
Go to the top of the page
 
+Quote Post
Wagan
сообщение Sep 13 2008, 14:58
Сообщение #3


Логин для тестирования Форума
*

Группа: Участник
Сообщений: 20
Регистрация: 1-12-05
Из: Москва
Пользователь №: 11 664



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


--------------------
С уважением,
Ваган
--------------------------------------
Логин для тестирования Форума
Go to the top of the page
 
+Quote Post
dch
сообщение Sep 14 2008, 11:49
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(Wagan @ Sep 13 2008, 18:58) *
Может проблема раньше, просто PLL не завелась?

А программка чтонибудь выдает. После инициализации SDRAM - она может чтото выдать в консоль, посмотрите по тексту - если это после моих правок, а по виду после моих, то должна быть выдача.
Go to the top of the page
 
+Quote Post
Bitman
сообщение Sep 15 2008, 05:37
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 25-01-08
Пользователь №: 34 422



Цитата(dch @ Sep 12 2008, 17:35) *
Она у Вас правильно подключена?
Так вроде ничего 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 Мгц.

Видимо, не избежать мне осциллоскопического исследования smile.gif
Go to the top of the page
 
+Quote Post
dch
сообщение Sep 17 2008, 22:38
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(Bitman @ Sep 15 2008, 09:37) *
Работает на 115200 штатно, значит PLL заводится на штатных 60 Мгц.

дальше, вроде по тексту шел тест SDRAM он что выдает, может там непропай или замыкание
Go to the top of the page
 
+Quote Post
Bitman
сообщение Sep 22 2008, 10:46
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 25-01-08
Пользователь №: 34 422



Цитата(dch @ Sep 18 2008, 02:38) *
дальше, вроде по тексту шел тест SDRAM он что выдает, может там непропай или замыкание


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

Спасибо большое!
Go to the top of the page
 
+Quote Post
dch
сообщение Sep 22 2008, 16:55
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



:-)
Go to the top of the page
 
+Quote Post

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

 


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


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