안경잡이개발자

728x90
반응형

  윈도우(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         
728x90
반응형