STM32F103x. Виртуальный СОМ порт. Часть 1. Основные сведения о USB

STM32. Виртуальный СОМ порт. Часть 1. Основные сведения о USB

Александр Левчук dslev@yandex.ru

Главная

Предисловие

Архитектура USB

Устройства, функции, порты и классы USB

Конечные точки и дескрипторы устройств

Обмен данными

Типы передач

Данные драйвера в диспетчере устройств и регистре

Файл INF

Литература


STM32. Работаем в среде Visual Studio + VisualGBD + CubeMX

Часть 2. Описание проекта

Часы RTC, настройка по серверам точного времени

STM32. FATFS + DMA + CUBEMX

07-Jan-2020

Предисловие

Создание виртуального СОМ порта (USB CDC) становится первоочередной задачей, если создаваемое вами устройство нуждается в какой-либо настройке, например в установке и коррекции часов(RTC STM32F103xx).

Интерфейс USB весьма сложен в изучении, но для прикладного программиста в большинстве случаев достаточно понимать общие принципы построения интерфейса USB. Производители устройств реализуют интерфейс USB как аппаратно, так и сопровождают свои устройства драйверами и библиотеками. STMicroelectronics поставляет библиотеку CubeMX, которая позволяет легко реализовать виртуальный СОМ порт. Необходимо только наполнить готовое решение своим содержанием.

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

Архитектура USB

Архитектура USB строится по схеме многоярусной звезды. Компьютер (хост) имеет в своём составе концентратор USB, который называется корневой хаб. К корневому хабу подключаются периферийные устройства. Устройства могут быть простым устройством, выполняющим одну функцию, хабом или композитным устройством, имеющим несколько функций. На рисунке показана упрощённая схема многоярусной звезды. Каждый хаб является центром следующей звезды.

Устройства, функции, порты и классы USB

В USB слова функция, устройство и порт имеют специфический смысл.

Функция USB представляет собой один или набор из нескольких связанных интерфейсов, которые описывают возможности устройства. Хост определяет функции устройства, запрашивая дескриптор устройства и один или несколько дескрипторов интерфейса устройства. Дескрипторы представляют собой структуры данных, содержащие информацию об устройстве.

Устройством USB является логический или физический объект, который выполняет одну или несколько функций. Хабы и периферия компьютера являются устройствами. Устройство, содержащее несколько функций, называется композитным. Хост обрабатывает композитное устройство как отдельные физические устройства. Композитное устройство имеет один адрес шины, но несколько независимых интерфейсов, каждый из которых предоставляет определенную функцию. Интерфейсы могут использовать собственные драйверы на хосте. Например, композитное устройство может иметь интерфейсы для клавиатуры и подключения запоминающего устройства. Композитное устройство может иметь несколько конфигураций. Если устройство поддерживает несколько конфигураций, драйвер должен решить, какую конфигурацию запросить, основываясь на информации драйвера о свойствах устройства, или драйвер может запросить пользователя, что делать, или просто выбрать первую конфигурацию. Большинство драйверов выбирают первую конфигурацию. Получив запрос, устройство устанавливает запрошенную конфигурацию.

Порт USB. Для USB каждый разъем, расположенный на концентраторе, представляет собой порт USB. Серверные приложения не имеют прямого доступа к USB-портам, обмен данными выполняется драйверами устройств, которые подключены к портам. Хост-контроллер USB может иметь порты, связанные с ЦП системы, но эти порты отличаются от портов на шине USB. При включении питания концентраторы информируют хост обо всех подключённых устройствах USB. В процессе перечисления устройств, хост определяет, какую использовать скорость шины, назначает и запрашивает дополнительную информацию об устройствах. После перечисления устройство может быть удалено или подключено, что вызывает событие, о котором концентратор информирует хост. Хост выполняет повторное перечисление и составляет новый список устройств доступных для приложений.

 Классы USB. Все USB устройства делятся на классы по принципу схожести выполняемых функций. Класс - это группа устройств, объединённых общими свойствами и способные управляться общим программным драйвером операционной системы, например, звуковые устройства.  Композитные устройства могут выполнять функции, относящиеся к разным классам. Если функциональность разрабатываемого устройства подходит к некоторому классу, то нет нужды писать драйвер для ОС, драйвер уже имеется в ОС. Тем не менее, функциональность устройства может быть расширена разработчиком, в стандарте USB предусмотрена такая возможность. Спецификация класса определяет количество и тип требуемых и не обязательных конечных точек для устройств в классе. В спецификации также могут быть определены форматы передаваемых данных, включая данные приложения, а также состояние и управляющую информацию. Некоторые спецификации классов также определяют использование передаваемых данных. Например, класс HID имеет таблицы использования, которые определяют, как интерпретировать данные, отправляемые клавиатурами, мышами и джойстиками. Некоторые классы используют USB для передачи данных в формате, определенном другой спецификацией. Примером могут служить команды SCSI, используемые устройствами хранения данных. Спецификация класса может определять значения полей в стандартных дескрипторах, а также определять специфические для класса дескрипторы, интерфейсы и запросы на управление.

CubeMX для контроллеров STM32f103хх предоставляет возможность создания устройств следующих классов:
• Звуковые устройства (Audio Device Class).
• Виртуальный СОМ порт, класс CDC (Communication Device Class).
• Загрузчик прошивки, класс DFU (Download Firmware Update Class).
• Класс связи устройств с человеком, клавиатура, мышь и т.д. Human Interface Device Class (HID).
• Настраиваемый класс HID.
• Класс передачи данных массивами (Mass Storage Class).

Для реализации виртуального СОМ порта предоставляется драйвер, который нужно скачать с сайта STM и установить в системе обычным образом.

Конечные точки и дескрипторы устройств

Конечные точки устройства – логическое понятие. Конечная точка это буфер определенного размера для приема и/или передачи данных. Устройство обязательно имеет одну конечную точку для приема/передачи управляющей информации и возможно данных. Другие конечные точки делятся на приемные и передающие. Все конечные точки нумеруются, управляющая конечная точка всегда имеет номер нуль. Например, виртуальный СОМ порт имеет управляющую конечную точку и две конечных точки, одну для приема данных и одну для передачи данных.

Дескрипторы. Для описания устройств USB используются наборы дескрипторов. Дескриптор это структура, описывающая определенные свойства (параметры) устройства. Набор дескрипторов устройства строится по иерхарическому принципу. В этих структурах, формат которых строго регламентируется стандартом, хранится вся информация, с помощью которой хост может автоматически распознавать, настраиваться и начинать нормальную работу с USB устройством. Во время процесса перечисления устройства обменивается с хостом набором дескрипторов USB. Имеется 4 основных типа дескрипторов, перечисленных в порядке иерархии:

• Дескриптор устройства.
• Дескриптор конфигурации.
• Дескриптор интерфейса, может быть несколько.
• Дескриптор конечной точки, может быть несколько.

Все эти виды дескрипторов должны обязательно присутствовать в USB устройстве. Конечные точки объединяются в интерфейс. Каждому интерфейсу соответствует драйвер операционной системы хоста. Некоторые устройства могут иметь несколько интерфейсов, которые могут функционировать одновременно. Несколько интерфейсов, могут объединяться в конфигурацию. У USB устройства может быть несколько конфигураций, но не может быть активными несколько конфигураций одновременно. Конфигурации могут переключаться.
Кроме базовых дескрипторов, которые являются основными, устройство может иметь и другие дескрипторы.

Обмен данными

Для реализации проекта вам не нужно знать все подробности о USB передачах, но понимание того, как выполняются передачи, может помочь в выборе типа передачи, написании прошивки устройства и при отладке.
Обмен данными всегда производится по инициативе хоста. В работе любого USB устройства, есть две различные стадии, стадия настройки (конфигурирования) и рабочий режим обмена. Конфигурирование выполняется во время перечисления и создания списка устройств. Когда перечисление завершено, хост может начать обмен данными с устройствами. Во время перечисления устройства отвечают на серию стандартных запросов из хоста. Устройство декодирует запросы и возвращает необходимую информацию хосту.
На компьютерах с ОС Windows операционная система производит перечисление устройств без программирования приложений, средствами ОС. Когда устройство подключается или отключается, менеджер Plug-and-Play (PnP) найходит INF-файл, в котором определено имя и расположение файлов драйверов для данного устройства. Если файлы доступны, процесс перечисления обычно невидим для пользователей. После того, как хост найдет устройство, и драйвер будет загружен, приложение может начаться обмен данными.
Каждая передача использует определенный формат данных, который определяется типом передачи и ее направлением. Механизм передачи данных является асинхронным и блочным. Каждая передача USB состоит из одной или нескольких транзакций, которые могут передавать данные в конечную точку или из нее.

