Перейти к содержанию
    

Blackfin BF561 & Mobile SDRAM MT48LC4M32LFB5-8 IT

Собираюсь первый раз в жизни развести плату с Blackfin BF561 и Mobile SDRAM.

Конкретнее -

ADSP-BF561SKBCZ-6A 256 Ball CSPBGA (17x17x1.76mm)

MT48LC4M32LFB5-8 IT:G 90 Ball VFBGA (13x8x1mm)

 

Основной вопрос - они вместе жить будут? Вроде шина у обоих - 3.3В, что ещё смотреть?

 

Дополнительный вопрос - как их между собой соединять для наименьшего потребления и наибольшей производительности?

Ядро/шина взять 600/100 или 500/125?

И хотелось бы без внешнего регулятора питания у BF561 обойтись.

 

Буду рад любым рекомендациям.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дополнительный вопрос - как их между собой соединять для наименьшего потребления и наибольшей производительности?

Буду рад любым рекомендациям.

 

А что есть варианты? 32-разряда шины на 32 разряда памяти как в ките (не знаю как там в ките :-))

В любом случае примерно так же, по аналогии с китом, даже если там память байтовая.

Про скорость AD намекает, что самая быстрая память будет иногда - самая узкая 4-битовая (8 чипов в вашем случае), за счет кэширования строки, но это всё ерунда, мелочь, детали... Внешняя память медленна по-всякому

 

Вообще-то внешняя память, используемая в ките прописана местами в коде библиотек VDSP++

Поэтому использование с VDSP других чем в ките чипов несет только неудобства, правда, небольшие, в трех местах

 

1. В меню Settings/Session нужно задавать custom init file - файл инициализации эмулятора. Это

с версии 5 VDSP++, раньше вообще было криво

2. Для real-time нужно править init_code.dxe - файл инициализации для загрузчика дан для памяти используемой в ките

3. Если используются их сервисы нужно править adi_ebui.c, который вызывается другими сервисами, например,adi_pwr.c. Наверное, проще не перестраивать системные библиотеки, а засунуть его копию себе в проект

 

В основном всё это описано в соответствующем AN EE326

Неудобства появляются, если пользоваться одновременно платами с разными чипами памяти.

Прыгая межжду китом и таджетом будете иметь гемморой.

 

А в остальном все параметры программируются - можно взять что получится

Про linux не знаю, если пользоваться gnu инструментарием

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Основной вопрос - они вместе жить будут?
Без проблем.

Ядро/шина взять 600/100 или 500/125?
600/120

И хотелось бы без внешнего регулятора питания у BF561 обойтись.
Пожалуйста. VROUT оставляете floating, и подаете на VddInt +1.35В. В программе при инициализации отключаете VReg и настраиваете PLL.

 

А что есть варианты? 32-разряда шины на 32 разряда памяти как в ките (не знаю как там в ките :-))
В ките две 16-ти битных микрухи :)

3. Если используются их сервисы нужно править adi_ebui.c, который вызывается другими сервисами, например,adi_pwr.c
Не обязательно. В adi_ebiu_Init можно передать описание конфигурации памяти (ADI_EBIU_CMD_SET_SDRAM_*).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не обязательно. В adi_ebiu_Init можно передать описание конфигурации памяти (ADI_EBIU_CMD_SET_SDRAM_*).

 

Тогда нужно сделать до всего.

Иначе при инициализации того-сего можно иметь большие сюрпризы.

У меня сюрпризы возникали сперва от скрытых вызовов из других библиотечных функций при настройке PLL через сервисы - память теряла структуру, поскольку восстанавливалась китовой при вызове модулей из adi_pwr иногда. Там дофига кросс-ссылок между сервисами и паче чаяния память может отвалиться в самый неподходящий момент, если указана неправильно в ebiu

 

В ките две 16-ти битных микрухи :)

 

ну значит подключается примерно также с точностью до выбора 16-разрядного слова в 32-разрядном

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде так, если ничего не напутал :)

 

Bf_D[31:0] -> Ram_D[31:0]

Bf_A[11:2] -> Ram_A[9:0]

Bf_SA10 -> Ram_A10

Bf_A13 -> Ram_A11

Bf_A[19:18] -> Ram_BA[1:0]

Bf_ABE[3:0] -> Ram_DQM[3:0]

CLK, CKE, CAS, RAS, WE, CS - думаю понятно.

 

Кстати, _4afc_, если не секрет, зачем вам sdram на industrial диапазон, если blackfin только commercial?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста. VROUT оставляете floating, и подаете на VddInt +1.35В. В программе при инициализации отключаете VReg и настраиваете PLL.

 

В случае индустриального ADSP-BF561SBBCZ-6A также?

 

Хм. Я раньше думал, что при включении 600МГц BF561 на 500МГц можно просто соеденить VROUT с VddInt. А тут похоже выбор между полевиком и DC/DC 3.3->1.35?

 

Кстати, _4afc_, если не секрет, зачем вам sdram на industrial диапазон, если blackfin только commercial?

Конечно желательно всё в индустриальном, я просто утром индустриальных буквиц как в даташите не нашёл на сайте АД.

 

Основной упор на снижение размеров платы и потребления. Потому и 1 кристал памяти мобильной. А более мелкий корпус BF561 без лазера и не разведёшь.

 

А что есть варианты? 32-разряда шины на 32 разряда памяти как в ките (не знаю как там в ките :-))

 

Шину я как-нибудь разведу. Остаётся вопрос с RAS, CAS, DQMx и т.д.

Вроде мобильная память может сама рефрешиться, может в связи с этим не надо тянуть какие-то связи или достаточно сказать BF561 чтоб не рефрешил?

 

В основном всё это описано в соответствующем AN EE326

Неудобства появляются, если пользоваться одновременно платами с разными чипами памяти.

Прыгая межжду китом и таджетом будете иметь гемморой.

 

AN EE326 читаю...

 

А геморой я уже ловлю, ибо у меня два разных кита и проект от одного с другим не работает. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В случае индустриального ADSP-BF561SBBCZ-6A также?

Да.

Хм. Я раньше думал, что при включении 600МГц BF561 на 500МГц можно просто соеденить VROUT с VddInt.

VROUT это просто ШИМ для управления внешним полевиком.

А тут похоже выбор между полевиком и DC/DC 3.3->1.35?

Типа того. Кстати, работа на 600 МГц требует внешнего стабилизатора.

Конечно желательно всё в индустриальном, я просто утром индустриальных буквиц как в даташите не нашёл на сайте АД.

Основной упор на снижение размеров платы и потребления. Потому и 1 кристал памяти мобильной. А более мелкий корпус BF561 без лазера и не разведёшь.

А вот тут начинаются нюансы. Дело в том, что такой микросхемы как ADSP-BF561SBBCZ-6A не существует. Хотите индастриал - получите максимум 500 Мгц. Нужно больше - либо коммерческий диапазон, либо корпус 27х27 мм.

Шину я как-нибудь разведу. Остаётся вопрос с RAS, CAS, DQMx и т.д.

Вроде мобильная память может сама рефрешиться, может в связи с этим не надо тянуть какие-то связи или достаточно сказать BF561 чтоб не рефрешил?

CAS, RAS, DQMx используются отнюдь не для рефреша.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Основной вопрос - они вместе жить будут? Вроде шина у обоих - 3.3В, что ещё смотреть?

Нold time сигналов от bf. Не стыкуются. Память хочет 1 нс мин, bf обеспечивает 0.8 нс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собрал схему - но к сожалению работает только 1024 байта памяти из 16МБ.

Т.е. данные повторяются через 0х400 на всём протяжении 16МБ как если бы я подключил 1кб статической памяти с неполной дешифрацией.

Есть ещё один момент - если писать несколько байт последовательно увеличивая адрес, то биты D16:D23 не записываются.

 

ГУРУ в SDRAM - подскажите где копать?

 

Схема собрана на 6 слойной плате на которой установлены:

 

ADSP-BF561SBBCZ-5A 256 Ball CSPBGA (17x17x1.76mm)

MT48LC4M32LFB5-8 IT:G 90 Ball VFBGA (13x8x1mm)

 

Все сигналы от BF561 идут во внутренних слоях и затем через резисторы 33 Ома уже на SDRAM по следующей схеме:

 

Bf_D[31:0] -> Ram_D[31:0]

Bf_A[11:2] -> Ram_A[9:0]

Bf_SA10 -> Ram_A10

Bf_A13 -> Ram_A11

Bf_A[19:18] -> Ram_BA[1:0]

Bf_ABE[3:0] -> Ram_DQM[3:0]

Bf_(CLK0,SCKE,SCAS,SRAS, SWE,SMS0) -> Ram_(CLK, CKE, CAS, RAS, WE, CS)

 

Длины дорожек от 13 до 74мм.

 

Вроде бы регистры EBIU стоят верно EB0CAW=3(11бит), EB0SZ=0(16МБ), EB0E=1(Вкл).

Процессор работает на частоте 495/123МГц. Инициализация SDRAM производится следующим кодом:

 

