Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CY7C68013A проблема со скоростью передачи на ПК
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Димитрий
Приветствую всех.

Используется чип CY7C68013A. конечная точка на прием имеет конфигурацию IN2 bulk 512 x 4, Slave FIFO, шина 16. К чипу усб подключена плис которая в данный момент при флаге фулл=1(не полный) пишет данные. Измерения производятся через 1 сек, количество байт которые были записаны в чип при правильном флаге. На стороне ПК запущена программа со следующем текстом
CODE

...
// Прием данных
do{
len = xfer;
success = dlg->InEndpt->XferData(inData,len);
} while (success && dlg->bLooping);
...

xfer = 512
Вобщем только вызов чтения. Скорость при этом получается 2 МБайт/с. На этом же ПК стоит флэшка так скрость которую показывает тотолкомандер состовляет 20-23 МБайт/с. В чем может быть проблема такой низкой скорости? На форуме пишут что со стандартными драйверами достигали скорость начиная с 12 МБайт/с, а здесь в 4 раза меньше.
Есть еще просьба, если кому не жалко дайте программу которая работает с данным чипом на скорости 12 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето.
Спасибо.
Konst_777
Цитата(Димитрий @ Jul 28 2010, 13:10) *
...
Есть еще просьба, если кому не жалко дайте программу которая работает с данным чипом на скорости 12 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето.
Спасибо.

А пример Archive.rar из темы прием данных из АЦП в ПК по USB не подойдет?
Димитрий
Проблема оказалась в следующем.
раньше было
xfer = 512;
do{
len = xfer;
success = dlg->InEndpt->XferData(inData,len);
} while (success && dlg->bLooping);
и скорость была на уровне 2 Мбайт/с

когда использовали
SetXferSize(1000000);
xfer = 512 * 100;
do{
len = xfer;
success = dlg->InEndpt->XferData(inData,len);
} while (success && dlg->bLooping);
то скорость стала 36 МБайт/с.
В общем вроде все решилось.
Димитрий
Подниму тему. В устройстве есть буфер на 16 кБайт. поток данных состовляет 15 Мбайт/с. Проблема заключается в том что через некоторый интервал времени после начала приема буфер переполняется и данные теряются. Время это состовляет от 5-20 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный.
ukpyr
Какую скорость можно получить под Linux и libusb ? Намного ниже чем с драйвером от Cypress ?
-Al-
Цитата(Димитрий @ Aug 26 2010, 14:15) *
Подниму тему. В устройстве есть буфер на 16 кБайт. поток данных состовляет 15 Мбайт/с. Проблема заключается в том что через некоторый интервал времени после начала приема буфер переполняется и данные теряются. Время это состовляет от 5-20 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный.

У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI).
Димитрий
ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы...
-Al-
Цитата(Димитрий @ Aug 27 2010, 11:52) *
ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы...

С внутренним буфером можно и 30МБайт/сек получить, НО это будет не гарантированная скорость, а средняя. Без внешнего буфера про RealTime высокоскоростной поток можно забыть.

Цитата(ukpyr @ Aug 26 2010, 16:47) *
Какую скорость можно получить под Linux и libusb ? Намного ниже чем с драйвером от Cypress ?

Если Линукс тормознее винды, то и скорость будет ниже smile.gif А по существу, если все написано грамотно то >30МБайт/сек получить вполне реально.
:-)
Цитата(-Al- @ Aug 27 2010, 10:48) *
У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI).


Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с?
-Al-
Цитата(:-) @ Aug 27 2010, 15:30) *
Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с?

Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка smile.gif.
:-)
Цитата(-Al- @ Aug 27 2010, 15:34) *
Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка smile.gif.


Подскажите, пожалуйста, по логике работы всей схемы:

Откуда-то извне приходят данные на ПЛИС, ПЛИС их записывает в SRAM. Параллельно же ПЛИС считывает данные ("самые старые") из SRAM и подает их на FX2.

А как реализуется одновременность доступа к памяти со стороны ПЛИС и со стороны FX2? В ПЛИС реализованы какие-то дополнительные буферы данных?

И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?
-Al-
Цитата(:-) @ Aug 28 2010, 11:42) *
Подскажите, пожалуйста, по логике работы всей схемы:

Откуда-то извне приходят данные на ПЛИС, ПЛИС их записывает в SRAM. Параллельно же ПЛИС считывает данные ("самые старые") из SRAM и подает их на FX2.
Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.
Цитата
А как реализуется одновременность доступа к памяти со стороны ПЛИС и со стороны FX2? В ПЛИС реализованы какие-то дополнительные буферы данных?
На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.
Цитата
И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?
Есть флаги наличия/отсутствия данных во внутреннем буфере FX2.
:-)
Спасибо за ответы cheers.gif
leva87
Цитата(-Al- @ Aug 28 2010, 11:42) *
Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.Есть флаги наличия/отсутствия данных во внутреннем буфере FX2.


А как настроены флаги наличия данных? используется ли бит INFM1 в EPxFIFOCFG?
-Al-
Цитата(leva87 @ Sep 17 2010, 18:03) *
А как настроены флаги наличия данных? используется ли бит INFM1 в EPxFIFOCFG?

Флаги настроены по направлению EndPointов
Цитата
// Flag A - EP2(In) Empty FIFO;
// Flag B - EP4(Out) Full FIFO;
// Flag C - EP6(Out) Full FIFO;
// Flag D - EP8(Out) Full FIFO;

Т.е. для In я смотрю флаг Empty, и пока его нет - вычитываю данные. Для Out - записываю данные, пока флаг Full не появится.

Бит INFM1 я не использую.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.