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

CY7C68013A:проблема с Bulk Transfer

Здраствуйте.

Использую CYC68013A чип для обмена данными между устройством и PC.PC шлет пакет размером 512 байт используя bulk transfer (IOCTL_EZUSB_BULK_WRITE). Драйвер ezusb.sys. Чип сконфигурирован в режиме SlaveFifo.

Проблема в том что третья отсылка подвешивает функцию DeviceIOControl и управление не возвращается.

Для двух успешных отсылок прерывание на чипе просходят и на третьей нет.

Я посмотрел софтварным USB сниффером.При успешных передачах каждый раз уходят два пакета:один с данными а другой сниффер показыват как "Bulk transfer succeded". При третьей передаче уходит только пакет с данными а пакета "Bulk transfer succeded" нет.

В связи с эти вопрос,сколько пакетов уходит при bulk transfer и кто отвечает за второй пакет подтверждения?

Сам чип или драйвер PC?Должен ли чип подтверждать успешность приема?

 

 

 

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


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

Здраствуйте.

Использую 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...

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


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

Вы из чипа-то данные выгребаете?? Там по умолчанию FIFO на два кадра.

PS а зачем ezusb?? Есть вполне вменяемый CyAPI...

 

Спасибо.

Именно в этом была проблема.Теперь вычитываю и все работает.

Возник только такой вопрос:

Скажем хост шлет 4 байта,соответсвенно вычитывать весь FIFO нет смысла.Можно как-то опустошить оставшиеся 508 байт в FIFO?

 

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


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

Спасибо.

Именно в этом была проблема.Теперь вычитываю и все работает.

Возник только такой вопрос:

Скажем хост шлет 4 байта,соответсвенно вычитывать весь FIFO нет смысла.Можно как-то опустошить оставшиеся 508 байт в FIFO?

Вычитывайте, пока флаг empty fifo не появится. В принципе лишнего ничего вычитывать не надо. Повторю еще раз, FIFO на два кадра максимум по 512 байт, а не на 1024байта. Т.е. если пошлете два кадра и в каждом будет по байту - все FIFO заполнятся и послать Вы ничего не сможете, пока не вычитаете. Всё это происходит внутри, Вам лишь остается следить за флагами.

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


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

Вычитывайте, пока флаг empty fifo не появится. В принципе лишнего ничего вычитывать не надо. Повторю еще раз, FIFO на два кадра максимум по 512 байт, а не на 1024байта. Т.е. если пошлете два кадра и в каждом будет по байту - все FIFO заполнятся и послать Вы ничего не сможете, пока не вычитаете. Всё это происходит внутри, Вам лишь остается следить за флагами.

 

Тоесть FIFO на два кадра а не на два по 512 байт? Если пришел один кадр то FIFO заполнен но не на 512 байт а на столько на сколько было в кадре?Вычитав столько сколько было в кадре мы опустошили FIFO и тем самым подняли флаг?

Что прочитается если читать пустой FIFO?

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


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

Тоесть FIFO на два кадра а не на два по 512 байт? Если пришел один кадр то FIFO заполнен но не на 512 байт а на столько на сколько было в кадре?Вычитав столько сколько было в кадре мы опустошили FIFO и тем самым подняли флаг?
Да.
Что прочитается если читать пустой FIFO?
Без понятия, и зачем читать то, чего нет?? Используйте флаги.

 

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


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

Возникла проблема с драйвером ezusb.sys.

Система работает в асинхронном режиме. Устройство постоянно шлет данные (autoin).Программа принимает 65024 байт (127 пакетов).Я вызываю DeviceIoControl с параметром IOCTL_EZUSB_BULK_READ и жду 65024 байт.

Иногда отсылаю 4 байта.Проблема в том что сразу после отсылки приходят два байта а потом идут нормальные пакеты.

Это происходит после второй отсылки после первой нет.

Как такое возможно?

Может ли это быть связано с тем что когда я выполняю отсылку на прием не работаю а пакеты приходят?

Что с ними происходит?У драйвера есть внутренний буффер?Может эти два байта мусор от непринятых пакетов?

Изменено пользователем Sh@dow

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


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

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

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

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

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

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

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

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

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

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