static ADI_EBIU_TIMING_VALUE sdram_refresh = {4096,{ 64, ADI_EBIU_TIMING_UNIT_MILLISEC    } };
static ADI_EBIU_SDRAM_BANK_VALUE bank_size =  {0, ADI_EBIU_SDRAM_BANK_16MB};            
static ADI_EBIU_SDRAM_BANK_VALUE bank_caw = {0, (ADI_EBIU_SDRAM_BANK_SIZE)ADI_EBIU_SDRAM_BANK_COL_11BIT}; 
static ADI_EBIU_TIME ebiu_48_nanosecs = {48, ADI_EBIU_TIMING_UNIT_NANOSEC};                
static ADI_EBIU_TIME ebiu_20_nanosecs = {20, ADI_EBIU_TIMING_UNIT_NANOSEC};                
static ADI_EBIU_TIMING_VALUE twr_min = {1,{8000, ADI_EBIU_TIMING_UNIT_PICOSEC}};
#define DO_NOT_CHANGE_MMR_SETTINGS 0

void InitSDRAM(void)
{
ADI_EBIU_COMMAND_PAIR ezkit_sdram[] = {    
    { ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE,        (void*)&bank_size             },
    { ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH,(void*)&bank_caw            }, 
    { ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD,    (void*)100000000              },
    { ADI_EBIU_CMD_SET_SDRAM_TRASMIN,        (void*)&ebiu_48_nanosecs       },
    { ADI_EBIU_CMD_SET_SDRAM_TRPMIN,        (void*)&ebiu_20_nanosecs       },
    { ADI_EBIU_CMD_SET_SDRAM_TRCDMIN,        (void*)&ebiu_20_nanosecs       },
    { ADI_EBIU_CMD_SET_SDRAM_TWRMIN,        (void*)&twr_min             },
    { ADI_EBIU_CMD_SET_SDRAM_REFRESH,        (void*)&sdram_refresh         },
    { ADI_EBIU_CMD_SET_SDRAM_FBBRW,         (void*)0                    },
    { ADI_EBIU_CMD_END, 0}
    };
    
EBIUResult = adi_ebiu_Init( ezkit_sdram, DO_NOT_CHANGE_MMR_SETTINGS );
if ((EBIUResult != ADI_EBIU_RESULT_SUCCESS) && (EBIUResult != ADI_EBIU_RESULT_CALL_IGNORED)) {    while(1);}
}

 

Нold time сигналов от bf. Не стыкуются. Память хочет 1 нс мин, bf обеспечивает 0.8 нс.

 

А можно поподробней? И как это связано с вышеописанным?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, или проверять регистры:

Вроде бы регистры EBIU стоят верно EB0CAW=3(11бит), EB0SZ=0(16МБ), EB0E=1(Вкл).
Судя по внешним проявлениям, они заданы неверно..

 

Или попробовать поставить обычную SDRAM, типа MT48LC8M32B2F5-7, вместо:

MT48LC4M32LFB5-8 IT:G 90 Ball VFBGA (13x8x1mm)
Но для начала, ИМХО, нужно сравнить алгоритмы работы SDRAM и MobileSDRAM..

Все же, они могут оказаться разными..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, или проверять регистры:

Судя по внешним проявлениям, они заданы неверно..

 

Действительно не верно! EB0CAW должен быть 8 бит.

Заменил инициализацию на:

 
while(!(*pEBIU_SDSTAT&1));
*pEBIU_SDSTAT|=0x10;
*pEBIU_SDRRC=0x0777;             //123MHz, 64ms, 4096 
*pEBIU_SDBCTL=0x0001;           //16MB 8bit
*pEBIU_SDGCTL=0x003BBBCD;  // Twr=3,Trcd=7,Trp=7,Tras=15,CL=3,PUPSD=15
while(*pEBIU_SDSTAT&8);
ssync();

 

Появились все 16Мб. И все биты кроме D16:D23 работают вроде нормально.

 

Поставил максимально возможные задержки, но проблема с битами D16:D23 всё равно переодически проявляется.

Причём просматривается зависимость от адреса. Т.е. как будто туда заскакивает адрес вместо даннык при чтении или записи.

 

Не подскажите какие сигналы смотреть, а то у меня 2 канальный медленный осциллограф, и я, честно говоря, несоображу что относительно чего не успевает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил другой образец платы - всё работает.

 

Запись+чтение 16МБ u8/u16/u32 длится 2774/1388/694мс соответственно.

Потребление при записи составляет 750мВт, а при чтении - 650мВт.

 

Вероятно на предыдущей плате какие-то проблемы с линией DQM2, но ни прозвонка и осциллограф ничего подозрительного не выявили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...