Manfred 0 23 декабря, 2015 Опубликовано 23 декабря, 2015 (изменено) · Жалоба Здравствуйте, может быть что-нибудь подскажите Использую CYUSB3014 с ПЛИС 32 бит шина, 50МГц, не корректно работает Bulk In EndPoint, т.е. данные из ПЛИС в компьютер. Все хорошо работает, если я передаю пакетами 1-255 DWORDs (4 - 1020 байт) и коммичу их у последнего данного сигналом EndPoint, но при попытке передать 1 кбайт или больше USB монитор пишет 'USB device surprisingly removed'. Временные диаграммы ни чем не отличаются от тех когда работа идет корректно. Пробывал использовать ZLP для отправки пакета, ситуация аналогичная. Если я не использую PktEnd сигнал, то данные передаются только порциями по 16384 байт. Если данные не кратны 16к, то они остаются в буфере CYUSB3014, а моя программа ждет их до TimeOut. Удается передать по 512к данных (больше не надо), пакетами по 1020 байт или без сигнала PktEnd, т.е. дело не в питание. Изменено 23 декабря, 2015 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 23 декабря, 2015 Опубликовано 23 декабря, 2015 · Жалоба Была такая проблема. Передача по USB глючила. Оказалось, неправильно выдавал PktEnd. Там есть тонкости, PktEnd щелкаете только тогда, когда передаете неполный пакет данных. Например, если весь массив данных занимает целое число пакетов, т.е. размер всего массива кратен размеру одного пакета, то PktEnd трогать нельзя. Иначе он лишнюю передачу сделает. Я уже тонкостей всех не помню, могу ошибаться. Если что, смогу завтра подробнее копнуть эту тему, когда будет доступ к проекту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 20 февраля, 2016 Опубликовано 20 февраля, 2016 (изменено) · Жалоба Была такая проблема. Передача по USB глючила. Оказалось, неправильно выдавал PktEnd. Там есть тонкости, PktEnd щелкаете только тогда, когда передаете неполный пакет данных. Например, если весь массив данных занимает целое число пакетов, т.е. размер всего массива кратен размеру одного пакета, то PktEnd трогать нельзя. Иначе он лишнюю передачу сделает. Я уже тонкостей всех не помню, могу ошибаться. Если что, смогу завтра подробнее копнуть эту тему, когда будет доступ к проекту. Спасибо, за ответ - очень похоже на то что есть волшебные размеры пакетов, когда PktEnd сигналы в конце пакетов игнорируется (1024 байта одно из них) Проблема оказалась в том, что в режиме BULK похоже есть таймаут между BulkOut (PC to FPGA) и BulkIn (FPGA to PC) пакетами, если пингануть USB устройство любым BulkOut пакетом, то оно выбрасывает все буфера наружу, не в зависимости от размера записываемых пакетов. А если между запросом и ответом прошло времени больше некоторого, то пакеты данных записанные в FX3 не отправляются. Со стороны ПК я их ждал по 10 сек. Т.е. когда я записывал данных больше 1k наступал таймаут на отправление BulkIn данных. Правильно ли я понимаю, что если хочется пользуясь режимом Bulk гнать прерывистный поток без потери данных и без управления с ПК, то надо все время пинговать USB устройство BulkOut пакетами? Частота пачек из пакетов у меня где-то 400 Гц, как я понимают на компьютере обеспечить такую минимальную частоту пингования не получиться. Т.е. надо асинхронный режим с потерей данных использовать Изменено 20 февраля, 2016 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться