Здравствуйте,
Имеется плата с TI OMAP5912 и Micron MT48LC8M16A2 SDRAM chip. ARM работает на 192 MHz, память на 96 MHz. Я написал bootloader, который делает всю инициализацию (работая в SRAM) и затем запускает тест SDRAM. Простой тест записи-чтения patterns в различные rows-columns проходит без проблем. Случайно поймал периодическую ошибку чтения в случае записи-чтения измнеяющегося значения по одному и тому же адресу (от конкретного значения адреса ничего не зависит). Около 10 тыс. циклов проходит нормально, затем результат чтения не совпадает с записью. Записанное значение корректно. Если тест запустить опять, то все повторится ~ через 10 тыс. циклов. Такое ощущение, что как-то связано с resresh'ом. Пробовал играться с параметрами SDRAM контроллера, но безрезультатно. Единственный вариант, как это удалось побороть - это понизить частоту на Traffic Controller до 48 MHz, что не очень приятно.
Сможет ли кто-нибудь, что-нибудь присоветовать? Заранее благодарен. -------------------------------------------------------------- Оригинальная конфигурация
8-bit Prescaler'a CLK_ARM_CKCTL(0xFFFECE00) = 1 Sets TC divider CK_GEN3/2
setup SDRAM type as Regular SDRAM and operation mode as HPHB TC_EMIFF_OP(0xFFFECC80) = 0x00000004
SDRAM Config (frequency range (SDF0 Trc = 9, Tras = 6, Trp = 3, Trcd = 3, Trrd = 2)) TC_EMIFF_CONFIG(0xFFFECC20) = (0x5AA << 8) /* Autorefresh counter value */ |(0x0B << 4) /* SDRAM internal organization (128Mx16x4b) */ | 0x0000000C /* Autorefresh enable by burst of 8 commands */ |(1 << 1) /* reserved, must be 1 */
CAS idle 3, full page burst, serial mode TC_EMIFF_MRS_NEW(0xFFFECC70) = 0x00000007|0x00000030
Autorefresh counter был рассчитан на основании Autorefresh counter = (refresh rate/#rows/system freq(ns)) - 50 ARCV = 64ms/4096/(1/TC_CK) - 50 = (64*10^6(ns))/4096/10.41 - 50 = 1500 - 50 = 1450 (0x5AA) Пробовал делать поправки на burst of 8 commands (хотя hardware должно само смасштабировать), не помогло
|