_4afc_ 28 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба Собираюсь первый раз в жизни развести плату с 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 обойтись. Буду рад любым рекомендациям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба Дополнительный вопрос - как их между собой соединять для наименьшего потребления и наибольшей производительности? Буду рад любым рекомендациям. А что есть варианты? 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 инструментарием Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба Основной вопрос - они вместе жить будут?Без проблем. Ядро/шина взять 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_*). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба Не обязательно. В adi_ebiu_Init можно передать описание конфигурации памяти (ADI_EBIU_CMD_SET_SDRAM_*). Тогда нужно сделать до всего. Иначе при инициализации того-сего можно иметь большие сюрпризы. У меня сюрпризы возникали сперва от скрытых вызовов из других библиотечных функций при настройке PLL через сервисы - память теряла структуру, поскольку восстанавливалась китовой при вызове модулей из adi_pwr иногда. Там дофига кросс-ссылок между сервисами и паче чаяния память может отвалиться в самый неподходящий момент, если указана неправильно в ebiu В ките две 16-ти битных микрухи :) ну значит подключается примерно также с точностью до выбора 16-разрядного слова в 32-разрядном Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба Вроде так, если ничего не напутал :) 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 28 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба Пожалуйста. 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 читаю... А геморой я уже ловлю, ибо у меня два разных кита и проект от одного с другим не работает. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 15 октября, 2008 Опубликовано 15 октября, 2008 · Жалоба В случае индустриального 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 используются отнюдь не для рефреша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 7 ноября, 2008 Опубликовано 7 ноября, 2008 · Жалоба Основной вопрос - они вместе жить будут? Вроде шина у обоих - 3.3В, что ещё смотреть? Нold time сигналов от bf. Не стыкуются. Память хочет 1 нс мин, bf обеспечивает 0.8 нс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 28 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Собрал схему - но к сожалению работает только 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 нс. А можно поподробней? И как это связано с вышеописанным? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 32 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба ИМХО, или проверять регистры: Вроде бы регистры EBIU стоят верно EB0CAW=3(11бит), EB0SZ=0(16МБ), EB0E=1(Вкл).Судя по внешним проявлениям, они заданы неверно.. Или попробовать поставить обычную SDRAM, типа MT48LC8M32B2F5-7, вместо: MT48LC4M32LFB5-8 IT:G 90 Ball VFBGA (13x8x1mm)Но для начала, ИМХО, нужно сравнить алгоритмы работы SDRAM и MobileSDRAM.. Все же, они могут оказаться разными.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 28 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба ИМХО, или проверять регистры: Судя по внешним проявлениям, они заданы неверно.. Действительно не верно! 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 канальный медленный осциллограф, и я, честно говоря, несоображу что относительно чего не успевает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 28 18 июня, 2009 Опубликовано 18 июня, 2009 · Жалоба Проверил другой образец платы - всё работает. Запись+чтение 16МБ u8/u16/u32 длится 2774/1388/694мс соответственно. Потребление при записи составляет 750мВт, а при чтении - 650мВт. Вероятно на предыдущей плате какие-то проблемы с линией DQM2, но ни прозвонка и осциллограф ничего подозрительного не выявили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться