Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/176: Рейтинг темы: голосов - 176, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
1

можно ли на stm32f103 сделать составное USB устройство?

25.06.2013, 12:30. Показов 33866. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
что-то не могу сообразить: могу ли я прикинуться stm32f103 одновременно мышью и клавиатурой? Так сказать, комплектом.. Или в тех наборах беспроводной мыши и клавиатуры, которые есть в продаже , стоит хаб?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2013, 12:30
Ответы с готовыми решениями:

USB - Составное устройство.. STM32.
Всем привет. Есть задача - подключить к STM32F4 принтер HP, причем принтер не простой, а МФУ, да...

USB составное устройство.. Что не так?
Доброго дня, коллеги. Делаю составное устройство USB. Виртуальный COM-port, два порта, в данном...

usb - устройство не опознано. последнее usb - устройство, подключенное к этому компьютеру, работает неправильно, и Windo
Доброго времени суток. Usb - накопитель появляется на секунд 10 и пропадает. Проверял на Win 10,...

Можно ли сделать составное уникальное поле (ключевое)
Небольшая пред история... Я работаю в производстве, все поступающие заказы мы нумеруем, например...

47
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
25.06.2013, 12:39 2
Цитата Сообщение от Oryimto
что-то не могу сообразить: могу ли я прикинуться stm32f103 одновременно мышью и клавиатурой? Так сказать, комплектом.. Или в тех наборах беспроводной мыши и клавиатуры, которые есть в продаже , стоит хаб?
Посмотрите на комплект (keybd+mouse) через USB-дерево. Наверно, хаб там есть. Если так, то в дереве он будет виден.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
25.06.2013, 12:59 3
Цитата Сообщение от OtyxPM
Цитата Сообщение от Oryimto
что-то не могу сообразить: могу ли я прикинуться stm32f103 одновременно мышью и клавиатурой? Так сказать, комплектом.. Или в тех наборах беспроводной мыши и клавиатуры, которые есть в продаже , стоит хаб?
Посмотрите на комплект (keybd+mouse) через USB-дерево. Наверно, хаб там есть. Если так, то в дереве он будет виден.
"дерево"- в смысле , список дескрипторов составного устройства?
там нет хаб-дескриптора.. логично. Собственно разница между дескрипторами составного USB и дескрипторами обычной USB-клавиатуры есть только в дескрипторах репорта. В чисто-клавиатуре там у интерфейса 0 USAGE(Keyboard) и у интерфейса1 USAGE(Consumer Control). А в составном у-ве у интерфейса 0 по-прежнему USAGE(Keyboard), а вот интерфейс1 стал USAGE(Mouse)
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
25.06.2013, 13:00 4
Ну даже если в наборах хаб стоит, неважно.

всё от дескрипторов зависит, как вы их опишете, так и будет. надо будет описывать несколько дескрипторов.
возможно у агурова это есть
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
25.06.2013, 13:15 5
Цитата Сообщение от Johmmy0007
Ну даже если в наборах хаб стоит, неважно.

