vin 0 10 мая, 2012 Опубликовано 10 мая, 2012 (изменено) · Жалоба Здравствуйте! Собрали свою плату на AT91SAM9G45. 1. Изначально поставили на первую партию DDR2-667 Micron MT47H64M8CF-3, ту что использует и сам Atmel на своих китах. Итого 2 модуля, имеем 128MB ОЗУ и наслаждаемся линуксом.. 2. На следующуюю партию поставили DDR2-800 NANYA NT5TU64M8DE-AC и линукс перестал грузится. Экспериментальным путем обнаружили, что если в инициализации DDR2 в бутстрапе #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, подскажите куда копать? Заранее благодарю. NANYA_NTC_DDR2_512M_D_R16_Consumer.pdf Изменено 13 мая, 2012 пользователем IgorKossak [codebox], форматирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Так написано же: 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Так написано же: 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. то линукс грузится и все работает, но имеем только 64М ОЗУ. Сравнили даташиты Micron & Nanya, практически идентичны по параметрам. Может, она на самом деле 256Mb? Проверьте на новой микросхеме, имеет ли шар сигнала A13 физическое подключение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Так у ТС 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.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vin 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Точно - тормазнул. А вот то, что 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 в нуле. Проблема не ушла. Сейчас пробуем варьировать тайминги. Еще идеи есть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Еще идеи есть? Наличие вывода A13 проверили? В standalone не пробовали исследовать поведение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vin 0 24 мая, 2012 Опубликовано 24 мая, 2012 · Жалоба Наличие вывода A13 проверили? Вывод A13 физически присутствует. В standalone не пробовали исследовать поведение? Еще не пробовали. Проблема до сих пор не решена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vin 0 13 августа, 2012 Опубликовано 13 августа, 2012 · Жалоба Проблема решена! Бутстрап 3.1 ftp://ftp.linux4sam.org/pub/Android4SAM/v...trap-3.1.tar.gz и "правильный" компилятор (ибо собирается без ошибок разными версиями, но не работает) сделали свое дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 14 августа, 2012 Опубликовано 14 августа, 2012 · Жалоба "правильный" компилятор (ибо собирается без ошибок разными версиями, но не работает) Может, быть влияние компилятора проявляется из-за того что программа не выполняет в явно заданном виде определённые необходимые условия, и вопрос случая - выполнит их компилятор или нет, хотя он не обязан этого делать. Это может быть: - нет достаточных задержек где-то, или лишние задержки - порядок обращение к нескольким регистрам контроллера не задан явно в тексте программы, но он важен, а компилятор ставит обращения как повезёт - переменные не объявлены volatile - нужно вставить ассемблерные команды DSB или ISB То есть, чисто например, при выполнении такого int x = ddram_config.ddramc_mdr + ddram_config.ddramc_rtr; порядок обращения к ddram_config.ddramc_mdr и к ddram_config.ddramc_rtr произволен на усмотрение компилятора, но на самом деле он может быть важен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vin 0 18 февраля, 2013 Опубликовано 18 февраля, 2013 · Жалоба Резюме: Для gcc 4.6.x и выше при ВЫКЛюченной опции «Build in thumb mode» все собирается и работает. Для gcc 4.6.x и выше при ВКЛюченной опции «Build in thumb mode» все собирается и НЕ работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться