GlueBF
Oct 25 2011, 05:30
Здравствуйте.
Передо мной встала задача связаться с неким USB HID-совместимым устройством (АБП с интерфейсом USB). В качестве хоста я использую плату VNCLO-MB1A (Vinculum-II). Для получения команд я воспользовался программным сниффером, скриншоты которого прилагаются.
Исходя из полученной информации, я посылаю следующие запросы:
80 06 01 03 09 04 FE 01 - приходит ответ 12 03 55 00 53 00 42 00 20 00 43 00 61 00 72 00 64 00 (все соответствует случаю, когда в качестве хоста выступает ПК);
80 06 00 03 09 04 FE 01 - приходит ответ 04 03 09 04 (все соответствует случаю, когда в качестве хоста выступает ПК);
21 09 00 02 00 00 20 00 + 51 34 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00. В данном случае АБП должен передать некоторую информацию, но он не отвечает. В терминале (подключенном к плате VNCLO-MB1A) приходит сообщение, что команда "прошла", но тут же что USB-устройство отключено, затем сразу снова подключено.
C USB я до этого не работал, может что делаю неправильно. Буду благодарен за любые советы.
GlueBF
Oct 25 2011, 09:58
Как я понял запрос 51 34 0D... (см. изображения в предыдущем посте) идет на конечную точку №0, а ответ надо считать с конечной точки №81 (см. там же).
Собственно вопрос в том, какие управляющие ?репорты? нужно послать на устройство, чтобы считать готовые там данные.
Как писал выше, ранее я с USB не работал, отсюда вся неясность происходящего. Сейчас разбираюсь с документацией, но с парой подсказок начать было бы проще.
GlueBF
Oct 31 2011, 11:00
Переформулирую вопрос более обще.
Каким образом произвести опрос конечной точки INTERRUPT IN USB-HID устройства? Обмен с нулевой конечной точкой у меня проходит.
Уважаемые пользователи форума. Кто пользуется аппаратным usb-сниффером (типа USB Explorer 200)?
Я столкнулся с необходимостью анализа обмена usb-hid устройства с ПК. Если есть возможность, арендую на денек, или (предпочтительно) подъеду со своим устройством.
Встречал тему, в которой пользователь vmp помог с таким вопросом.
galjoen
Oct 31 2011, 11:50
Цитата(GlueBF @ Oct 31 2011, 15:00)

Каким образом произвести опрос конечной точки INTERRUPT IN USB-HID устройства?
Самым обычным реадфиле. Вот только хэндл для креатфиле получить не так просто. По регистру нужно лазить, конечно, но несколько способов есть.
GlueBF
Oct 31 2011, 12:00
Цитата(galjoen @ Oct 31 2011, 14:50)

Самым обычным реадфиле...
Дело в том, что мне необходимо опросить hid-устройство не с ПК, а ReadFile, я так понимаю, функция на ПК?
Вопрос с арендой аппаратного usb-сниффера еще актуален.
Тема еще актуальна.
В чем я продвинулся:
1. Повторил схему USB-анализатора, приведенную в журнале Радио 09-2009 (стр. 27-29).
2. Проследил за процессами нумерации моего HID-устройства (АБП) с ПК и с платы Vincolo.
3. Нумерация с платы Vincolo и НАЧАЛО нумерации с ПК совпадают. НАЧАЛО, т.к. все данные процесса нумерации с ПК в ОЗУ USB-анализатора не помещаются.
4. На запрос с ПК поступает ответ.
5. На запрос с платы Vincolo ответ НЕ поступает.
Вопросы к членам форума:
В прикрепленных файлах приведен обмен хостов (ПК и платы Vincolo) с USB-HID устройством.
Обмен ПК с USB-HID устройством:
После подтверждения приема запроса (строки 14A0-14C0) хост начинает опрашивать устройство (строки 14D0...1670), пока не начнет получать данные от устройства.
Обмен платы Vincolo с USB-HID устройством:
После подтверждения приема запроса (строки 1790-17B0) хост НЕ начинает опрашивать устройство, а вместо этого сбрасывает линию и повторяет весь процесс нумерации.
ВОПРОС. Почему плата Vincolo не начинает слать запросы типа 69 81? Может быть в незарегистрированном продолжении нумерации с ПК есть соответствующие команды для начала этого опроса?
P.S. Из описания к USB-анализатору: "Каждая строка – это пакет, переданный по шине. В начале выводится адрес, по которому строка была записана в ОЗУ. Он позволяет убедиться, что анализатор работает нормально, без пропусков информации, а также облегчает восприятие, являясь порядковым номером строки. Затем после двоеточия идут байты информации. Направление передачи невозможно определить аппаратно, но оно может быть определено из предыстории и по идентификатору пакета – это всегда первый байт в пакете и, соответственно, в строке. Собственно идентификатор (PID) – это 4 младших бита первого байта, 4 старших бита – это инверсное значение младших бит, они служат для контроля."
Т.е. как я определил из спецификации USB:
2D - Setup-пакет
C3 и 4B - пакеты Data 0 и Data 1, соответственно
D2 - ACK
5A - NAK
69 - IN-пакет
E1 - OUT-пакет
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.