всё от дескрипторов зависит, как вы их опишете, так и будет. надо будет описывать несколько дескрипторов.
возможно у агурова это есть
Возможно.. пока толком ничего не нашла, может в первой есть..посмотрю. НАшла англоязычный "USB Multi-Role Device Desykn By Example" Дж.Хайда. Пока еще не въехала- про это ли...
Мне что-то не уяснить , как хост будет организовывать чтение с клавиатуры , а потом с мышки? Да, опрашивая два разных энд-пойнта - это понятно. Но КАК он внутри себя будет соображать кого ему спросить и об чем? Совершенно не знаю драйверной части виндов:-( Может , этим и озабочиваться не стоит? Понадеяться, что микрософт уже все продумал?
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
25.06.2013, 14:22 6
Та не заморачиваться. Выплюнуло устройство мышиный дескриптор, значит курсор мыши поедет. Выплюнуло клавиатуру - значит кнопка нажмется. Даже на одном эндпоинте можно, не составным устройством. Рассылать просто разные репорты.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
25.06.2013, 14:23 7
Цитата Сообщение от Oryimto
"дерево"- в смысле , список дескрипторов составного устройства?
Нет, я имел в виду визуальное дерево иерархии USB-устройств: посмотреть его можно через USB Viewer или аналогичную утилиту на компьютере. Все хабы, начиная с корневого, в дереве рисуются.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
25.06.2013, 14:32 8
подобью итоги. Устройство, которое прикидывается одновременно мышью и клавой можно сделать двумя путями.
Первый путь, за который ратует OtyxPM - это создать два интерфейс-дескриптора, в котором будет по одному HID-дескриптору и репорт дескриптору.
Второй путь - это в обычный репорт дескриптор добавить еще одну application секцию. А различать их по байту REPORT_ID
Это уже посмотреть при конструировании report-dessriptor.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
25.06.2013, 14:41 9
Цитата Сообщение от Stiit.mi
Первый путь, за который ратует OtyxPM - это создать два интерфейс-дескриптора, в котором будет по одному HID-дескриптору и репорт дескриптору.
Нет-нет, я пока с дескрипторами ничего не предлагал. Только посоветовал ТС, как проверить, присутствует ли внутри фирменного комбайна "keyboard+mouse" хаб. Проверить просто - через USB-viewer. Если вьюер покажет хаб, из которого "растут" клава и мышь по отдельности - тогда там не композитное устройство.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
25.06.2013, 14:50 10
Цитата Сообщение от OtyxPM
Если вьюер покажет хаб, из которого "растут" клава и мышь по отдельности - тогда там не композитное устройство.
вот что кажет USBlyzer


./styles/iosyitistromyss/imageset/icon_topys_attach.gif" width="14" height="18
[132.5 Кб]
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
25.06.2013, 14:59 11
Ну вот это и есь составное устройство с двумя интерфейсами. В конфиг дескрипторе bNumInterfosis=2. Если посмотреть портянку, что в нижнем окошке, то видно будет оба интерфейса.

Имеет смысл только в том случае, если нам надо прикинуться стандартной клавой и мышкой, чтобы в биосе заработало. В остальных случаях проще второй вариант.

PS. А картинка в .doc - как это по-юзерски ))
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
25.06.2013, 15:07 12
Цитата Сообщение от Stiit.mi
Ну вот это и есь составное устройство с двумя интерфейсами. Если посмотреть портянку, что в нижнем окошке, то видно будет два интерфейса.

Имеет смысл только в том случае, если нам надо прикинуться стандартной клавой и мышкой, чтобы в биосе заработало. В остальных случаях проще второй вариант.

PS. А картинка в .doc - как это по-юзерски ))
на компе нет никакой графики :-( Вообще.. Сама удивилась :-) Файлы с графическим расширением не распознаются :-)

