Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CY7C68013A:проблема с Bulk Transfer
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Sh@dow
Здраствуйте.
Использую CYC68013A чип для обмена данными между устройством и PC.PC шлет пакет размером 512 байт используя bulk transfer (IOCTL_EZUSB_BULK_WRITE). Драйвер ezusb.sys. Чип сконфигурирован в режиме SlaveFifo.
Проблема в том что третья отсылка подвешивает функцию DeviceIOControl и управление не возвращается.
Для двух успешных отсылок прерывание на чипе просходят и на третьей нет.
Я посмотрел софтварным USB сниффером.При успешных передачах каждый раз уходят два пакета:один с данными а другой сниффер показыват как "Bulk transfer succeded". При третьей передаче уходит только пакет с данными а пакета "Bulk transfer succeded" нет.
В связи с эти вопрос,сколько пакетов уходит при bulk transfer и кто отвечает за второй пакет подтверждения?
Сам чип или драйвер PC?Должен ли чип подтверждать успешность приема?


-Al-
Цитата(Sh@dow @ Jul 15 2010, 16:38) *
Здраствуйте.
Использую CYC68013A чип для обмена данными между устройством и PC.PC шлет пакет размером 512 байт используя bulk transfer (IOCTL_EZUSB_BULK_WRITE). Драйвер ezusb.sys. Чип сконфигурирован в режиме SlaveFifo.
Проблема в том что третья отсылка подвешивает функцию DeviceIOControl и управление не возвращается.
Для двух успешных отсылок прерывание на чипе просходят и на третьей нет.
Я посмотрел софтварным USB сниффером.При успешных передачах каждый раз уходят два пакета:один с данными а другой сниффер показыват как "Bulk transfer succeded". При третьей передаче уходит только пакет с данными а пакета "Bulk transfer succeded" нет.
В связи с эти вопрос,сколько пакетов уходит при bulk transfer и кто отвечает за второй пакет подтверждения?
Сам чип или драйвер PC?Должен ли чип подтверждать успешность приема?

Вы из чипа-то данные выгребаете?? Там по умолчанию FIFO на два кадра.
PS а зачем ezusb?? Есть вполне вменяемый CyAPI...
Sh@dow
Цитата(-Al- @ Jul 16 2010, 11:31) *
Вы из чипа-то данные выгребаете?? Там по умолчанию FIFO на два кадра.
PS а зачем ezusb?? Есть вполне вменяемый CyAPI...


Спасибо.
Именно в этом была проблема.Теперь вычитываю и все работает.
Возник только такой вопрос:
Скажем хост шлет 4 байта,соответсвенно вычитывать весь FIFO нет смысла.Можно как-то опустошить оставшиеся 508 байт в FIFO?
-Al-
Цитата(Sh@dow @ Jul 16 2010, 16:02) *
Спасибо.
Именно в этом была проблема.Теперь вычитываю и все работает.
Возник только такой вопрос:
Скажем хост шлет 4 байта,соответсвенно вычитывать весь FIFO нет смысла.Можно как-то опустошить оставшиеся 508 байт в FIFO?

Вычитывайте, пока флаг empty fifo не появится. В принципе лишнего ничего вычитывать не надо. Повторю еще раз, FIFO на два кадра максимум по 512 байт, а не на 1024байта. Т.е. если пошлете два кадра и в каждом будет по байту - все FIFO заполнятся и послать Вы ничего не сможете, пока не вычитаете. Всё это происходит внутри, Вам лишь остается следить за флагами.
Sh@dow
Цитата(-Al- @ Jul 16 2010, 18:42) *
Вычитывайте, пока флаг empty fifo не появится. В принципе лишнего ничего вычитывать не надо. Повторю еще раз, FIFO на два кадра максимум по 512 байт, а не на 1024байта. Т.е. если пошлете два кадра и в каждом будет по байту - все FIFO заполнятся и послать Вы ничего не сможете, пока не вычитаете. Всё это происходит внутри, Вам лишь остается следить за флагами.


Тоесть FIFO на два кадра а не на два по 512 байт? Если пришел один кадр то FIFO заполнен но не на 512 байт а на столько на сколько было в кадре?Вычитав столько сколько было в кадре мы опустошили FIFO и тем самым подняли флаг?
Что прочитается если читать пустой FIFO?
-Al-
Цитата(Sh@dow @ Jul 16 2010, 22:24) *
Тоесть FIFO на два кадра а не на два по 512 байт? Если пришел один кадр то FIFO заполнен но не на 512 байт а на столько на сколько было в кадре?Вычитав столько сколько было в кадре мы опустошили FIFO и тем самым подняли флаг?
Да.
Цитата
Что прочитается если читать пустой FIFO?
Без понятия, и зачем читать то, чего нет?? Используйте флаги.
Sh@dow
Возникла проблема с драйвером ezusb.sys.
Система работает в асинхронном режиме. Устройство постоянно шлет данные (autoin).Программа принимает 65024 байт (127 пакетов).Я вызываю DeviceIoControl с параметром IOCTL_EZUSB_BULK_READ и жду 65024 байт.
Иногда отсылаю 4 байта.Проблема в том что сразу после отсылки приходят два байта а потом идут нормальные пакеты.
Это происходит после второй отсылки после первой нет.
Как такое возможно?
Может ли это быть связано с тем что когда я выполняю отсылку на прием не работаю а пакеты приходят?
Что с ними происходит?У драйвера есть внутренний буффер?Может эти два байта мусор от непринятых пакетов?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.