Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

SDRAM проблеммы AT91SAM9XE

Непрочитано 02.04.2011, 21:10  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию SDRAM проблеммы AT91SAM9XE

Привет всем.
Столкнулся с проблеммой.
Запаял кристал один SDRAM х32 вемсто двух по х16.
Запустил софт.... получил проблем.
Записывает и читатет первых (старшых) 16 ти, младшие возвращает как эдиницы.
Код:
unsigned long *ptSDRAM;
unsigned long memStart = 0x20000000;    /* SDRAM starts here */
unsigned long memSize = (1*1024*1024); /* 16x4=64-MByte SDRAM */
unsigned long ndx;
unsigned char flag = 0;
volatile  unsigned int calc=0;

// single write/read
    for (ndx=0; ndx‹6; ndx++)
    {
    ptSDRAM=(unsigned long*)memStart;
    ptSDRAM=ptSDRAM+20;
    value = 0x1BCD6789+(ndx‹‹28);
    *ptSDRAM=value;
    printf("Current SDRAM address: %x \n\r", ptSDRAM);
    printf("Data to write: %x \n\r", value);
    value = *ptSDRAM;
    printf("Data to read : %x \n\r", value);
    }
// write/read to end of SDRAM memory
    ptSDRAM=(unsigned long*)memStart;
    ptSDRAM=ptSDRAM+4194300; //4 address position to the end
    value = 0xF2345678;
    *ptSDRAM=value;
    printf("Current end SDRAM address: %x \n\r", ptSDRAM);
    printf("Data to END write: %x \n\r", value);
    value = *ptSDRAM;
    printf("Data to END read : %x \n\r", value);
Вот инициализация памяти:
Код:
    volatile unsigned int i;
    static const Pin pinsSdram = PINS_SDRAM;
    volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI_SDRAM;
    unsigned short sdrc_dbw = 0;

    sdrc_dbw = AT91C_SDRAMC_DBW_32_BITS;

    // Enable corresponding PIOs
    PIO_Configure(&pinsSdram, 1);

    // Enable EBI chip select for the SDRAM
    WRITE(AT91C_BASE_MATRIX, MATRIX_EBI, AT91C_MATRIX_CS1A_SDRAMC);


    // CFG Control Register
    WRITE(AT91C_BASE_SDRAMC, SDRAMC_CR, AT91C_SDRAMC_NC_8
                                        | AT91C_SDRAMC_NR_12
                                        | AT91C_SDRAMC_CAS_2
                                        | AT91C_SDRAMC_NB_4_BANKS
                                        | sdrc_dbw
                                        | AT91C_SDRAMC_TWR_2
                                        | AT91C_SDRAMC_TRC_7
                                        | AT91C_SDRAMC_TRP_2
                                        | AT91C_SDRAMC_TRCD_2
                                        | AT91C_SDRAMC_TRAS_5
                                        | AT91C_SDRAMC_TXSR_8);

    for (i = 0; i ‹ 1000; i++);

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NOP_CMD);    // Perform NOP
    pSdram[0] = 0x00000000;

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_PRCGALL_CMD);    // Set PRCHG AL
    pSdram[0] = 0x00000000;                        // Perform PRCHG

    for (i = 0; i ‹ 10000; i++);

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 1st CBR
    pSdram[1] = 0x00000001;                        // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 2 CBR
    pSdram[2] = 0x00000002;                        // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 3 CBR
    pSdram[3] = 0x00000003;                       // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 4 CBR
    pSdram[4] = 0x00000004;                      // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 5 CBR
    pSdram[5] = 0x00000005;                      // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 6 CBR
    pSdram[6] = 0x00000006;                    // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 7 CBR
    pSdram[7] = 0x00000007;                    // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 8 CBR
    pSdram[8] = 0x00000008;                    // Perform CBR

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_LMR_CMD);        // Set LMR operation
    pSdram[9] = 0xcafedede;                    // Perform LMR burst=1, lat=2

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_TR, (BOARD_MCK * 7) / 1000000);        // Set Refresh Timer

    WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD);    // Set Normal mode
    pSdram[0] = 0x00000000;                        // Perform Normal mode