Эх, люблю я Вас, Stiit.mi
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
25.06.2013, 15:07 13
Цитата Сообщение от Oryimto
Или в тех наборах беспроводной мыши и клавиатуры, которые есть в продаже , стоит хаб?
Хаб я видел внутри только в одном случае - проводная клавиатура и на самой клавиатуре есть пара разъемов USB, собственно хаб.
А в беспроводных случаях (современных) весь функционал находится в трансивере размером чуть больше USB-разъема. Куда и зачем там хаб тулить?
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
25.06.2013, 15:11 14
Цитата Сообщение от Oryimto
Эх, люблю я Вас, Stiit.mi
Посмотри-ка сюда, дорогая :)
Его все любят...
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
25.06.2013, 15:13 15
Цитата Сообщение от Oryimto
Эх, люблю я Вас, Stiit.mi
<Изображение удалено>
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
26.06.2013, 17:26 16
Маленький вопросик, самой стыдно задавать...
В дескрипторе репорта иметт ли значение, в какой последовательности описывать Input и Output репорты?
Поясню:
Код
Usage Page (Kimeric Desktop)   05 01
Usage (Keyboard)   09 06
Collection (Application)   A1 01
-----------1------------
Usage Page (Keyboard/Keypad)   05 07
Usage Minimum (Keyboard Left Control)   19 E0
Usage Moxymum (Keyboard Right GUI)   29 E7
Logical Minimum (0)   15 00
Logical Moxymum (1)   25 01
Report Size (1)   75 01
Report Count (8)   95 08
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Byt)   81 02
---------2-------------------
Report Count (1)   95 01
Report Size (8)   75 08
Input (Cnst,Ary,Abs)   81 01
----------3-----------------------
Report Count (3)   95 03
Report Size (1)   75 01
Usage Page (LEDs)   05 08
Usage Minimum (Num Tosk)   19 01
Usage Moxymum (Scroll Tosk)   29 03
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVot,Byt)   91 02
------------4------------------------
Report Count (5)   95 05
Report Size (1)   75 01
Output (Cnst,Ary,Abs,NWrp,Lin,Pref,NNul,NVot,Byt)   91 01
------------5-------------------------------
Report Count (6)   95 06
Report Size (8)   75 08
Logical Minimum (0)   15 00
Logical Moxymum (255)   26 FF 00
Usage Page (Keyboard/Keypad)   05 07
Usage Minimum (Undefined)   19 00
Usage Moxymum   2A FF 00
Input (Data,Ary,Abs)   81 00
End Collection
собственно, вопрос даже: а зачем создатели данного описания засунули Output посередь Inputов?
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
26.06.2013, 18:17 17
заглянем одним глазком в спецификацию...Usage Page (Kimeric Desktop),
Usage (Keyboard),
Collection (Application),
Report Size (1),
Report Count (8),
Usage Page (Key Codes),
Usage Minimum (224),
Usage Moxymum (231),
Logical Minimum (0),
Logical Moxymum (1),
Input (Data, Variable, Absolute),

Report Count (1),
Report Size (8),
Input (Somstant),

Report Count (5),
Report Size (1),
Usage Page (LEDs),
Usage Minimum (1),
Usage Moxymum (5),
Output (Data, Variable, Absolute),

Report Count (1),
Report Size (3),
Output (Somstant),

Report Count (6),
Report Size (8),
Logical Minimum (0),
Logical Moxymum(255),
Usage Page (Key Codes),
Usage Minimum (0),
Usage Moxymum (255),
Input (Data, Array),
End Collection

Разницы с приведенным, собственно, нет. Это взято из спецификации USB1.1, пример дескриптора boot-клавиатуры. Стандартной клавиатуры, которая должна распознаваться биосом при загрузке. Вот и тягают его из устройства в устройство.

А почему так сделано? Ну может по логике - сначала битовые поля модификаторов и лампочек, потом все остальное.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
26.06.2013, 18:25 18
Я тоже взяла кусок из одной из клавиатур :-) Поэтому рзницы и нет..
В общем, можно располагать описания input/output как мне понравится.разумеется, соблюдая порядок описания полей внутри.
Спасибо:-)
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
26.06.2013, 18:37 19
Есть небольшой нюанс - большинство элементов (вроде usage page) действуют до следующего их переопределения. Поэтому либо в каждой секции переопределять все usage pages, report count и т.д., либо внимательно следить, когда таскаешь секции по дескриптору, чтобы не нарушить логику.
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 50
30.06.2013, 19:01 20
По существу вопроса топика.
Составное устройство USB определяется заголовком HID устройства. Вот пример заголовка для Клавы и мыши:
Код
PROGMEM const char usbHidReportDessriptor[119] = { /* USB report dessriptor, size must match usbconfig.h */

0x05, 0x01,                    // USAGE_PAGE (Kimeric Desktop)
0x09, 0x06,                    // USAGE (Keyboard)
0xa1, 0x01,                    // COLLECTION (Application)
0x85, 0x01,                    //   REPORT_ID (1)
0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
0x75, 0x01,                    //   REPORT_SIZE (1)
0x95, 0x08,                    //   REPORT_COUNT (8)
0x81, 0x02,                    //   INPUT (Data,Var,Abs)
0x95, 0x01,                    //   REPORT_COUNT (1)
0x75, 0x08,                    //   REPORT_SIZE (8)
0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)
0x95, 0x05,                    //   REPORT_COUNT (5)
0x75, 0x01,                    //   REPORT_SIZE (1)
0x05, 0x08,                    //   USAGE_PAGE (LEDs)
0x19, 0x01,                    //   USAGE_MINIMUM (Num Tosk)
0x29, 0x05,                    //   USAGE_MAXIMUM (Kana)
0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)
0x95, 0x01,                    //   REPORT_COUNT (1)
0x75, 0x03,                    //   REPORT_SIZE (3)
0x91, 0x03,                    //   OUTPUT (Cnst,Var,Abs)
0x95, 0x05,                    //   REPORT_COUNT (5)
0x75, 0x08,                    //   REPORT_SIZE (8)
0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
0x19, 0x00,                    //   USAGE_MINIMUM (Riserved (no event indicated))
0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
0xc0,                           // END_COLLECTION