Транзакция - это логическая единица обмена данными. Транзакции, как и пакеты, имеют структуру и находятся на более высокой степени абстракции. Транзакция выполняется за определенное время и не допускает временного разрыва. Все транзакции состоят из трех пакетов. Каждая транзакция планируется и начинается по инициативе хоста, который посылает маркер-пакет, в котором описываются тип и направление передачи, адрес USB устройства и номер конечной точки.

В каждой транзакции возможен обмен только между USB устройством и хостом. Транзакция USB 2.0 начинается, когда хост отправляет пакет-маркер в шину. Пакет-маркер содержит номер конечной точки и направление передачи. Пакет IN (передача в хост) запрашивает данные у конечной точки. Пакет OUT (передача из хоста) передает данные из хоста. Помимо данных, каждый пакет данных содержит биты для проверки ошибок и идентификатор пакета (PID). Большинство транзакций также содержат завершающий пакет (handshake), в котором получатель данных сообщает об успешности или неудаче транзакции. Для транзакций USB 3.0 типы пакетов и протоколов отличаются, но транзакции содержат похожие значения адресации, проверки ошибок и последовательности данных. Рисунок отображает структуру передачи.

Пакеты
Информация по каналу передается в виде пакетов (packet). Каждый пакет начинается с поля синхронизации SYNC, за которым следует идентификатор пакета PID. Поле Check представляет собой побитовую инверсию PID. Поле EOP сигнализирует о завершении пакета.

SYNS

PID

Check

Данные

EOP

Поле SYNC служит для подстройки частоты генератора приёмника. Тело пакета - последовательность байт, от одного до 1025. Первый байт тела пакета PID задаёт тип пакета, его функциональное назначение. Только первые 4 бита PID, кодируют тип пакета, а остальные служат для защиты от ошибок и дублируют первые 4 бита, в виде инверсной копии. Два младших бита идентификатора определяют группу, к которой принадлежит пакет. Типы пакетов делятся на четыре категории:
• 00 — специальный пакет;
• 01 — маркер-пакет;
• 10 — пакет подтверждение;
• 11 — пакет данных.
Структура данных пакета зависит от группы, к которой он относится.

Типы передач

Спецификация шины определяет четыре различных типа передачи данных для конечных точек.

Управляющие передачи (control transfers) — используются хостом для конфигурирования устройства во время подключения, для управления устройством и получения статусной информации в процессе работы. Протокол обеспечивает гарантированную доставку таких посылок. Длина поля данных управляющей посылки не может превышать 64 байта на полной скорости и 8 байтов на низкой. Для таких посылок хост гарантированно выделяет 10% полосы пропускания.
В управляющей передаче хост запрашивает дескрипторы устройства. Дескрипторы предоставляют информацию о возможностях устройства, что позволяет хосту назначить драйвер для устройства. Управляющие передачи осуществляются в три этапа:

1. Настройка (Setup).
2. Данные (необязательно).
3. Состояние (Status).

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

Передачи массивов данных (bulk data transfers) — применяются при необходимости обеспечения гарантированной доставки данных от хоста к функции или от функции к хосту, но время доставки не ограничено. Такая передача занимает всю доступную полосу пропускания шины. Пакеты имеют поле данных размером 8, 16, 32 или 64 байт. Приоритет у таких передач самый низкий, они могут приостанавливаться при большой загрузке шины. Допускаются только на полной скорости передачи. Такие посылки используются, например, принтерами или сканерами;

Передачи по прерываниям (interrupt transfers) — используются в том случае, когда требуется передавать одиночные пакеты данных небольшого размера. Каждый пакет требуется передать за ограниченное время. Поле данных может содержать до 64 байтов при передаче на полной скорости и до 8 байтов на низкой. Предел времени обслуживания устанавливается в диапазоне 1—255 мс для полной скорости и 10—255 мс — для низкой. Такие передачи используются в устройствах ввода, таких как мышь и клавиатура;

