dlsh 1 28 июля, 2010 Опубликовано 28 июля, 2010 · Жалоба Приветствую всех. Используется чип 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 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 28 июля, 2010 Опубликовано 28 июля, 2010 · Жалоба ... Есть еще просьба, если кому не жалко дайте программу которая работает с данным чипом на скорости 12 МБайт/с или больше чтоб проверить дело в софте для ПК или в железе что то нето. Спасибо. А пример Archive.rar из темы прием данных из АЦП в ПК по USB не подойдет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 1 29 июля, 2010 Опубликовано 29 июля, 2010 · Жалоба Проблема оказалась в следующем. раньше было 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 МБайт/с. В общем вроде все решилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 1 26 августа, 2010 Опубликовано 26 августа, 2010 · Жалоба Подниму тему. В устройстве есть буфер на 16 кБайт. поток данных состовляет 15 Мбайт/с. Проблема заключается в том что через некоторый интервал времени после начала приема буфер переполняется и данные теряются. Время это состовляет от 5-20 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ukpyr 0 26 августа, 2010 Опубликовано 26 августа, 2010 (изменено) · Жалоба Какую скорость можно получить под Linux и libusb ? Намного ниже чем с драйвером от Cypress ? Изменено 26 августа, 2010 пользователем ukpyr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Подниму тему. В устройстве есть буфер на 16 кБайт. поток данных состовляет 15 Мбайт/с. Проблема заключается в том что через некоторый интервал времени после начала приема буфер переполняется и данные теряются. Время это состовляет от 5-20 сек. По всей видимости ОС на ПК отвлекается от приема и тем самым перегружает буфер. Если у кого есть опыт передачи потока данных на ПК по УСБ то какой буфер был у вашего устройства? Или как можно ограничить отвлечение на сторонние задачи ОС программным способом. На ПК стоит Виста. Драйвер стандартный. У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 1 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба ясно, по все видимости промахнулся с буфером капитально. Что то мне подумалось что раз в чипе поставили 1,5 кБайт буфер то этого должно хватать для высокой скорости, на всякий решил использовать в плисе еще на 16к. вилы... С внутренним буфером можно и 30МБайт/сек получить, НО это будет не гарантированная скорость, а средняя. Без внешнего буфера про RealTime высокоскоростной поток можно забыть. Какую скорость можно получить под Linux и libusb ? Намного ниже чем с драйвером от Cypress ? Если Линукс тормознее винды, то и скорость будет ниже :) А по существу, если все написано грамотно то >30МБайт/сек получить вполне реально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
:-) 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба У нас внешний буфер на 512кБ, хватает для потока в 18МБайт/сек. Это конечно при условии грамотно написанной программы приема (используем штатный CyAPI). Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Подскажите, а физически что из себя представляет буфер у вас? Какая-то специфичная м/с? Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
:-) 0 28 августа, 2010 Опубликовано 28 августа, 2010 · Жалоба Обычная SRAMка (K6R4016V1D) прикрученная к ПЛИС EPM1270. Можно и SDRAM поставить, если нужно больший буфер, чтоб наверняка :). Подскажите, пожалуйста, по логике работы всей схемы: Откуда-то извне приходят данные на ПЛИС, ПЛИС их записывает в SRAM. Параллельно же ПЛИС считывает данные ("самые старые") из SRAM и подает их на FX2. А как реализуется одновременность доступа к памяти со стороны ПЛИС и со стороны FX2? В ПЛИС реализованы какие-то дополнительные буферы данных? И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 28 августа, 2010 Опубликовано 28 августа, 2010 · Жалоба Подскажите, пожалуйста, по логике работы всей схемы: Откуда-то извне приходят данные на ПЛИС, ПЛИС их записывает в SRAM. Параллельно же ПЛИС считывает данные ("самые старые") из SRAM и подает их на FX2. Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.А как реализуется одновременность доступа к памяти со стороны ПЛИС и со стороны FX2? В ПЛИС реализованы какие-то дополнительные буферы данных?На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.И ещё вопрос как реализуется гарантия доставки данных? FX2 имеет какие-то флаги, по которым можно судить доставлены ли данные на ПК?Есть флаги наличия/отсутствия данных во внутреннем буфере FX2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
:-) 0 28 августа, 2010 Опубликовано 28 августа, 2010 · Жалоба Спасибо за ответы :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leva87 0 17 сентября, 2010 Опубликовано 17 сентября, 2010 · Жалоба Именно так, у меня тактовая 48МГц, в ПЛИС сделан FIFO на внешней SRAM, чтение/запись - 1 такт.На одно слово, т.к. процедура записи/чтения у меня 1 такт, если-бы было SDRAM, то там сложнее, уже без большого буфера не обойтись.Есть флаги наличия/отсутствия данных во внутреннем буфере FX2. А как настроены флаги наличия данных? используется ли бит INFM1 в EPxFIFOCFG? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 20 сентября, 2010 Опубликовано 20 сентября, 2010 · Жалоба А как настроены флаги наличия данных? используется ли бит 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 я не использую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться