使用 CH567 制作一个USB 键盘

这一次使用 CH567 制作一个USB键盘,参考的对象是Dostyle 的MK60 机械键盘。

Dostyle MK60 机械键盘

同样的,使用 USBlyzer 抓取描述符信息:

USB Composite Device

Connection StatusDevice connected
Current Configuration1
SpeedFull (12 Mbit/s)
Device Address8
Number Of Open Pipes2

Device Descriptor Gaming KB

OffsetFieldSizeValueDescription
0bLength112h
1bDescriptorType101hDevice
2bcdUSB20110hUSB Spec 1.1
4bDeviceClass100hClass info in Ifc Descriptors
5bDeviceSubClass100h
6bDeviceProtocol100h
7bMaxPacketSize0108h8 bytes
8idVendor2258Ah
10idProduct2002Ah
12bcdDevice21201h12.01
14iManufacturer101h"SINO WEALTH"
15iProduct102h"Gaming KB "
16iSerialNumber100h
17bNumConfigurations101h

Configuration Descriptor 1 Bus Powered, 500 mA

OffsetFieldSizeValueDescription
0bLength109h
1bDescriptorType102hConfiguration
2wTotalLength2003Bh
4bNumInterfaces102h
5bConfigurationValue101h
6iConfiguration100h
7bmAttributes1A0hBus Powered, Remote Wakeup
4..0: Reserved...00000 
5: Remote Wakeup..1..... Yes
6: Self Powered.0...... No, Bus Powered
7: Reserved (set to one)
(bus-powered for 1.0)
1....... 
8bMaxPower1FAh500 mA

Interface Descriptor 0/0 HID, 1 Endpoint

OffsetFieldSizeValueDescription
0bLength109h
1bDescriptorType104hInterface
2bInterfaceNumber100h
3bAlternateSetting100h
4bNumEndpoints101h
5bInterfaceClass103hHID
6bInterfaceSubClass101hBoot Interface
7bInterfaceProtocol101hKeyboard
8iInterface100h

HID Descriptor

OffsetFieldSizeValueDescription
0bLength109h
1bDescriptorType121hHID
2bcdHID20111h1.11
4bCountryCode100h
5bNumDescriptors101h
6bDescriptorType122hReport
7wDescriptorLength20043h67 bytes

Endpoint Descriptor 81 1 In, Interrupt, 1 ms

OffsetFieldSizeValueDescription
0bLength107h
1bDescriptorType105hEndpoint
2bEndpointAddress181h1 In
3bmAttributes103hInterrupt
1..0: Transfer Type......11 Interrupt
7..2: Reserved000000.. 
4wMaxPacketSize20008h8 bytes
6bInterval101h1 ms

Interface Descriptor 1/0 HID, 1 Endpoint

OffsetFieldSizeValueDescription
0bLength109h
1bDescriptorType104hInterface
2bInterfaceNumber101h
3bAlternateSetting100h
4bNumEndpoints101h
5bInterfaceClass103hHID
6bInterfaceSubClass100h
7bInterfaceProtocol100h
8iInterface100h

HID Descriptor

OffsetFieldSizeValueDescription
0bLength109h
1bDescriptorType121hHID
2bcdHID20111h1.11
4bCountryCode100h
5bNumDescriptors101h
6bDescriptorType122hReport
7wDescriptorLength200CCh204 bytes

Endpoint Descriptor 82 2 In, Interrupt, 1 ms

OffsetFieldSizeValueDescription
0bLength107h
1bDescriptorType105hEndpoint
2bEndpointAddress182h2 In
3bmAttributes103hInterrupt
1..0: Transfer Type......11 Interrupt
7..2: Reserved000000.. 
4wMaxPacketSize20010h16 bytes
6bInterval101h1 ms

Interface 0 HID Report Descriptor Keyboard

Item Tag (Value)Raw Data
Usage Page (Generic Desktop)05 01 
Usage (Keyboard)09 06 
Collection (Application)A1 01 
    Usage Page (Keyboard/Keypad)05 07 
    Usage Minimum (Keyboard Left Control)19 E0 
    Usage Maximum (Keyboard Right GUI)29 E7 
    Logical Minimum (0)15 00 
    Logical Maximum (1)25 01 
    Report Count (8)95 08 
    Report Size (1)75 01 
    Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)81 02 
    Report Count (1)95 01 
    Report Size (8)75 08 
    Input (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit)81 03 
    Report Count (6)95 06 
    Report Size (8)75 08 
    Logical Minimum (0)15 00 
    Logical Maximum (255)26 FF 00 
    Usage Page (Keyboard/Keypad)05 07 
    Usage Minimum (Undefined)19 00 
    Usage Maximum2A FF 00 
    Input (Data,Ary,Abs)81 00 
    Logical Maximum (1)25 01 
    Report Count (5)95 05 
    Report Size (1)75 01 
    Usage Page (LEDs)05 08 
    Usage Minimum (Num Lock)19 01 
    Usage Maximum (Kana)29 05 
    Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)91 02 
    Report Count (1)95 01 
    Report Size (3)75 03 
    Output (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)91 03 
End CollectionC0 

Interface 1 HID Report Descriptor System Control

Item Tag (Value)Raw Data
Usage Page (Generic Desktop)05 01 
Usage (System Control)09 80 
Collection (Application)A1 01 
    Report ID (1)85 01 
    Usage Minimum (System Power Down)19 81 
    Usage Maximum (System Wake Up)29 83 
    Logical Minimum (0)15 00 
    Logical Maximum (1)25 01 
    Report Size (1)75 01 
    Report Count (3)95 03 
    Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)81 02 
    Report Count (5)95 05 
    Input (Cnst,Ary,Abs)81 01 
End CollectionC0 
Usage Page (Consumer Devices)05 0C 
Usage (Consumer Control)09 01 
Collection (Application)A1 01 
    Report ID (2)85 02 
    Usage Minimum (Undefined)19 00 
    Usage Maximum (AC Format)2A 3C 02 
    Logical Minimum (0)15 00 
    Logical Maximum (572)26 3C 02 
    Report Count (1)95 01 
    Report Size (16)75 10 
    Input (Data,Ary,Abs)81 00 
End CollectionC0 
Usage Page (Vendor-Defined 1)06 00 FF 
Usage (Vendor-Defined 1)09 01 
Collection (Application)A1 01 
    Report ID (5)85 05 
    Logical Minimum (0)15 00 
    Logical Maximum (255)26 FF 00 
    Usage Minimum (Vendor-Defined 1)19 01 
    Usage Maximum (Vendor-Defined 2)29 02 
    Report Size (8)75 08 
    Report Count (5)95 05 
    Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)B1 02 
End CollectionC0 
Usage Page (Generic Desktop)05 01 
Usage (Keyboard)09 06 
Collection (Application)A1 01 
    Report ID (6)85 06 
    Logical Minimum (0)15 00 
    Logical Maximum (1)25 01 
    Report Size (1)75 01 
    Report Count (112)95 70 
    Usage Page (Keyboard/Keypad)05 07 
    Usage Minimum (Keyboard Left Control)19 E0 
    Usage Maximum (Keyboard Right GUI)29 E7 
    Usage Minimum (Undefined)19 00 
    Usage Maximum (Keypad =)29 67 
    Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)81 02 
    Report Count (8)95 08 
    Input (Cnst,Ary,Abs)81 01 
End CollectionC0 
Usage Page (Vendor-Defined 1)06 00 FF 
Usage (Vendor-Defined 1)09 01 
Collection (Application)A1 01 
    Report ID (9)85 09 
    Logical Minimum (0)15 00 
    Logical Maximum (255)26 FF 00 
    Usage (Undefined)09 00 
    Report Size (8)75 08 
    Report Count (504)96 F8 01 
    Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)B1 02 
End CollectionC0 
Usage Page (Vendor-Defined 1)06 00 FF 
Usage (Vendor-Defined 1)09 01 
Collection (Application)A1 01 
    Report ID (10)85 0A 
    Logical Minimum (0)15 00 
    Logical Maximum (255)26 FF 00 
    Usage (Undefined)09 00 
    Report Size (8)75 08 
    Report Count (41)95 29 
    Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)B1 02 
End CollectionC0 
Usage Page (Vendor-Defined 1)06 00 FF 
Usage (Vendor-Defined 1)09 01 
Collection (Application)A1 01 
    Report ID (11)85 0B 
    Logical Minimum (0)15 00 
    Logical Maximum (255)26 FF 00 
    Usage (Undefined)09 00 
    Report Size (8)75 08 
    Report Count (126)95 7E 
    Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)B1 02 
End CollectionC0 
Usage Page (Vendor-Defined 1)06 00 FF 
Usage (Vendor-Defined 1)09 01 
Collection (Application)A1 01 
    Report ID (12)85 0C 
    Logical Minimum (0)15 00 
    Logical Maximum (255)26 FF 00 
    Usage (Undefined)09 00 
    Report Size (8)75 08 
    Report Count (1920)96 80 07 
    Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)B1 02 
End CollectionC0 

This report was generated by USBlyzer

需要特别注意的是:这个设备是 USB Full Speed(12Mbits/s)的,必须在文件头部设置为 Full Speed,如果继续使用 Low Speed,插入之后读取描述符后 Host就会停止继续发送数据(Windows 行为,我不知道原因)。

除此之外,和之前的鼠标代码相比还增加了一个HID 描述符,另外,在 Main 中定时发送打开Windows 菜单(Win按键)。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注