Изохронные передачи (isochronous transfers) — применяются для обмена данными в "реальном времени", когда на каждом временном интервале требуется передавать строго определенное количество данных, но доставка информации не гарантирована (передача данных ведется без повторения при сбоях, допускается потеря пакетов). Такие передачи занимают предварительно согласованную часть пропускной способности шины и имеют заданную задержку доставки. Изохронные передачи обычно используются в мультимедийных устройствах для передачи аудио и видеоданных. Изохронные передачи разделяются по способу синхронизации конечных точек с системой, различают асинхронный, синхронный и адаптивный классы устройств, каждому из которых соответствует свой тип канала USB.

Данные драйвера в диспетчере устройств и регистре

При подключении нового устройства хост должен определить, какой драйвер необходимо назначить данному устройству. Рассмотрим, как диспетчер устройств и системный регистр сохраняют информацию об устройствах и как Windows выбирает драйвер для устройства.

Диспетчер устройств

Диспетчер устройств хранит информацию о всех устройствах компьютера, как подключенных в данный момент, так и отключенных. Диспетчер устройств может быть вызван из "панель управления/система" и позволяет увидеть устройства в нескольких режимах. Просмотр устройств по типу показывает устройства, группируемые по выполнимым функциям. Просмотр устройств по подключению показывает физическое соединение устройства с каждым хост контроллером, корневым хабом и любыми дополнительными хабами, подключенными к устройству. По умолчанию диспетчер устройств показывает только подключенные устройства, для просмотра устройств, которые удалены, но имеют установленные драйверы, следует в меню диспетчера выбрать пункт «Показать скрытые устройства».
Каждое устройство в диспетчере устройств имеет свою страницу свойств, где можно увидеть всю дополнительную информацию об устройстве, пример для виртуального СОМ порта показан на рисунке.

Информация об устройствах в регистре

В регистре сохраняется информация о USB устройствах, которые были установлены, включая не подключенные устройства. После перечисления устройств, часть информации регистр получает от шины USB и часть информации регистр получает из файла INF при назначении драйвера устройству. Информация об устройствах сохраняется в регистре под ключом HKEY_LOCAL_MACHINE\SYSTEM. Данные о USB устройствах хранятся в соответствующих подключах Enum\USB key:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB
Под данным ключом хранится информация обо всех, когда-либо участвующих в перечислении, устройствах USB. Устройства перечисляются по идентификаторам Vendor ID и Product ID. На рисунке ниже показан ключ для виртуального порта USB.
Иногда можно заметить, что под одним и тем же ID есть две записи для порта СОМ (USB), первая запись для СОМ7 правильная, а например, вторая для СОМххх неправильная, возникшая в процессе отладки прошивки контроллера. Также много записей для порта СОМ возникает в процессе подключения и отключения различных устройств, которые имеют виртуальный СОМ порт. Порты СОМ нумеруются системой, если есть аппаратный порт, он всегда появляется, как СОМ1, виртуальным портам присваиваются номера в зависимости от номера порта USB и числа подключаемых устройств. Каждому подключаемому новому устройству, имеющему виртуальный СОМ порт, присваивается свой номер. Максимальный номер порта может достигать значения 256. Однажды может возникнуть ситуация, когда при подключении устройства, программа управления данным устройством не сможет определить СОМ порт, поскольку его номер будет выходить за диапазон предусмотренный программой. Искать и удалять ненужные записи долго и сложно, можно ошибиться. Для облегчения задачи существует хорошая утилита USBDeview, позволяющая просмотреть все свойства устройств, подключить, отключить или легко удалить ненужные устройства с удалением записей в реестре.

Ключ класса

Под ключом HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class сохраняется информация об устройстве, полученная при установке. Подключи для каждого устройства, именуются по GUID. Каждый подключ может иметь папку свойств (Properties), которая недоступна для просмотра даже под правами администратора. Зачастую эта папка пустая, для ее просмотра следует изменить права доступа. На рисунке ниже показан ключ для портов, папка свойств для портов пустая.

Кроме папки свойств каждый ключ устройства может иметь ключи драйверов устройств, которые маркируются четырьмя цифрами, начиная с 0000. На рисунке показан ключ драйвера для виртуального СОМ порта.

Сервисный ключ

