Jump to content

    
Sign in to follow this  
Neekeetos

Кипарис (cy7c68013a) slave fifo и работа с этим из win10

Recommended Posts

Привет всем,

Появилась необходимость с плис и выкачать некоторое количество данных на скорости порядка 40Мб/с , для этого под рукой оказался модуль на  cy7c68013a, который (по идее) такое позволяет в режиме slave fifo.  Однако возникла какая то странная проблема! Под 10ку не могу найти как именно считать эти данные используя стандартный драйвер ( это единственный живой вариант тк 10 не позволяет ставить неподписанные драйвера ). Хотелось бы прицепиться консольной програмкой (на си) к драйверу  и скачать что там плис выдает. Соотв. вопрос к людям которые работали с данными микросхемами, куда копать?  Может есть что-то из примеров/дельных советов ?  

Заранее спасибо!

Share this post


Link to post
Share on other sites

Если "40Мб/с " имеются ввиду мегабайты (?) то насколько я знаю, этм мс в синхронном режиме качает на тактовой не более 24MHz.

Все что надо, есть на сайте, примеры. Исходный коду утилиты на console32. Из утилиты "отсаживаете" функцию чтения из fifo.

"Прошивка" для CY7C68013 тамже, в виде проекта Keil. Пример можете взять "slave fifo" для закачки mpeg (исходник проекта).

Если вдруг рассичтываете на прокачку мегабайтов, то не выйдет, тк сам канал USB дает только 480 Мбит/с "чистыми".

Вообще чип очень старый, смотрите более мощные. Аналогичные девайсы есть у FTDI.

 

MSVS2008 + cyapi.lib  Консольное Win32

. . . .

 OVERLAPPED outOvLap, inOvLap;
 CCyUSBDevice  *USBDevice1 = new  CCyUSBDevice(NULL);
 int n_devices = USBDevice1->DeviceCount();

 if ( n_devices <= 0 )  { printf("\nINFO:  Unable to open device CYPRESS;\n");  exit(-1); }

 outOvLap.hEvent  = CreateEvent(NULL, false, false, "CYUSB_OUT");
 inOvLap.hEvent   = CreateEvent(NULL, false, false, "CYUSB_IN");

 static unsigned char inBuf[100000];	// приемный буфер
 LONG  length = 65000; //128;			// предполагаемая длина пакета (можно больше, но не менее)
 ZeroMemory(inBuf, sizeof(inBuf));
 int n_packet = 0;		// отладочный счетчик пакетов
 clock_t start, stop;	// для замера интервала времени между пакетами
 double  duration;		// интервал

 while( !kbhit() )		// выход по нажатию кл-ры
 {
	length = 65000;
	start = clock( );	// метка времени старта цикла опроса
	// ----------- CYPRESS ---------------------------------
	UCHAR  *inContext = USBDevice1->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap);
	USBDevice1->BulkInEndPt->WaitForXfer(&inOvLap,5000);
	USBDevice1->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext);
	// ---------- /CYPRESS ---------------------------------
	stop = clock( );	// метка времени стопа
	duration = (double)(stop - start) / CLOCKS_PER_SEC;
	printf("\nLen = %lu PacketInterval = %02.2f sec", length, duration);

	WriteFileDump_HEX_B("OSC_B", n_packet,  inBuf, length); 
	n_packet++;		// для отладки
	ZeroMemory(inBuf, sizeof(inBuf));
	Beep(6000, 10); 
}

CloseHandle(outOvLap.hEvent);
CloseHandle(inOvLap.hEvent);

 

Share this post


Link to post
Share on other sites
22 minutes ago, k155la3 said:

Если "40Мб/с " имеются ввиду мегабайты (?) то насколько я знаю, этм мс в синхронном режиме качает на тактовой не более 24MHz.

тактовая фифо выбирается между 24 и 48мгц, и ширина 8 или 16бит. У меня вариант 48/8бит 

27 minutes ago, k155la3 said:

Все что надо, есть на сайте, примеры. Исходный коду утилиты на console32. Из утилиты "отсаживаете" функцию чтения из fifo.

А с каким софтом она идет в комплекте? У меня из исходников только streamer и bulkloop нашлись

32 minutes ago, k155la3 said:

Если вдруг рассичтываете на прокачку мегабайтов, то не выйдет, тк сам канал USB дает только 480 Мбит/с "чистыми".

В 480мбит/с по идее 40Мб/с должно влезать.

Share this post


Link to post
Share on other sites
4 minutes ago, Neekeetos said:

В 480мбит/с по идее 40Мб/с должно влезать.

:) ОНО нам ничего не должно. С учетом "пакетизации" и накладных расходов на протокол USB - сильно сомневаюсь.

Читайте ейный TRM. У меня небыло необходимости разгонять по скорости, на 12 MHz вполне устраивало.

Для получения полного комплекта appnotes выкачивайте с сайта "пакеты" для ихних отладочных плат, там и документация, и драйверы, и примеры для PC и чипа fifo. Сразу хочу сказать, что "быстренько, сама, сама" может не получиться, тк Вам надо настроить "в едином порыве", согласовано 1. "прошивку" (fw) для процессора  CY7C68013.  2. корректное тактирование  CY7C68013 Вашим "мастером". 3. "клиентское" ПО на ПК должно корректно работать с  CY7C68013.

Share this post


Link to post
Share on other sites
55 минут назад, k155la3 сказал:

MSVS2008 + cyapi.lib  Консольное Win32

...

Не лучший пример для быстрой передачи. Для быстрой потоковой передачи нужно использовать overlapped-функции, позволяющие работать потоком и ставить в очередь множество буферов на обслуживание.

В API есть такие. А то что Вы привели - для неспешного обмена.

Если поток реалтаймовый - лучше использовать изохронную точку, а не bulk.

 

Share this post


Link to post
Share on other sites
1 minute ago, jcxz said:

Не лучший пример для быстрой передачи. Для быстрой передачи нужно использовать overlapped-функции, позволяющие работать потоком и ставить в очередь множество буферов на обслуживание.

Это пример утилиты. У меня был пакетный обмен. "Ничего личного" :)

Share this post


Link to post
Share on other sites
4 минуты назад, k155la3 сказал:

:) ОНО нам ничего не должно. С учетом "пакетизации" и накладных расходов на протокол USB - сильно сомневаюсь.

Вполне реально настроить закачку в CY7C68013A по GPIF на скорости около 24МБ/с по имеющейся у ТС 8-битной шине. При желании наверное можно попробовать сделать скорость и выше по той же шине.

Share this post


Link to post
Share on other sites
5 minutes ago, k155la3 said:

Для получения полного комплекта appnotes выкачивайте с сайта "пакеты" для ихних отладочных плат, там и документация, и драйверы, и примеры для PC и чипа fifo. Сразу хочу сказать, что "быстренько, сама, сама" может не получиться

Скачал какой то образ, изучаю что там :) Спасибо !

3 minutes ago, jcxz said:

Не лучший пример для быстрой передачи. Для быстрой передачи нужно использовать overlapped-функции, позволяющие работать потоком и ставить в очередь множество буферов на обслуживание.

А можно чуть подробнее про это? Я в общем то планировал на основе примера что то такое сделать, но с примерами напряженка оказалась :)

4 minutes ago, jcxz said:

Если поток реалтаймовый - лучше использовать изохронную точку, а не bulk.

Он не реалтаймовый, просто надо кучу данных вытащить из плис. 

Share this post


Link to post
Share on other sites
25 минут назад, Neekeetos сказал:

А с каким софтом она идет в комплекте? У меня из исходников только streamer и bulkloop нашлись

Софт Вы можете написать сами. Примеры там есть, вполне доступные. Насчёт "подписанности" драйверов под win10 - не уверен. Мне это было не нужно.

Share this post


Link to post
Share on other sites
2 minutes ago, jcxz said:

Насчёт "подписанности" драйверов под win10 - не уверен

Кипарис для этих чипов предлагал вариант сделать свой айди, свой драйвер и свой интерфейс к нему. Но это все не актуально в 10ке где подобный драйвер нельзя установить.. Поэтому стандартный из примеров это все что осталось, плюс может libusb но там скорости не будет мне кажется

Share this post


Link to post
Share on other sites
3 минуты назад, Neekeetos сказал:

А можно чуть подробнее про это? Я в общем то планировал на основе примера что то такое сделать, но с примерами напряженка оказалась :)

Качайте и ставьте "Cypress Suite USB". В его составе есть вполне себе достаточный хелп "CyUSB.NET.chm". Ну и примеры есть firmware и software (на компе).

Пример потоковой передачи насколько помню был в примере "Screamer".

3 минуты назад, Neekeetos сказал:

Он не реалтаймовый, просто надо кучу данных вытащить из плис. 

Если не реалтаймовый и не нужно успевать прокачивать данные пока не переполнился буфер тогда лучше - bulk. Если же всё-таки реалтайм и буфер в ПЛИС может переполниться из-за задержек - тогда изохронный поток.

В любом случае для быстрого потока лучше использовать overlapped-API с цепочками буферов.

Share this post


Link to post
Share on other sites
4 минуты назад, Neekeetos сказал:

Кипарис для этих чипов предлагал вариант сделать свой айди, свой драйвер и свой интерфейс к нему. Но это все не актуально в 10ке где подобный драйвер нельзя установить.. Поэтому стандартный из примеров это все что осталось, плюс может libusb но там скорости не будет мне кажется

libusb - не лучший выбор. Недавно я делал обзор по этим библиотекам. см.:  https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=155951

При работе с CY7C68013A я использовал CyUSB, но в те времена win10 ещё не было в природе.

Share this post


Link to post
Share on other sites

Странно, что в Win XP. . .Win10 нет "унифицированного" драйвера для работы с этим чипом, хотя-бы в режиме параллельного IDE-интерфейса, с которым они использовались. Возможно и есть, но "прошивка"-настройка Cypress должна быть соответствующая. Правда, в этом случае Win сразу "монополизирует" сей девайс. :aggressive: Могло бы быть полезно, подобно унификации драйвера HID.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this