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

 
 
 
Reply to this topicStart new topic
> CY7C68013A проблема со скоростью передачи на ПК, не получается получить больше 2 МБайт/с
Димитрий
сообщение Jul 28 2010, 10:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 184
Регистрация: 21-03-06
Из: Нижний Новгород
Пользователь №: 15 435



Приветствую всех.

Используется чип 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 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето.
Спасибо.
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Jul 28 2010, 14:32
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Димитрий @ Jul 28 2010, 13:10) *
...
Есть еще просьба, если кому не жалко дайте программу которая работает с данным чипом на скорости 12 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето.
Спасибо.

А пример Archive.rar из темы прием данных из АЦП в ПК по USB не подойдет?
Go to the top of the page
 
+Quote Post
Димитрий
сообщение Jul 29 2010, 06:46
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 184
Регистрация: 21-03-06
Из: Нижний Новгород
Пользователь №: 15 435



Проблема оказалась в следующем.
раньше было
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 МБайт/с.
В общем вроде все решилось.
Go to the top of the page
 
+Quote Post
Димитрий
сообщение Aug 26 2010, 10:15
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 184
Регистрация: 21-03-06
Из: Нижний Новгород
Пользователь №: 15 435



Подниму тему. В устройстве есть буфер на 16 кБайт. поток данных состовляет 15 Мбайт/с. Проблема заключается в том что через некоторый интервал времени после начала приема буфер переполняется и данные теряются. Время это состовляет от 5-20 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Aug 26 2010, 12:47
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Какую скорость можно получить под Linux и libusb ? Намного ниже чем с драйвером от Cypress ?

Сообщение отредактировал ukpyr - Aug 26 2010, 12:49
Go to the top of the page
 
+Quote Post
-Al-
сообщение Aug 27 2010, 06:48
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(Димитрий @ Aug 26 2010, 14:15) *
Подниму тему. В устройстве есть буфер на 16 кБайт. поток данных состовляет 15 Мбайт/с. Проблема заключается в том что через некоторый интервал времени после начала приема буфер переполняется и данные теряются. Время это состовляет от 5-20 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный.

У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI).
Go to the top of the page
 
+Quote Post
Димитрий
сообщение Aug 27 2010, 07:52
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 184
Регистрация: 21-03-06
Из: Нижний Новгород
Пользователь №: 15 435



ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы...
Go to the top of the page
 
+Quote Post
-Al-
сообщение Aug 27 2010, 08:01
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



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

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

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

Если Линукс тормознее винды, то и скорость будет ниже smile.gif А по существу, если все написано грамотно то >30МБайт/сек получить вполне реально.
Go to the top of the page
 
+Quote Post
:-)
сообщение Aug 27 2010, 11:30
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 23-10-05
Из: Мск
Пользователь №: 10 006



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


Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с?
Go to the top of the page
 
+Quote Post
-Al-
сообщение Aug 27 2010, 11:34
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



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

Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка smile.gif.
Go to the top of the page
 
+Quote Post
:-)
сообщение Aug 28 2010, 07:42
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 23-10-05
Из: Мск
Пользователь №: 10 006



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


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

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

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

И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?
Go to the top of the page
 
+Quote Post
-Al-
сообщение Aug 28 2010, 08:42
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(:-) @ Aug 28 2010, 11:42) *
Подскажите, пожалуйста, по логике работы всей схемы:

Откуда-то извне приходят данные на ПЛИС, ПЛИС их записывает в SRAM. Параллельно же ПЛИС считывает данные ("самые старые") из SRAM и подает их на FX2.
Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.
Цитата
А как реализуется одновременность доступа к памяти со стороны ПЛИС и со стороны FX2? В ПЛИС реализованы какие-то дополнительные буферы данных?
На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.
Цитата
И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?
Есть флаги наличия/отсутствия данных во внутреннем буфере FX2.
Go to the top of the page
 
+Quote Post
:-)
сообщение Aug 28 2010, 09:05
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 23-10-05
Из: Мск
Пользователь №: 10 006



Спасибо за ответы cheers.gif
Go to the top of the page
 
+Quote Post
leva87
сообщение Sep 17 2010, 14:03
Сообщение #14





Группа: Участник
Сообщений: 12
Регистрация: 11-05-08
Пользователь №: 37 409



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


А как настроены флаги наличия данных? используется ли бит INFM1 в EPxFIFOCFG?
Go to the top of the page
 
+Quote Post
-Al-
сообщение Sep 20 2010, 08:26
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(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 я не использую.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 19:18
Рейтинг@Mail.ru


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