Sh@dow 0 15 июля, 2010 Опубликовано 15 июля, 2010 · Жалоба Здраствуйте. Использую 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- 0 16 июля, 2010 Опубликовано 16 июля, 2010 · Жалоба Здраствуйте. Использую 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 0 16 июля, 2010 Опубликовано 16 июля, 2010 · Жалоба Вы из чипа-то данные выгребаете?? Там по умолчанию FIFO на два кадра. PS а зачем ezusb?? Есть вполне вменяемый CyAPI... Спасибо. Именно в этом была проблема.Теперь вычитываю и все работает. Возник только такой вопрос: Скажем хост шлет 4 байта,соответсвенно вычитывать весь FIFO нет смысла.Можно как-то опустошить оставшиеся 508 байт в FIFO? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 16 июля, 2010 Опубликовано 16 июля, 2010 · Жалоба Спасибо. Именно в этом была проблема.Теперь вычитываю и все работает. Возник только такой вопрос: Скажем хост шлет 4 байта,соответсвенно вычитывать весь FIFO нет смысла.Можно как-то опустошить оставшиеся 508 байт в FIFO? Вычитывайте, пока флаг empty fifo не появится. В принципе лишнего ничего вычитывать не надо. Повторю еще раз, FIFO на два кадра максимум по 512 байт, а не на 1024байта. Т.е. если пошлете два кадра и в каждом будет по байту - все FIFO заполнятся и послать Вы ничего не сможете, пока не вычитаете. Всё это происходит внутри, Вам лишь остается следить за флагами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sh@dow 0 16 июля, 2010 Опубликовано 16 июля, 2010 · Жалоба Вычитывайте, пока флаг empty fifo не появится. В принципе лишнего ничего вычитывать не надо. Повторю еще раз, FIFO на два кадра максимум по 512 байт, а не на 1024байта. Т.е. если пошлете два кадра и в каждом будет по байту - все FIFO заполнятся и послать Вы ничего не сможете, пока не вычитаете. Всё это происходит внутри, Вам лишь остается следить за флагами. Тоесть FIFO на два кадра а не на два по 512 байт? Если пришел один кадр то FIFO заполнен но не на 512 байт а на столько на сколько было в кадре?Вычитав столько сколько было в кадре мы опустошили FIFO и тем самым подняли флаг? Что прочитается если читать пустой FIFO? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 16 июля, 2010 Опубликовано 16 июля, 2010 · Жалоба Тоесть FIFO на два кадра а не на два по 512 байт? Если пришел один кадр то FIFO заполнен но не на 512 байт а на столько на сколько было в кадре?Вычитав столько сколько было в кадре мы опустошили FIFO и тем самым подняли флаг?Да.Что прочитается если читать пустой FIFO?Без понятия, и зачем читать то, чего нет?? Используйте флаги. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sh@dow 0 19 июля, 2010 Опубликовано 19 июля, 2010 (изменено) · Жалоба Возникла проблема с драйвером ezusb.sys. Система работает в асинхронном режиме. Устройство постоянно шлет данные (autoin).Программа принимает 65024 байт (127 пакетов).Я вызываю DeviceIoControl с параметром IOCTL_EZUSB_BULK_READ и жду 65024 байт. Иногда отсылаю 4 байта.Проблема в том что сразу после отсылки приходят два байта а потом идут нормальные пакеты. Это происходит после второй отсылки после первой нет. Как такое возможно? Может ли это быть связано с тем что когда я выполняю отсылку на прием не работаю а пакеты приходят? Что с ними происходит?У драйвера есть внутренний буффер?Может эти два байта мусор от непринятых пакетов? Изменено 19 июля, 2010 пользователем Sh@dow Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться