윈도우(Windows) USB Device Descriptor Viewer 소개 및 사용법
윈도우(Windows) 운영체제에서 사용할 수 있는 USB Device Descriptor Viewer로는 [Thesycon USB Descriptor Dumper]가 있다. 이는 리눅스에서의 lsusb와 유사한 기능을 제공한다. 아래의 경로에 접속하여 다운로드 및 실행할 수 있다.
▶ Thesycon USB Descriptor: www.thesycon.de/eng/usb_descriptordumper.shtml
웹 사이트에 접속한 이후에 [Download tdd.exe] 버튼을 눌러 뷰어(Viewer)를 다운로드하고 실행할 수 있다.
실행하면 다음과 같은 화면을 만날 수 있다.
다음과 같이 현재 컴퓨터에 연결된 USB 장치 중에서 자신이 원하는 장치를 선택하여 정보를 확인할 수 있다.
필자의 경우 현재 사용하고 있는 MSI Gaming Mouse를 선택했는데, 정상적으로 전체 Device Descriptor를 확인할 수 있었다. VID=0x3938, PID=0x1100로 설정되어 있으며, USB 2.0 스펙을 지원하고, HID Class를 제공하는 것을 알 수 있다. 참고로 마우스(Mouse)에 해당하는 HID는 다음과 같은 프로토콜을 사용하기로 이미 약속되어 있다.
▶ bInterfaceClass: 0x03 (Human Interface Device Class)
▶ bInterfaceSubClass: 0x01
▶ bInterfaceProtocol: 0x02
이에 대해 더 궁금하다면 USB 공식 사이트에서 제공하는 HID 문서를 읽어 보면 자세히 설명되어 있다. Keyboard는 0x01 프로토콜, Mouse는 0x02 프로토콜을 사용하기로 이미 정해진 것이다. 따라서 우리가 직접 Keyboard나 Mouse를 개발할 때에는 이러한 프로토콜에 맞게 Interface Descriptor를 작성할 필요가 있다.
▶ HID 공식 문서: www.usb.org/sites/default/files/documents/hid1_11.pdf
아무튼 Thesycon USB Descriptor Dumper를 이용해 전체 USB 장치 정보를 출력해 보면 다음과 같이 나오는 것을 알 수 있다.
※ 참고 1 ※
간혹 Device Descriptor가 없는 USB 기기를 연결하면 제대로 인식하지 못하는 문제가 발생할 수 있다. 예를 들면 라즈베리파이의 USB OTG 기능을 이용하여 호스트(Host) 컴퓨터와 단순히 연결한 경우가 이에 해당한다. 이러한 경우에는 호스트 쪽에서 Device Descriptor를 기다리게 되는데, 결과적으로 Descriptor가 도착하지 않기 때문에 시간이 조금 지난 뒤에는 다음과 같이 VID=0x0000, PID=0x0000으로 설정하게 된다. 말 그대로 Unknown Device로 인식하는 것을 확인할 수 있다.
※ 참고 2 ※
라즈베리파이 Zero W에서 Multi Composite Gadget을 이용하여 Mass Storage Class 인터페이스(Interface)를 제공하도록 만들면 다음과 같이 Device Descriptor가 인식된다.
Information for device My USB (VID=0x1D6B PID=0x0104):
Connection Information:
------------------------------
Device current bus speed: HighSpeed
Device supports USB 1.1 specification
Device supports USB 2.0 specification
Device address: 0x001B
Current configuration value: 0x01
Number of open pipes: 2
Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0200 bcdUSB
0x00 bDeviceClass
0x00 bDeviceSubClass
0x00 bDeviceProtocol
0x40 bMaxPacketSize0 (64 bytes)
0x1D6B idVendor
0x0104 idProduct
0x0100 bcdDevice
0x01 iManufacturer "Dongbin Na"
0x02 iProduct "My USB"
0x03 iSerialNumber "0123456789abcdef"
0x01 bNumConfigurations
Device Qualifier Descriptor:
------------------------------
0x0A bLength
0x06 bDescriptorType
0x0200 bcdUSB
0x00 bDeviceClass
0x00 bDeviceSubClass
0x00 bDeviceProtocol
0x40 bMaxPacketSize0 (64 bytes)
0x01 bNumConfigurations
0x00 bReserved
Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x0020 wTotalLength (32 bytes)
0x01 bNumInterfaces
0x01 bConfigurationValue
0x04 iConfiguration "My USB Config 1"
0x80 bmAttributes (Bus-powered Device)
0x7D bMaxPower (250 mA)
Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x08 bInterfaceClass (Mass Storage Device Class)
0x06 bInterfaceSubClass (Transparent SCSI subclass)
0x50 bInterfaceProtocol (Bulk only transport)
0x05 iInterface "Mass Storage"
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress (IN endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0200 wMaxPacketSize (512 bytes)
0x00 bInterval
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x01 bEndpointAddress (OUT endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0200 wMaxPacketSize (512 bytes)
0x01 bInterval
------------------------------
Other Speed Configuration Descriptor:
------------------------------
0x09 bLength
0x07 bDescriptorType
0x0020 wTotalLength (32 bytes)
0x01 bNumInterfaces
0x01 bConfigurationValue
0x04 iConfiguration "My USB Config 1"
0x80 bmAttributes (Bus-powered Device)
0x7D bMaxPower (250 mA)
Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x08 bInterfaceClass (Mass Storage Device Class)
0x06 bInterfaceSubClass (Transparent SCSI subclass)
0x50 bInterfaceProtocol (Bulk only transport)
0x05 iInterface "Mass Storage"
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress (IN endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize (64 bytes)
0x00 bInterval
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x01 bEndpointAddress (OUT endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize (64 bytes)
0x00 bInterval
반면에 라즈베리파이 Zero W에서 단일 g_mass_storage를 이용하여 Mass Storage Class 인터페이스(Interface)를 제공하도록 만들면 다음과 같이 Device Descriptor가 인식된다.
Information for device Mass Storage Gadget (VID=0x0525 PID=0xA4A5):
Connection Information:
------------------------------
Device current bus speed: HighSpeed
Device supports USB 1.1 specification
Device supports USB 2.0 specification
Device address: 0x001C
Current configuration value: 0x01
Number of open pipes: 2
Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0200 bcdUSB
0x00 bDeviceClass
0x00 bDeviceSubClass
0x00 bDeviceProtocol
0x40 bMaxPacketSize0 (64 bytes)
0x0525 idVendor
0xA4A5 idProduct
0x0504 bcdDevice
0x03 iManufacturer "Linux 5.4.75+ with 20980000.usb"
0x04 iProduct "Mass Storage Gadget"
0x00 iSerialNumber
0x01 bNumConfigurations
Device Qualifier Descriptor:
------------------------------
0x0A bLength
0x06 bDescriptorType
0x0200 bcdUSB
0x00 bDeviceClass
0x00 bDeviceSubClass
0x00 bDeviceProtocol
0x40 bMaxPacketSize0 (64 bytes)
0x01 bNumConfigurations
0x00 bReserved
Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x0020 wTotalLength (32 bytes)
0x01 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0xC0 bmAttributes (Self-powered Device)
0x01 bMaxPower (2 mA)
Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x08 bInterfaceClass (Mass Storage Device Class)
0x06 bInterfaceSubClass (Transparent SCSI subclass)
0x50 bInterfaceProtocol (Bulk only transport)
0x01 iInterface "Mass Storage"
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress (IN endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0200 wMaxPacketSize (512 bytes)
0x00 bInterval
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x01 bEndpointAddress (OUT endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0200 wMaxPacketSize (512 bytes)
0x01 bInterval
------------------------------
Other Speed Configuration Descriptor:
------------------------------
0x09 bLength
0x07 bDescriptorType
0x0020 wTotalLength (32 bytes)
0x01 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0xC0 bmAttributes (Self-powered Device)
0x01 bMaxPower (2 mA)
Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x08 bInterfaceClass (Mass Storage Device Class)
0x06 bInterfaceSubClass (Transparent SCSI subclass)
0x50 bInterfaceProtocol (Bulk only transport)
0x01 iInterface "Mass Storage"
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress (IN endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize (64 bytes)
0x00 bInterval
Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x01 bEndpointAddress (OUT endpoint 1)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize (64 bytes)
0x00 bInterval
'기타' 카테고리의 다른 글
등기부 등본 간단 설명 및 열람하는(떼는) 방법 (0) | 2020.12.05 |
---|---|
[GitHub 사용법] 초대를 받아 접근 권한이 있는 GitHub 저장소 리스트 확인하는 방법 (2) | 2020.12.01 |
[PyTorch 오류 해결] RuntimeError: CUDA error: device-side assert triggered (2) | 2020.11.30 |
홈택스(Hometax)에서 간단히 연소득 확인하는 방법 (소득금액증명) (0) | 2020.11.27 |
Flickr 이미지 데이터셋 설명 (0) | 2020.11.27 |