Сервисный ключ содержит информацию о драйвере и располагается в ветке HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Сервисный ключ существует для каждого типа контроллера и хаба хоста. На рисунке ниже показан ключ реестра для виртуального СОМ порта.


Файл INF

Файл INF является текстовым файлом, содержащий информацию об устройстве или устройствах, которая используется в процессе установки драйвера устройства. Поставщик драйвера устройства должен также обеспечить поставку файла INF.
При установке драйвера Windows определяет, имеет ли файл каталога (.cat) цифровую подпись. Цифровая подпись позволяет Windows проверить, что файлы драйвера не были изменены с момента подписания драйвера, и идентифицировать источник или издателя драйвера. Файлы INF считаются элементами драйверов устройств. Любое изменение в файле INF, включая редактирование или добавление идентификатора продукта, требует новой цифровой подписи для файла каталога. Получение цифровой подписи для драйвера требует тестирования и уплаты пошлины. Однако многие USB устройства могут использовать системные драйверы или другие драйверы с цифровой подписью, а также файлы INF.

Структура файла

Содержимое файла INF соответствует определенным правилам:

Ниже показан пример файла INF, поставляемый STM32 с драйвером виртуального СОМ порта.

;------------------------------------------------------------------------------

; STMicroelectronics Comunication Device Class driver (CDC) INF FILE

; (C)2010 Copyright STMicroelectronics

;------------------------------------------------------------------------------

 

[Version]

Signature="$Windows NT$"

Class=Ports

ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}

Provider=%PRVDR%

CatalogFile=stmcdc.cat

DriverVer=04/25/2010,1.3.1

 

[SourceDisksNames]

1=%DriversDisk%,,,

 

[SourceDisksFiles]

 

[Manufacturer]

%MFGNAME%=DeviceList,NT,NTamd64

 

[DestinationDirs]

DefaultDestDir = 12

 

;------------------------------------------------------------------------------

;            VID/PID Settings

;------------------------------------------------------------------------------

[DeviceList.NT]

%DESCRIPTION%=DriverInstall,USB\VID_0483&PID_5740

 

[DeviceList.NTamd64]

%DESCRIPTION%=DriverInstall,USB\VID_0483&PID_5740

 

[DriverInstall.NT]

Include=mdmcpq.inf

CopyFiles=FakeModemCopyFileSection

AddReg=DriverInstall.NT.AddReg

 

[DriverInstall.NT.AddReg]

HKR,,DevLoader,,*ntkern

HKR,,NTMPDriver,,usbser.sys

HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

 

[DriverInstall.NT.Services]

AddService=usbser, 0x00000002, DriverServiceInst

 

[DriverServiceInst]

DisplayName=%SERVICE%

ServiceType = 1 ; SERVICE_KERNEL_DRIVER

StartType = 3 ; SERVICE_DEMAND_START

ErrorControl = 1 ; SERVICE_ERROR_NORMAL

ServiceBinary= %12%\usbser.sys

LoadOrderGroup = Base

 

;------------------------------------------------------------------------------

;              String Definitions

;------------------------------------------------------------------------------

 

[Strings]

PRVDR = "STMicroelectronics"

MFGNAME = "STMicroelectronics."

DESCRIPTION = "STMicroelectronics Virtual COM Port"

SERVICE = "STM Virtual COM Port"

DriversDisk = "STM Drivers Disk"

 

Содержимое файла INF зависит от устройства, драйвера и версии Windows. В качестве примера рассмотрим содержимое файла INF для виртуального USB СОМ порта.

Каждая запись в разделе устройств содержит идентификатор оборудования устройства (USB\VID_0483&PID_5740 в примере). Запись может содержать несколько аппаратных кодов, разделенных запятыми. Файлы INF, предоставленные Windows, могут поддерживать несколько производителей с разделами устройств для каждого производителя, например, MyCompany и MyCompany.NTamd64 и аналогичные для дополнительных производителей.

Раздел [SourceDisksNames] указывает на диск, содержащий файлы драйвера. Раздел [SourceDisksFiles] пустой, не указывает на диск-источник файлов. Раздел [FakeModemCopyFileSection] отсутствует в примере файла INF, поскольку нет файлов, которые нужно копировать из мультимедиа.

Раздел [DriverServiceInst] содержит информацию о драйвере usbser.sys.