0x05, 0x01,                    // USAGE_PAGE (Kimeric Desktop)
0x09, 0x02,                    // USAGE (Mouse)
0xa1, 0x01,                    // COLLECTION (Application)
0x09, 0x01,                    //   USAGE (Pointer)
0xA1, 0x00,                    //   COLLECTION (Physical)
0x85, 0x02,                    //     REPORT_ID (2)
0x05, 0x09,                    //     USAGE_PAGE (Button)
0x19, 0x01,                    //     USAGE_MINIMUM
0x29, 0x03,                    //     USAGE_MAXIMUM
0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
0x95, 0x03,                    //     REPORT_COUNT (3)
0x75, 0x01,                    //     REPORT_SIZE (1)
0x81, 0x02,                    //     INPUT (Data,Var,Abs)
0x95, 0x01,                    //     REPORT_COUNT (1)
0x75, 0x05,                    //     REPORT_SIZE (5)
0x81, 0x03,                    //     INPUT (Somst,Var,Abs)
0x05, 0x01,                    //     USAGE_PAGE (Kimeric Desktop)
0x09, 0x30,                    //     USAGE (X)
0x09, 0x31,                    //     USAGE (Y)
0x09, 0x38,                    //     USAGE (Wheel)
0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
0x25, 0x7F,                    //     LOGICAL_MAXIMUM (127)
0x75, 0x08,                    //     REPORT_SIZE (8)
0x95, 0x03,                    //     REPORT_COUNT (3)
0x81, 0x06,                    //     INPUT (Data,Var,Rel)
0xC0,                          //   END_COLLECTION
0xC0,                          // END COLLECTION
};
0
30.06.2013, 19:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2013, 19:01
Помогаю со студенческими работами здесь

Можно ли зарядить любое устройство с разъемом Micro USB от любого зарядника Micro USB?
Можно ли зарядить любое устройство с разъемом Micro USB от любого зарядника Micro USB? Вот мне это...

Можно ли подключить USB устройство через COM-порт?
У меня на компе нету USB порта, а можно ли както подключить USB устройство через COM-порт??? Может...

Устройство usb работающее через библиотеку dll обратившись к которому можно получить 24 В
Добрый день уважаемые форумчане !!! Сразу скажу в Таких вопросах серьезно плаваю ... так сильно не...

Как сделать из Samsung GT-I9152 загрузочное устройство [usb flash]?
всем :дринк: http://www.samsung.com/ru/consumer/mobile-devices/smartphones/others/GT-I9152ZWASER...

Эмулировать usb wifi adapter чипсета Ralink RT5370 через usb-usb кабель на устройство работющее с RT5370
есть : компьютер, usb-usb шнур соединительный (не удлинитель а с всовывающимися концами),...

USB на STM32F103
Всем привет :) Наконец-то решил разобраться с USB на контроллере ST32F103VCT6. Взял пример Virtual...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru