Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/47: Рейтинг темы: голосов - 47, средняя оценка - 5.00
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,691
Записей в блоге: 9

Идентификация своего USB устройства на компьютере

04.03.2019, 10:48. Показов 11460. Ответов 33
Метки usb (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добра и всего самого вкусного!
Обязательное требование - пользователь работающий с USB устройством через программу на компьютере не должен указывать номер COM порта, программа сама должна найти своё устройство.
Ранее я непосредственно с USB дело не имел, использовал FTDI. Прочитал "Агуров П.В. - Практика программирования USB. 2006 г". Разумеется сильно устарела и примеры там для AT89C5131, а мне нужно для ST32F373. Но пока у меня только отладочная плата NUCLEO-L476RG, решил начать с неё. Сделал кубом проект для CDC устройства, указал там своё имя. Пока не ставил драйвер от ST оно виделось в диспетчере устройств (конкретно win7х64) как устройство без драйвера но с именем указанным в
C
1
#define USBD_PRODUCT_STRING_FS
Однако, после установки драйвера все свойства видимые в диспетчере про устройство заменились на "STmicroelectronic ...".
После установки этого драйвера строковый дескриптор продукта уже никак программно не вытащить?
Речь не про подключение к терминалу. Программа работающая с устройством будет написана заново, там поверху будет свой протокол который можно менять.
В принципе, можно опрашивать все доступные COM-порты. В устройстве сделать что бы оно при поднятии DTR выдавало строку идентификации, но это как то криво и несовместимо с другими устройствами имеющими COM-порт.
По скорости, в принципе, пока пролезаю и в HID-устройство, там то с определением устройства по имени не должно быть проблем? Через HidD_GetProductString или по другой строке?
Даже если (как обещают) дадут VID&PID, то по ним идентифицировать не выйдет. Реально будет несколько разных устройств которые должны без выбора пользователя выбираться "своими" программами.
Да, в перспективе, и в linux тоже.
Писать свои драйвера под разные оси не хотелось бы.

В общем, посоветуйте как быть. Приоритетно: как то идентифицировать в программах на компьютере своё CDC устройство. Если никак, то как корректно это делать с HID устройствами или другие варианты.

Спасибо что дочитали до конца. Краткость не мой конёк.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2019, 10:48
Ответы с готовыми решениями:

Отслеживание подключения/отключения "своего" USB-устройства
Добрый день! Переписываю следующий код из VS MS: BOOL CUsbHidDemoCodeDlg::OnDeviceChange(UINT nEventType, DWORD dwData){ int...

Переводить команды USB WIFI Адаптера через компьютер по USB-USB для устройства
name: как передавать сигнал от требующего установку драйверов USB WIFI Адаптера через компьютер по USB-USB папа-папа кабелю для устройства...

Идентификация устройства
Нашел среди кучи хлама какое-то непонятное, но с виду в идеальном состоянии устройство (фото прикрепляю). Это небольшой черный бокс с...

33
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
05.03.2019, 23:14
Студворк — интернет-сервис помощи студентам
Curry,
Цитата Сообщение от Curry Посмотреть сообщение
Резонный вопрос какие и чем лучше?
Есть на CMSIS библиотека тык, но она только для F1/L1/F3 серий, из плюсов наверное что полегче по ресурсам будет. Так разницы и не заметил.
Цитата Сообщение от Curry Посмотреть сообщение
Что то не верится что в либе от ST по 1 байту пересылается.
Все нормально вроде пересылается. Сначала тоже думал, что по 1 байту, когда тестировал с утилитой Terminal v1.9b. Там весь прикол в том, что этот самый терминал вашу строку высылает по одному символу в ком порт, а не пачкой сливает. Я замерял осциллографом между символами простой линии примерно 1 мс. Хост USB FS долбит с периодом как раз в 1 мс и ему ждать некогда, он хватает символ тот что есть и отправляет. Возможно другие терминалы делают так же. В итоге в колбэк CDC_Recieve_FS данные валятся по 1 байту. Проверял на своей программе где весь буффер сразу сливается в компорт - приходит сразу пачкой. Пачка вроде в bulk передаче максимум 64 байта за раз.
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
05.03.2019, 23:44
Цитата Сообщение от locm Посмотреть сообщение
. Насколько помню он передает побайтово,
и ссылку можешь дать?

Добавлено через 7 минут
Цитата Сообщение от _SayHello Посмотреть сообщение
Пачка вроде в bulk передаче максимум 64 байта за раз.
"пачка" это размер конечной точки если буфер больше чем размер конечной точки то идет несколько посылок
я и по 1000 байт посылал, просто запрос надо правильно оформить
0
Эксперт по электронике
7207 / 3386 / 346
Регистрация: 28.10.2011
Сообщений: 13,317
Записей в блоге: 7
06.03.2019, 00:54
Цитата Сообщение от Curry Посмотреть сообщение
Резонный вопрос какие и чем лучше?
От производителя есть STM32 USB-FS-Device 4 и STM32 USB-Host-Device и другие.
Цитата Сообщение от Curry Посмотреть сообщение
Что то не верится что в либе от ST по 1 байту пересылается.
Помню что что-то такое было и приходилось исправлять в USB файлах куба.

Цитата Сообщение от ValeryS Посмотреть сообщение
и ссылку можешь дать?
Я это видел в исходниках сгенерированных кубом. Обнаружил когда разбирался почему скорость обмена меньше чем должна быть. Но это было давно. Если найду тот исходник, напишу подробнее в чем было дело.
1
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
06.03.2019, 07:21
Цитата Сообщение от Curry Посмотреть сообщение
Правильно ли я понимаю что драйвер CDC от ST это только inf, без двоичных файлов, использующий виндовый usbser.sys, а инсталятор только и делает что inf регистрирует?
И тогда, при получении VID&PID нужно только поправить inf?
Для Windows 8 и ниже поставлялся свой драйвер.
Строка описания берётся из inf файла.
Inf файл, или драйвер, подгружается при обнаружении соответствия VID&PID. Поэтому, если хотите подгрузить драйвер со своим описанием, нужен свой, уникальный VID&PID.
Файлы драйвера нынче должны быть подписаны после внесения изменений. Это затрудняет задачу.

Начиная с Windows 10 используется комплектный драйвер, от Microsoft.
Как в этом случае действовать, не знаю. Спросите там: https://www.cyberforum.ru/drivers-programming/

Цитата Сообщение от _SayHello Посмотреть сообщение
Пачка вроде в bulk передаче максимум 64 байта за раз.
512 байт. Но там вполне могут быть обёртки, избавляющие программиста от заботы об этом.
1
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
06.03.2019, 09:19
ValeryS,
Цитата Сообщение от ValeryS Посмотреть сообщение
"пачка" это размер конечной точки если буфер больше чем размер конечной точки то идет несколько посылок
я это и имел ввиду, хост за один запрос конечной точки больше 64 байт не унесет. Надо просто дробить общую посылку по размеру эндпоинтов.
Цитата Сообщение от Rius Посмотреть сообщение
512 байт. Но там вполне могут быть обёртки, избавляющие программиста от заботы об этом.
512 для HS вроде, для FS 64 максимум. Я второе имел ввиду, на 373 FS стоит
1
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
13.03.2019, 10:58
Запросил у ST пару PID/VID - выдали. На все про все ушло около недели. От себя послал только название организации, физ. адрес. Предполагаемую строку которую будет отображать, они видимо под этой строкой у себя заносят девайс в базу.
Осталось раскурить как правильно приладить эти ID в драйвер
1
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,691
Записей в блоге: 9
13.03.2019, 11:22  [ТС]
Цитата Сообщение от _SayHello Посмотреть сообщение
Запросил у ST пару PID/VID - выдали.
Если не секрет, как запрашивали? Через support request form на https://www.st.com/content/st_... -home.html или через российского представителя st ?
Цитата Сообщение от _SayHello Посмотреть сообщение
Осталось раскурить как правильно приладить эти ID в драйвер
Я "докурился" до того что решил использовать HID. Работает (хотя и есть проблемы) без драйвера.
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
13.03.2019, 11:31
Лучший ответ Сообщение было отмечено Curry как решение

Решение

Цитата Сообщение от Curry Посмотреть сообщение
сли не секрет, как запрашивали? Через support request form на https://www.st.com/content/st_... -home.html или через российского представителя st ?
Напрямую к ним. Заполнил Support Request Form.
Цитата Сообщение от Curry Посмотреть сообщение
Я "докурился" до того что решил использовать HID.
В HID как я понял надо протокол определять. А у меня задача была переделать девайс с сохранением программы верхнего уровня. Уж очень хотелось убрать cp2101, при этом никак не переписывать верхнюю часть, которая имеет master-slave ASCII протокол.
1
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,691
Записей в блоге: 9
13.03.2019, 11:46  [ТС]
Цитата Сообщение от _SayHello Посмотреть сообщение
В HID как я понял надо протокол определять.
Да, фиксированными порциями обмениваться называемыми репортами и описываемыми в репорт дескрипторе.
Цитата Сообщение от _SayHello Посмотреть сообщение
А у меня задача была переделать девайс с сохранением программы верхнего уровня.
Ну, если программа на компе прямо ком-порт читает, то тогда сложно что то ей подсунуть. У меня поверх ещё один слой проходит и программа с dll-кой общается. dll-ку теперь нужно будет переделать и избавление от FTDI будет (надеюсь) безболезненное.
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
13.03.2019, 11:50
Цитата Сообщение от Curry Посмотреть сообщение
фиксированными порциями обмениваться называемыми репортами
У вас какими репортами, прерываний или feature?
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,691
Записей в блоге: 9
13.03.2019, 12:11  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
У вас какими репортами, прерываний или feature?
Описал Input и Outpup репорты, без Report ID-ов.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 0 */
        0x05, 0x0c,                    // USAGE_PAGE (Consumer Devices)
        0x09, 0x86,                    // USAGE (Channel)
        0xa1, 0x01,                    // COLLECTION (Application)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, 0x40,                    //   REPORT_COUNT (64)
        0x09, 0x86,                    //   USAGE (Channel)
        0x92, 0x02, 0x01,              //   OUTPUT (Data,Var,Abs,Buf)
        0x09, 0x84,                    //   USAGE (Enter Channel)
        0x82, 0x02, 0x01,              //   INPUT (Data,Var,Abs,Buf)
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION              */
};
Описание репорта сделал с помощью https://usb.org/document-libra... iptor-tool
В винде отсылаю через HidD_SetOutputReport, читаю через ReadFile.
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
13.03.2019, 12:24
Вот чтение меня интересует. Для его успешного прохождения устройство должно постоянно обновлять input report.
А если оно перестало обновлять, как завершить чтение на стороне ПК?

Добавлено через 8 минут
У меня получалось так, что ReadFile висит бесконечно в ожидании новых данных.
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,691
Записей в блоге: 9
13.03.2019, 12:55  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
ReadFile висит бесконечно в ожидании новых данных
Нужно асинхронное чтение использовать.
1
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,691
Записей в блоге: 9
15.03.2019, 15:27  [ТС]
VID&PID дали. Запросил через форму запроса на сайте в саппорте (требуется регистрация на st.com).
13-го запросил, 15-го дали.
Запрашивал по образцу приведённом Rius-ом : Идентификация своего USB устройства на компьютере
Subject
USB VID/PID request
Description
PID request details:
1) COMPANY NAME AUTHORZING USE TO :
2) Contact Name /Address and E-mail address:
3) Name/Sales type of the STMicrocontroller product name : STM32F373VC / order from distributor
4) Name of USB end-product : Имя_записываемое_в_поле_ProductString_де скриптора
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2019, 15:27

Идентификация внешнего устройства
Доброй ночи! Нужно как-то при помощи кода идентифицировать свое устройство, которое спаял на чипе FTDI (FT232RL). В диспетчере устройств...

Идентификация устройства в IPMI
У меня возникла следующая задача: Необходимо написать компонент, который считывал бы FRU из Shelf Manager. И некоторые данные...

Идентификация устройства, выполняющего приложение
Скажите, кто вкурсе. Есть ли надежный способ идентификации устройства в запускаемом на нем приложении? Например чтение каких-нибудь не...

При запуске системы отключаются все USB-устройства, в т.ч. устройства ввода
При запуске видовс 8 появляется экран выбора учетки и сразу отключаются клавиатура и мышь, они подключены к usb. Пробывал менять порты не...

Arduino как host usb, написание своего драйвера для обмена информацией с stm32 по usb
Доброго дня Всем, интересует вопрос как написать свой драйвер на ардуино мега чтобы можно было общаться с стм32 по протоколу usb. Пробовал...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru