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

CY7C68013A проблема со скоростью передачи на ПК

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

 

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

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

xfer = 512

Вобщем только вызов чтения. Скорость при этом получается 2 МБайт/с. На этом же ПК стоит флэшка так скрость которую показывает тотолкомандер состовляет 20-23 МБайт/с. В чем может быть проблема такой низкой скорости? На форуме пишут что со стандартными драйверами достигали скорость начиная с 12 МБайт/с, а здесь в 4 раза меньше.

Есть еще просьба, если кому не жалко дайте программу которая работает с данным чипом на скорости 12 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето.

Спасибо.

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


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

...

Есть еще просьба, если кому не жалко дайте программу которая работает с данным чипом на скорости 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 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный.

 

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


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

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

Изменено пользователем ukpyr

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


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

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

У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI).

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


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

ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы...

 

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


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

ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы...

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

 

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

Если Линукс тормознее винды, то и скорость будет ниже :) А по существу, если все написано грамотно то >30МБайт/сек получить вполне реально.

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


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

У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI).

 

Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с?

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


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

Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с?

Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка :).

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


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

Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка :).

 

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

 

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

 

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

 

И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?

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


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

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

 

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

Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.
А как реализуется одновременность доступа к памяти со стороны ПЛИС и со стороны FX2? В ПЛИС реализованы какие-то дополнительные буферы данных?
На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.
И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?
Есть флаги наличия/отсутствия данных во внутреннем буфере FX2.

 

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


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

Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.Есть флаги наличия/отсутствия данных во внутреннем буфере FX2.

 

А как настроены флаги наличия данных? используется ли бит INFM1 в EPxFIFOCFG?

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


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

А как настроены флаги наличия данных? используется ли бит 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 я не использую.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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