Карта USB

Отображение USB-портов и подключенных устройств

USBMap — это функция SerialTool, которая перечисляет основную информацию о хост-контроллерах USB, USB-хабах и подключенных USB-устройствах.

Она также получает информацию об устройствах из системного реестра и через USB-запросы к самим устройствам. Главное окно USBMap разделено на две панели: левая панель показывает древовидное представление соединений, что позволяет выбрать любое USB-устройство; правая панель отображает USB-структуры данных, связанные с выбранным устройством USB.
Эти структуры включают дескрипторы устройства, конфигурации, интерфейса и конечной точки, а также текущую конфигурацию устройства.

USBMap совместима с Windows, macOS и Linux и очень полезна для отображения USB-устройств, подключенных к различным портам ПК. Она позволяет различать Интерфейс хост-контроллера (USB, Firewire), USB-хаб, внешние USB-хабы, общие устройства и последовательные порты. Что касается последовательных портов, USBMap также отображает, какие последовательные порты доступны для конкретного USB-переходника, что особенно полезно, если одно USB-устройство может создавать несколько последовательных портов, которые иначе было бы трудно идентифицировать.

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

Особенностью USBMap является то, что эта функция, обычно доступная только разработчикам на разных операционных системах, интегрирована в SerialTool без необходимости установки дополнительных пакетов или инструментов, предоставляя прямой и упрощенный доступ.

Отображаемую информацию можно скопировать прямо в буфер обмена, а карту USB-портов можно экспортировать в формате ASCII, что упрощает обмен и документирование результатов анализа.

Примечание 1: USBMap отображает подключенные USB-устройства, а не виртуальные последовательные порты, если таковые имеются.
Примечание 2: Некоторые функции этой утилиты могут быть ограничены в бесплатной версии SerialTool. Получите сейчас PRO-версию SerialTool!



USBMap - Сканирование подключенных USB-портов

Пример USB-переходника с несколькими последовательными портами.

Ниже приведен пример USB-переходника CH 347, произведенного компанией Nanjing Qinherg Electronics Co., который создает два последовательных порта через одно USB-подключение.

USBMap - Детали USB-переходника с несколькими последовательными портами


[Port12] : USB Composite Device
Type: Serial Port
[Multiple Serial Port 1]Serial Port Number: COM9
[Multiple Serial Port 1]Device Description: USB-HiSpeed-SERIAL-B CH347
[Multiple Serial Port 1]Friendly Name: USB-HiSpeed-SERIAL-B CH347 (COM9)
[Multiple Serial Port 1]Manufacturer: wch.cn
[Multiple Serial Port 1]Location Path: PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(12)#USBMI(2)
[Multiple Serial Port 1]USB Parent: USB\VID_1A86&PID_55DA\0123456789
[Multiple Serial Port 1]Driver Key: {4d36e978-e325-11ce-bfc1-08002be10318}\0011
[Multiple Serial Port 1]Hardware ID: USB\VID_1A86&PID_55DA&REV_0441&MI_02
Type: Serial Port
[Multiple Serial Port 2]Serial Port Number: COM10
[Multiple Serial Port 2]Device Description: USB-HiSpeed-SERIAL-A CH347
[Multiple Serial Port 2]Friendly Name: USB-HiSpeed-SERIAL-A CH347 (COM10)
[Multiple Serial Port 2]Manufacturer: wch.cn
[Multiple Serial Port 2]Location Path: PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(12)#USBMI(0)
[Multiple Serial Port 2]USB Parent: USB\VID_1A86&PID_55DA\0123456789
[Multiple Serial Port 2]Driver Key: {4d36e978-e325-11ce-bfc1-08002be10318}\0012
[Multiple Serial Port 2]Hardware ID: USB\VID_1A86&PID_55DA&REV_0441&MI_00

Is Port User Connectable: yes
Is Port Debug Capable: no
Companion Port Number: 22
Companion Hub Symbolic Link Name: USB#ROOT_HUB30#4&3783c1a5&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
Protocols Supported:
USB 1.1: yes
USB 2.0: yes
USB 3.0: no

---===>Device Information<===---
English product name: "USB Dual_Serial"

ConnectionStatus:
Current Config Value: 0x01
-> Device Bus Speed: High
(is not SuperSpeed or higher capable)
Device Address: 0x29
Open Pipes: 6

===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0xEF
-> This is a Multi-interface Function Code Device
bDeviceSubClass: 0x02
-> This is the Common Class Sub Class
bDeviceProtocol: 0x01
-> This is the Interface Association Descriptor protocol
bMaxPacketSize0: 0x40
= (64) Bytes
idVendor: 0x1A86
= Nanjing Qinherg Electronics Co., Ltd.
idProduct: 0x55DA
bcdDevice: 0x0441
iManufacturer: 0x01
English (United States) "wch.cn"
iProduct: 0x02
English (United States) "USB Dual_Serial"
iSerialNumber: 0x03
English (United States) "0123456789"
bNumConfigurations: 0x01

