Jump to content

    

USB HID-совместимое устройство

Recommended Posts

bolschikovfa

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

Передо мной встала задача связаться с неким 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 я до этого не работал, может что делаю неправильно. Буду благодарен за любые советы.

post-40363-1319520437_thumb.png

post-40363-1319520450_thumb.png

post-40363-1319520461_thumb.png

Share this post


Link to post
Share on other sites

bolschikovfa

Как я понял запрос 51 34 0D... (см. изображения в предыдущем посте) идет на конечную точку №0, а ответ надо считать с конечной точки №81 (см. там же).

Собственно вопрос в том, какие управляющие ?репорты? нужно послать на устройство, чтобы считать готовые там данные.

Как писал выше, ранее я с USB не работал, отсюда вся неясность происходящего. Сейчас разбираюсь с документацией, но с парой подсказок начать было бы проще.

Share this post


Link to post
Share on other sites

bolschikovfa

Переформулирую вопрос более обще.

Каким образом произвести опрос конечной точки INTERRUPT IN USB-HID устройства? Обмен с нулевой конечной точкой у меня проходит.

 

Уважаемые пользователи форума. Кто пользуется аппаратным usb-сниффером (типа USB Explorer 200)?

Я столкнулся с необходимостью анализа обмена usb-hid устройства с ПК. Если есть возможность, арендую на денек, или (предпочтительно) подъеду со своим устройством.

Встречал тему, в которой пользователь vmp помог с таким вопросом.

Share this post


Link to post
Share on other sites

galjoen
Каким образом произвести опрос конечной точки INTERRUPT IN USB-HID устройства?

Самым обычным реадфиле. Вот только хэндл для креатфиле получить не так просто. По регистру нужно лазить, конечно, но несколько способов есть.

Share this post


Link to post
Share on other sites

bolschikovfa
Самым обычным реадфиле...

Дело в том, что мне необходимо опросить hid-устройство не с ПК, а ReadFile, я так понимаю, функция на ПК?

Share this post


Link to post
Share on other sites

bolschikovfa

Тема еще актуальна.

В чем я продвинулся:

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-пакет

_______PC_host.doc

_______Vinculum_host.doc

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.