реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Непонятные транзакции в обмене с HID устройством
Serg_Sm
сообщение Apr 25 2013, 06:20
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Есть простейшее HID-устройство. Обмен только через Control Endpoit, размер 8 байт (сделано на SAM7).
Никакого другого обмена через Interrupt, Bulk нет.
В софте данные передаются HidD_SetOutputReport и принимаются HidD_GetInputReport. Это под Windows XP SP2.
В итоге после OUT транзакции следует непонятная IN, а после IN следовательно OUT.
Даже если просто слать данные без приема за транзакциями OUT всегда следует IN (а за IN - OUT).

Хочется от них избавиться, поскольку уменьшают пропускную способность шины, а то и без них 4000 байт/секунду максимум получается (учитывая SETUP).

HID-репорт и сами транзакции на рисунке для наглядности:
Прикрепленное изображение


PS: Посмотрел - эти пустые транзакции есть везде, включая дескрипторы и т.п. Взял готовое USB-устройство - там тоже самое.
Go to the top of the page
 
+Quote Post
редактор
сообщение Apr 25 2013, 08:21
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Вероятно размер данных конечной точки 8 байт. Поэтому передается пустой пакет, как признак завершения мультипакетной передачи.
При размере данных равном (или кратном) размеру конечной точки пустой пакет всегда присутствует.
То есть если размер вашего репорта будет 16 (24,32) байта, а размер конечной точки 8, то последний пакет в тразакции всегда должен быть 0-й длинны.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Apr 25 2013, 09:45
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Цитата(редактор @ Apr 25 2013, 11:21) *
Вероятно размер данных конечной точки 8 байт. Поэтому передается пустой пакет, как признак завершения мультипакетной передачи.
При размере данных равном (или кратном) размеру конечной точки пустой пакет всегда присутствует.
То есть если размер вашего репорта будет 16 (24,32) байта, а размер конечной точки 8, то последний пакет в тразакции всегда должен быть 0-й длинны.

Это здесь совсем не причем. К примеру передается строковой дескриптор размером 12 байт. После пакета SETUP следует 2 пакета IN (8+4 байта), а потом еще один пустой OUT.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01346 секунд с 7
ELECTRONIX ©2004-2016