---===>Open Pipes<===---

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81
-> Direction: IN - EndpointID: 1
bmAttributes: 0x03
-> Interrupt Transfer Type
wMaxPacketSize: 0x0040
= 1 transactions per microframe, 0x40 max bytes
bInterval: 0x01

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x02
-> Direction: OUT - EndpointID: 2
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x82
-> Direction: IN - EndpointID: 2
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x83
-> Direction: IN - EndpointID: 3
bmAttributes: 0x03
-> Interrupt Transfer Type
wMaxPacketSize: 0x0040
= 1 transactions per microframe, 0x40 max bytes
bInterval: 0x01

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x04
-> Direction: OUT - EndpointID: 4
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x84
-> Direction: IN - EndpointID: 4
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

---===>Full Configuration Descriptor<===---

===>Configuration Descriptor<===
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x008D
-> Validated
bNumInterfaces: 0x04
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80
-> Bus Powered
MaxPower: 0x64
= 200 mA

===>IAD Descriptor<===
bLength: 0x08
bDescriptorType: 0x0B
bFirstInterface: 0x00
bInterfaceCount: 0x02
bFunctionClass: 0x02
-> This is Communications (CDC Control) USB Device Interface Class
bFunctionSubClass: 0x02
bFunctionProtocol: 0x01
iFunction: 0x00

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x01
bInterfaceClass: 0x02
-> This is Communications (CDC Control) USB Device Interface Class
bInterfaceSubClass: 0x02
bInterfaceProtocol: 0x01
iInterface: 0x00
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x05
bDescriptorType: 0x24
05
24
00
10
01
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x05
bDescriptorType: 0x24
05
24
01
00
01
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x04
bDescriptorType: 0x24
04
24
02
02
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x05
bDescriptorType: 0x24
05
24
06
00
01

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81
-> Direction: IN - EndpointID: 1
bmAttributes: 0x03
-> Interrupt Transfer Type
wMaxPacketSize: 0x0040
= 1 transactions per microframe, 0x40 max bytes
bInterval: 0x01

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x0A
-> This is a CDC Data USB Device Interface Class
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x02
-> Direction: OUT - EndpointID: 2
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x82
-> Direction: IN - EndpointID: 2
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

===>IAD Descriptor<===
bLength: 0x08
bDescriptorType: 0x0B
bFirstInterface: 0x02
bInterfaceCount: 0x02
bFunctionClass: 0x02
-> This is Communications (CDC Control) USB Device Interface Class
bFunctionSubClass: 0x02
bFunctionProtocol: 0x01
iFunction: 0x00

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x02
bAlternateSetting: 0x00
bNumEndpoints: 0x01
bInterfaceClass: 0x02
-> This is Communications (CDC Control) USB Device Interface Class
bInterfaceSubClass: 0x02
bInterfaceProtocol: 0x01
iInterface: 0x00
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x05
bDescriptorType: 0x24
05
24
00
10
01
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x05
bDescriptorType: 0x24
05
24
01
00
01
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x04
bDescriptorType: 0x24
04
24
02
02
-> This is a Communications (CDC Control) USB Device Interface Class

===>Descriptor Hex Dump<===
bLength: 0x05
bDescriptorType: 0x24
05
24
06
02
03

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x83
-> Direction: IN - EndpointID: 3
bmAttributes: 0x03
-> Interrupt Transfer Type
wMaxPacketSize: 0x0040
= 1 transactions per microframe, 0x40 max bytes
bInterval: 0x01

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x03
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x0A
-> This is a CDC Data USB Device Interface Class
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x04
-> Direction: OUT - EndpointID: 4
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x84
-> Direction: IN - EndpointID: 4
bmAttributes: 0x02
-> Bulk Transfer Type
wMaxPacketSize: 0x0200
= 0x200 max bytes
bInterval: 0x00

Структура информации, предоставляемой Windows

Детали последовательных портов:

USB-порт (Port12) используется для управления устройством как составным USB-устройством, что означает, что оно имеет несколько интерфейсов и может управлять различными каналами связи.
Каждый виртуальный последовательный порт, созданный устройством, имеет свое собственное обозначение:

- COM9 с именем "USB-HiSpeed-SERIAL-B CH347"
- COM10 с именем "USB-HiSpeed-SERIAL-A CH347"

Каждый последовательный порт имеет:

Дружественное имя, позволяющее идентифицировать порт в системе.
Путь расположения (Location Path), указывающий, где физически расположено подключение устройства.
Ключ драйвера и аппаратный идентификатор, которые являются уникальной информацией об устройстве и помогают операционной системе правильно идентифицировать тип оборудования и необходимый драйвер.

Соединение и тип передачи:

Это устройство поддерживает USB 1.1 и USB 2.0, но не поддерживает USB 3.0. Это указано в разделе "Поддерживаемые протоколы". Каждый порт использует конечные точки Bulk (для больших объемов данных) и Interrupt (для более быстрых и постоянных сигналов) для передачи данных, что позволяет эффективно передавать последовательные данные.

Дескрипторы устройства:

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

Возможность создания нескольких последовательных портов:

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

Полезность в USBMap:

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

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