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

 
 
> 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
 
Start new topic
Ответов
DmitryM
сообщение Apr 17 2008, 16:51
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(VslavX @ Nov 22 2007, 15:52) *
Всем доброго времени суток, коллеги!

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

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

Код инициализации SDRAM для начала выдрал из примера на сайте Атмела. Начинаю обращаться к SDRAM - пишу/читаю одно двойное слово - лезет ерунда.


Вот мои разборки с SDRAM K4S561632H:
// Open PIO for SDRAM
PMC_EnablePeriphClock( (1<<4) | (1<<3) | (1<<2) );
PIOx_CfgPereferiya( 0, 0, (1<<29 | 1<<28 | 1<<27 | 1<<26 | 1<<24 | 1<<23) ); //Enable PIOA29:23 -> Perif B
// PIOx_CfgPereferiya( 0, 0, (1<<29 | 1<<28 | 1<<27 | 1<<25 | 1<<26 | 1<<24 | 1<<23) ); //Enable PIOA29:23 -> Perif B
//Здесь SDCKE High, а должно быть Low, поэтому
PIOx_CfgInOut( 0, 0, 1<<25 ); //Enable SDCKE as PIO
PIOA_Clear( 1<<25 ); //Clear SDCKE
PIOx_CfgPereferiya( 1, 0, 0x3FFFF ); //Enable PIOB17:0 -> Perif B -> Addres Bus
PIOx_CfgPereferiya( 2, 0x7FFFF, 0 ); //Enable PIOC18:0 -> Perif A -> Data Bus

addr = start;
s = ADDR_EBI;
s->EBI_CSA = ( s->EBI_CSA ) | 2 ;
tmp = s->EBI_CSA;
ss = ADDR_SDRAMC;
ss->SDRAMC_CR = 0x2188C159;
ss->SDRAMC_MR = 0x11; // NOP Mode DataBusWidth = 16
*addr = 0; // Только здесь появляется SDCK, а должно быть раньше вообще-то
// дополнительно смотри режим'с, для MR=0x10 SDCK не появляется

for( i = 0; i < 100; i++); // wait 200us minimum
PIOx_CfgPereferiya( 0, 0, 1<<25 ); //Enable PIOA25=SDCKE -> Perif B -> SDCKE->HIGH
// NOP Mode
ss->SDRAMC_MR = 0x11;
*addr = 0;
// All Precharge Mode
ss->SDRAMC_MR = 0x12;
*addr = 0;
// Refresh Mode
ss->SDRAMC_MR = 0x14;
for ( i = 0; i < 8; i++){
*addr++ = 0;
}
// MRS Mode
ss->SDRAMC_MR = 0x13;
*(addr + 0x80) = 0; // Здесь адрес по барабану, все равно контроллер выставляет свой зашитый
// Normal Mode
ss->SDRAMC_MR = 0x10;
*addr = 0;

ss->SDRAMC_TR = 0x800;
// }


После такого шаманства зажужало
Go to the top of the page
 
+Quote Post



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

 


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


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