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

 
 
 
Reply to this topicStart new topic
> AT91SAM9G45 и DDR2, NANYA verses MICRON
vin
сообщение May 10 2012, 18:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 2-06-05
Из: Киев
Пользователь №: 5 682



Здравствуйте!

Собрали свою плату на AT91SAM9G45.

1. Изначально поставили на первую партию DDR2-667 Micron MT47H64M8CF-3, ту что использует и сам Atmel на своих китах. Итого 2 модуля, имеем 128MB ОЗУ и наслаждаемся линуксом..

2. На следующуюю партию поставили DDR2-800 NANYA NT5TU64M8DE-AC и линукс перестал грузится. Экспериментальным путем обнаружили, что если в инициализации DDR2 в бутстрапе
CODE
#ifdef CONFIG_DDR2
static SDdramConfig ddram_config;

/*------------------------------------------------------------------------------*/
/* \fn ddramc_hw_init */
/* \brief This function performs DDRAMC HW initialization */
/*------------------------------------------------------------------------------*/
void ddramc_hw_init(void)
{
ddram_config.ddramc_mdr =
(AT91C_DDRC2_DBW_16_BITS | AT91C_DDRC2_MD_DDR2_SDRAM);

ddram_config.ddramc_cr = (AT91C_DDRC2_NC_DDR10_SDR9 | // 10 column bits (1K)
AT91C_DDRC2_NR_14 | // 14 row bits (8K)
AT91C_DDRC2_CAS_3 | // CAS Latency 3
AT91C_DDRC2_DLL_RESET_DISABLED); // DLL not reset

// ddram_config.ddramc_rtr = 0x24B;
ddram_config.ddramc_rtr = 0x4121;

ddram_config.ddramc_t0pr = (AT91C_DDRC2_TRAS_6 | // 6 * 7.5 = 45 ns
AT91C_DDRC2_TRCD_2 | // 2 * 7.5 = 22.5 ns
AT91C_DDRC2_TWR_2 | // 2 * 7.5 = 15 ns
AT91C_DDRC2_TRC_8 | // 8 * 7.5 = 75 ns
AT91C_DDRC2_TRP_2 | // 2 * 7.5 = 22.5 ns
AT91C_DDRC2_TRRD_1 | // 1 * 7.5 = 7.5 ns
AT91C_DDRC2_TWTR_1 | // 1 clock cycle
AT91C_DDRC2_TMRD_2); // 2 clock cycles

ddram_config.ddramc_t1pr = (AT91C_DDRC2_TXP_2 | // 2 * 7.5 = 15 ns
200 << 16 | // 200 clock cycles, TXSRD: Exit self refresh delay to Read command
16 << 8 | // 16 * 7.5 = 120 ns TXSNR: Exit self refresh delay to non read command
AT91C_DDRC2_TRFC_14 << 0); // 14 * 7.5 = 142 ns (must be 140 ns for 1Gb DDR)

ddram_config.ddramc_t2pr = (AT91C_DDRC2_TRTP_1 | // 1 * 7.5 = 7.5 ns
AT91C_DDRC2_TRPA_0 | // 0 * 7.5 = 0 ns
AT91C_DDRC2_TXARDS_7 | // 7 clock cycles
AT91C_DDRC2_TXARD_2); // 2 clock cycles

// ENABLE DDR2 clock
writel(AT91C_PMC_DDR, AT91C_BASE_PMC + PMC_SCER);

/*
* DDRAM2 controller
*/
ddram_init(AT91C_BASE_DDR2C, AT91C_DDR2, &ddram_config);
sdram_init(16);
/*
* Setup Smart Media, first enable the address range of CS3 in HMATRIX user interface
*/
// writel(readl(AT91C_BASE_CCFG + CCFG_EBICSA) | AT91C_EBI_CS1A_SDRAMC,
// AT91C_BASE_CCFG + CCFG_EBICSA);

/*
* EBI IO in 1.8V mode
*/
// writel(readl(AT91C_BASE_CCFG + CCFG_EBICSA) & ~(1 << 16),
// AT91C_BASE_CCFG + CCFG_EBICSA);

/*
* EBI DDRAM controller
*/
// ddram_init(AT91C_BASE_DDR2CP1, AT91C_EBI_CS1, &ddram_config);

}
#endif /* CONFIG_DDR2 */

убрать верхний адрес, т.е. поменять
Код
                  AT91C_DDRC2_NR_14 |       // 14 row bits    (8K)

на
Код
                  AT91C_DDRC2_NR_13 |       // 14 row bits    (8K)

то линукс грузится и все работает, но имеем только 64М ОЗУ. Сравнили даташиты Micron & Nanya, практически идентичны по параметрам.

Просьба, если кто знает тонкости инициализации DDR2, подскажите куда копать?

Заранее благодарю.

Сообщение отредактировал IgorKossak - May 13 2012, 10:15
Причина редактирования: [codebox], форматирование