Вот что возвращает в дабагерпорту:
Код:
Current SDRAM address: 20000050
Data to write: 1bcd6789
Data to read : 2d63ffff
Current SDRAM address: 20000050
Data to write: 2bcd6789
Data to read : 2bcdffff
Current SDRAM address: 20000050
Data to write: 3bcd6789
Data to read : 3bcdffff
Current SDRAM address: 20000050
Data to write: 4bcd6789
Data to read : 4bcdffff
Current SDRAM address: 20000050
Data to write: 5bcd6789
Data to read : 5bcdffff
Current SDRAM address: 20000050
Data to write: 6bcd6789
Data to read : 6bcdffff
Current end SDRAM address: 20fffff0
Data to END write: f2345678
Data to END read : f234ffff
В чем могут быть косяки?,... распиновка вроде верная, ... пропаяно все...
Реклама:
ua_gruzin вне форума  
Непрочитано 02.04.2011, 23:03  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию Re: SDRAM проблеммы AT91SAM9XE

Да, и еще одно не понял....

Код:
    

count++;
//-------------------------
    ptSDRAM=(unsigned long*)memStart;
    ptSDRAM=ptSDRAM+2;
    *ptSDRAM=(count‹‹16);
    printf("Count: %x \n\r", count‹‹16);
//-------------------------
    for (calc=0; calc‹1000; calc++) {calc++; calc--;}
//-------------------------
    ptSDRAM=(unsigned long*)memStart;
    printf("First: %x \n\r", *ptSDRAM);
//-------------------------
Возвражает такое...

Count: 2a0000
First: 2affff

Count: 2b0000
First: 2bffff

Count: 2c0000
First: 2cffff

Почему так?
Я сдвигаю указатель на 2 (ptSDRAM=ptSDRAM+2), пишу значение, читаю с прежнего адресса ptSDRAM, получаю то, что записал в другую ячейку....
ua_gruzin вне форума  
Непрочитано 02.04.2011, 23:41  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию Re: SDRAM проблеммы AT91SAM9XE

Я тупой, или что-то не понимаю


Код:
unsigned int *ptSDRAM;
unsigned int memStart = 0x20000000;    /* SDRAM starts here */

ptSDRAM=(unsigned int*)memStart;
ptSDRAM=ptSDRAM+0x00000004;
printf("ptSDRAM +4: %x \n\r", ptSDRAM);

а на выходе, вместо
ptSDRAM +4: 20000004
получаю:
ptSDRAM +4: 20000010

где туплю, помогите
ua_gruzin вне форума  
Непрочитано 04.04.2011, 20:02  
Alecsej
Вид на жительство
 
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
Alecsej на пути к лучшему
По умолчанию Re: SDRAM проблеммы AT91SAM9XE

32x разводится несколько иначе, и возможно управление маской неверное.

Сообщение от ua_gruzin Посмотреть сообщение
а на выходе, вместо
ptSDRAM +4: 20000004
получаю:
ptSDRAM +4: 20000010
при увеличении указателя адрес увеличивается на размерность указателя, итого 4*4 = 16 = 0x10

Последний раз редактировалось Alecsej; 04.04.2011 в 20:31.
Alecsej вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AT91SAM9XE on 10GHz??? ua_gruzin Микроконтроллеры, АЦП, память и т.д 4 23.03.2011 00:33
AT91SAM9XE немного о USB UART ua_gruzin Микроконтроллеры, АЦП, память и т.д 0 13.02.2011 12:11
Помогите с MOBILE SDRAM I300 Микроконтроллеры, АЦП, память и т.д 3 25.06.2010 12:30


Часовой пояс GMT +4, время: 14:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.