Идентификатор устройства

Идентификатор устройства — это строка, идентифицируя устройство, полученная из драйвера шины устройства. Для USB-устройств эта информация включает идентификатор поставщика, идентификатор продукта, номер ревизии и другие значения, соответствующие дескрипторам устройства. Менеджер PnP использует идентификатор устройства для создания подключа реестра, в котором хранятся аппаратные ключи экземпляров устройств. Идентификатор устройства использует тот же формат, что и идентификатор оборудования.

Идентификатор оборудования

Идентификатор оборудования идентифицирует устройство, интерфейс устройства или коллекцию HID с помощью идентификатора поставщика, идентификатора продукта и номера ревизии или другой информации, конкретной для класса. При установке драйвера используется идентификатор оборудования в файле INF. Идентификатор оборудования для USB-устройства имеет такую форму:

USB\Vid_xxxx Pid_yyyy Rev_zzzz

Значения xxxx, yyyy, и zzzz четырех символьные, где xxxx - idVendor, yyyy - idProduct, и zzzz - bcdDevice из дескриптора устройства. Значения xxxx и yyyy являются шестнадцатеричными, а zzzz в формате BCD. Например, устройство с идентификатором поставщика 0x0483, идентификатором продукта 0x5740 и bcdDevice 0x0200 имеет такой идентификатор устройства:

USB\VID_0483&PID_5740&REV_0200

Файл INF может опустить значение bcdDevice.

Композитные устройства могут указать драйвер для каждой функции, чтобы идентификатор устройства был для каждого интерфейса, представляющего функцию. Идентификатор устройства для интерфейса имеет такой формат:

USB\Vid_xxxx Pid_yyyy-Rev_zzzz-MI_ww

Значение ww равно номеру интерфейса (blnterfaceNumber) в дескрипторе устройства.

Устройство HID-класса, дескриптор которого содержит более одной коллекции верхнего уровня, может иметь идентификатор устройства для каждой коллекции. Идентификатор устройства для коллекции имеет следующий формат, с указанием номера коллекции в bb:

USB\Vid_xxxx-Pid_yyyy-Rev_zzzz MI_ww&bb

Устройства в некоторых классах используют другие форматы.
Для устройств CDC идентификатор оборудования может содержать значение, указывающее подкласс CDC равный 0x08:

USB\Vid_0925&Pid_0902&Rev_0210&Cdc_08

Для устройств хранения массивов драйвер USB (usbstor.sys) создает идентификатор диска, например:

USBSTOR\ST3000DM001-1CH166___CC44.

Идентификатор имеет идентификатор поставщика из 8 символов (ST3000DM), идентификатор продукта состоит из 16 символов (001-1CH166______), номер ревизии содержит 4 символа (CC44).

Для принтеров драйвер USB-принтера создает следующий идентификатор оборудования, например:

USBPRINT\BrotherHL-4150CDN_se922A

Идентификатор содержит имя и модель производителя, используя максимум 20 символов (BrotherHL-4150CDN_se) и 4 символа проверки (922A).

Для клавиатур, мышей, игровых контроллеров и других системных HID устройств, Windows использует специальное оборудование, например, HID_DEVICE_SYSTEM_KEYBOARD и HID_DEVICE_SYSTEM_MOUSE.

Файлы INF, предоставляемые поставщиком, не должны содержат аппаратные ID, которые начинаются с HID_DEVICE_SYSTEM_.

Чтобы указать HID Usage Page и Usage, Windows использует ID устройств в формате HID_DEVICE_UP:p (4)_U:u(4), где p(4) — это
4-символьное значение, определяющее страницу использования и u(4) — это значение 4-символьного, определяющее использование.
Например, этот идентификатор оборудования применяется к устройствам со страницей использования 0x0C (Потребитель) и использование 0x01 (Потребительский контроль):

HID_DEVICE_UP:000C_U:0001

Предоставленные поставщиком файлы INF не должны содержать ID аппаратных средств Use Page.

Литература.

Мартин М. Инсайдерское руководство по STM32

Агуров П.В. - Практика программирования USB - 2006

Datasheet STM32F103xET6

Description of STM32F1 HAL and Low-layer drivers

Reference Manuals

USB Complete. The Developer’s Guide, Fifth Edition, Jan Axelson

В начало