Прикрепленные файлы
Прикрепленный файл  NANYA_NTC_DDR2_512M_D_R16_Consumer.pdf ( 2.07 мегабайт ) Кол-во скачиваний: 90
 
Go to the top of the page
 
+Quote Post
_4afc_
сообщение May 12 2012, 20:03
Сообщение #2


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Так написано же:

The address bits registered coincident with the activate command are used to select the bank and row to be accesses (BA0 and BA1 select the banks, A0-A13 select the row for x8 components, A0-A12 select the row for x16 components).


Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 12 2012, 20:32
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_4afc_ @ May 13 2012, 00:03) *
Так написано же:

The address bits registered coincident with the activate command are used to select the bank and row to be accesses (BA0 and BA1 select the banks, A0-A13 select the row for x8 components, A0-A12 select the row for x16 components).

Так у ТС x8.

Цитата(vin @ May 10 2012, 22:16) *
то линукс грузится и все работает, но имеем только 64М ОЗУ. Сравнили даташиты Micron & Nanya, практически идентичны по параметрам.

Может, она на самом деле 256Mb? Проверьте на новой микросхеме, имеет ли шар сигнала A13 физическое подключение.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение May 12 2012, 21:10
Сообщение #4


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(aaarrr @ May 13 2012, 00:32) *
Так у ТС x8.


Точно - тормазнул. А вот то, что NANYA при инициализации требует A13=0, её случаем от Micron не отличает?

Например: Issue EMRS to enable DLL. (Provide Low to A0, HIGH to BA0 and LOW to BA1 and A13. And A9=A8=A7=LOW must be used when issuing this command.)
Go to the top of the page
 
+Quote Post
vin
сообщение May 17 2012, 21:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 2-06-05
Из: Киев
Пользователь №: 5 682



Цитата(_4afc_ @ May 12 2012, 23:10) *
Точно - тормазнул. А вот то, что NANYA при инициализации требует A13=0, её случаем от Micron не отличает?

Например: Issue EMRS to enable DLL. (Provide Low to A0, HIGH to BA0 and LOW to BA1 and A13. And A9=A8=A7=LOW must be used when issuing this command.)


A13 в нуле. Проблема не ушла. Сейчас пробуем варьировать тайминги.
Еще идеи есть?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 17 2012, 21:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(vin @ May 18 2012, 01:18) *
Еще идеи есть?

Наличие вывода A13 проверили?
В standalone не пробовали исследовать поведение?
Go to the top of the page
 
+Quote Post
vin
сообщение May 24 2012, 10:48
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 2-06-05
Из: Киев
Пользователь №: 5 682



Цитата(aaarrr @ May 18 2012, 00:23) *
Наличие вывода A13 проверили?

Вывод A13 физически присутствует.

Цитата
В standalone не пробовали исследовать поведение?

Еще не пробовали.

Проблема до сих пор не решена.
Go to the top of the page
 
+Quote Post
vin
сообщение Aug 13 2012, 10:54
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 2-06-05
Из: Киев
Пользователь №: 5 682



Проблема решена!

Бутстрап 3.1 ftp://ftp.linux4sam.org/pub/Android4SAM/v...trap-3.1.tar.gz и "правильный" компилятор (ибо собирается без ошибок разными версиями, но не работает) сделали свое дело.
Go to the top of the page
 
+Quote Post
maksimp
сообщение Aug 14 2012, 17:57
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(vin @ Aug 13 2012, 14:54) *
"правильный" компилятор (ибо собирается без ошибок разными версиями, но не работает)

Может, быть влияние компилятора проявляется из-за того что программа не выполняет в явно заданном виде определённые необходимые условия, и вопрос случая - выполнит их компилятор или нет, хотя он не обязан этого делать.
Это может быть:
- нет достаточных задержек где-то, или лишние задержки
- порядок обращение к нескольким регистрам контроллера не задан явно в тексте программы, но он важен, а компилятор ставит обращения как повезёт
- переменные не объявлены volatile
- нужно вставить ассемблерные команды DSB или ISB

То есть, чисто например, при выполнении такого
int x = ddram_config.ddramc_mdr + ddram_config.ddramc_rtr;
порядок обращения к ddram_config.ddramc_mdr и к ddram_config.ddramc_rtr произволен на усмотрение компилятора, но на самом деле он может быть важен.
Go to the top of the page
 
+Quote Post
vin
сообщение Feb 18 2013, 21:21
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 2-06-05
Из: Киев
Пользователь №: 5 682



Резюме:
Для gcc 4.6.x и выше при ВЫКЛюченной опции «Build in thumb mode» все собирается и работает.
Для gcc 4.6.x и выше при ВКЛюченной опции «Build in thumb mode» все собирается и НЕ работает.
Go to the top of the page
 
+Quote Post

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

 


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


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