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

 
 
> SAM7SE, реальный баг SDRAM контроллера, или это у меня лыжи не едут?
VslavX
сообщение Nov 22 2007, 11:52
Сообщение #1


embarrassed systems engineer
*****

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



Всем доброго времени суток, коллеги!

Проблемка у меня, может быть кто-нибудь еще наблюдал подобное.

Запускаю плату на SAM7SE512 + SDRAM, установлен чип Samsung K4S561632H-UC75. Частота 48 МГц - четко проконтроллировано на выходе SCLK, waitstate для флэшей настроено правильно. Все работает как часы, ни в какие исключения не сваливается, все жужжит как нужно. SAM-BA не используется.

Код инициализации SDRAM для начала выдрал из примера на сайте Атмела. Начинаю обращаться к SDRAM - пишу/читаю одно двойное слово - лезет ерунда. После ряда экспериментов выясняется, что при чтении чип памяти пытается работать на CAS latency 1. То есть буквально на следующий такт после CAS пытаются начать вылазить данные. Лезем дальше, доходим до операции Mode Register Set - явно не работает.

Изучаем разные аппноты и примеры кодов - в месте ывполнения MRS в разных источниках написаны варианты - и все - разные и не соответствуют документации. 07.gif OK, верим в здравый смысл и запускаем такой циклик (все выводы PIO настроенны правильно на SDRAM контроллер)
Код
#define SDRAM_BASE 0x20000000

while(TRUE)
{
*((volatile unsigned int*)0xFFFFFFB0) = 0x10;        // NORM
*((volatile unsigned int*)(SDRAM_BASE)) = 0;

*((volatile unsigned int*)0xFFFFFFB0) = 0x11;        // NOP
*((volatile unsigned int*)(SDRAM_BASE)) = 0;

*((volatile unsigned int*)0xFFFFFFB0) = 0x12;        // PRE
*((volatile unsigned int*)(SDRAM_BASE)) = 0;

*((volatile unsigned int*)0xFFFFFFB0) = 0x13;        // MRS
*((volatile unsigned int*)(SDRAM_BASE+0x50)) = 0x0000FFFF;
}


И везде вместо выполнения заказанных операций на осциллографе видны простые записи! Запускал в цикле только один MRS - "все равно олень" - не видно на осциллографе одновременных CAS+RAS которые нужны для MRS - идут обычные записи, от есть видим и ~CAS и ~RAS , но - по-отдельности.

Хорошо, допустим "сам дурак" - какие-то траблы с железом - плата всего лишь двухслойка, (хотя это далеко не первая моя двухслойная плата с SDRAM, да и сигналы все в норме). Берем evaluation kit для SAM7SE, запускаем тот же самый код (тот же бинарник) - работает. Оба!

Подметаю вырванные волосы smile.gif и начинаю думать - а чип-то на EK другой - Микрон. Выкидываю из инициализации контроллера операцию MRS совсем, прошиваю, power-cycling - а оно все равно работает! То есть, похоже, чипу Микрон вообще не нужна инициализация - по умолчанию работает CL=2, BL=1. Восстанавливаю в инициализации код MRS - прописываю CL=3, BL=8 (нерабочие условия для контроллера SAM7SE), а чип Микрона все равно работает - левая инициализация-то по шине не проходит - настройки остаются правильными.

В итоге выкрутился, запрограммировал выходы как PIO, кроме SDRAM ~CS. Выставил ~CAS + ~RAS + на шине адреса нужное значение MRS и выполнил чтение - для генерации ~CS в течение такта. И Самсунг тоже нормально заработал!

Кстати, вот ориентировочная производительность при чтении 36-байтовыми блоками (ldm инструкция):
Exernal SDRAM: 69.3MBps
Internal Flash: 78.0 MBps
Internal SRAM: 132.2MBps
Очень сильно зависит от оптимизации кода процедуры считывания - основной тормоз это код во флэш.

Атмел о проблеме SDRAM в курсе, но уже три недели "отмораживается", поэтому я пребываю в некоторой неуверенности - следует ли мне дальше искать баг где-то у себя в системе (нельзя же такое в серию запускать), или это проблема более общая и кто-то еще с ней сталкивался?
Go to the top of the page
 
+Quote Post



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

 


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


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