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

Cypress FX3 (CYUSB3014) не корректно работает сигнал PktEnd

Здравствуйте, может быть что-нибудь подскажите

 

Использую 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, т.е. дело не в питание.

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

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


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

Была такая проблема. Передача по USB глючила. Оказалось, неправильно выдавал PktEnd. Там есть тонкости, PktEnd щелкаете только тогда, когда передаете неполный пакет данных. Например, если весь массив данных занимает целое число пакетов, т.е. размер всего массива кратен размеру одного пакета, то PktEnd трогать нельзя. Иначе он лишнюю передачу сделает. Я уже тонкостей всех не помню, могу ошибаться. Если что, смогу завтра подробнее копнуть эту тему, когда будет доступ к проекту.

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


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

Была такая проблема. Передача по 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 Гц, как я понимают на компьютере обеспечить такую минимальную частоту пингования не получиться. Т.е. надо асинхронный режим с потерей данных использовать

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

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


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

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

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

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

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

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

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

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

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

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