使用 CH567 制作一个USB 键盘-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1122|回复: 0

使用 CH567 制作一个USB 键盘

[复制链接]
发表于 2022-2-2 19:43 | 显示全部楼层 |阅读模式
这一次使用 CH567 制作一个USB键盘,参考的对象是DostyleMK60 机械键盘。
Picture1.jpg
同样的,使用 USBlyzer 抓取描述符信息:
USB Composite Device
  
Connection Status
  
  
Device connected
  
  
Current Configuration
  
  
1
  
  
Speed
  
  
Full (12 Mbit/s)
  
  
Device Address
  
  
8
  
  
Number Of Open Pipes
  
  
2
  
Device Descriptor GamingKB
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
12h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
01h
  
  
Device
  
  
2
  
  
bcdUSB
  
  
2
  
  
0110h
  
  
USB Spec 1.1
  
  
4
  
  
bDeviceClass
  
  
1
  
  
00h
  
  
Class info in Ifc  Descriptors
  
  
5
  
  
bDeviceSubClass
  
  
1
  
  
00h
  
  
6
  
  
bDeviceProtocol
  
  
1
  
  
00h
  
  
7
  
  
bMaxPacketSize0
  
  
1
  
  
08h
  
  
8 bytes
  
  
8
  
  
idVendor
  
  
2
  
  
258Ah
  
  
10
  
  
idProduct
  
  
2
  
  
002Ah
  
  
12
  
  
bcdDevice
  
  
2
  
  
1201h
  
  
12.01
  
  
14
  
  
iManufacturer
  
  
1
  
  
01h
  
  
"SINO  WEALTH"
  
  
15
  
  
iProduct
  
  
1
  
  
02h
  
  
"Gaming KB  "
  
  
16
  
  
iSerialNumber
  
  
1
  
  
00h
  
  
17
  
  
bNumConfigurations
  
  
1
  
  
01h
  
Configuration Descriptor1 Bus Powered, 500 mA
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
09h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
02h
  
  
Configuration
  
  
2
  
  
wTotalLength
  
  
2
  
  
003Bh
  
  
4
  
  
bNumInterfaces
  
  
1
  
  
02h
  
  
5
  
  
bConfigurationValue
  
  
1
  
  
01h
  
  
6
  
  
iConfiguration
  
  
1
  
  
00h
  
  
7
  
  
bmAttributes
  
  
1
  
  
A0h
  
  
Bus 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.......
  
  
8
  
  
bMaxPower
  
  
1
  
  
FAh
  
  
500 mA
  
Interface Descriptor 0/0 HID,1 Endpoint
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
09h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
04h
  
  
Interface
  
  
2
  
  
bInterfaceNumber
  
  
1
  
  
00h
  
  
3
  
  
bAlternateSetting
  
  
1
  
  
00h
  
  
4
  
  
bNumEndpoints
  
  
1
  
  
01h
  
  
5
  
  
bInterfaceClass
  
  
1
  
  
03h
  
  
HID
  
  
6
  
  
bInterfaceSubClass
  
  
1
  
  
01h
  
  
Boot Interface
  
  
7
  
  
bInterfaceProtocol
  
  
1
  
  
01h
  
  
Keyboard
  
  
8
  
  
iInterface
  
  
1
  
  
00h
  
HID Descriptor
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
09h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
21h
  
  
HID
  
  
2
  
  
bcdHID
  
  
2
  
  
0111h
  
  
1.11
  
  
4
  
  
bCountryCode
  
  
1
  
  
00h
  
  
5
  
  
bNumDescriptors
  
  
1
  
  
01h
  
  
6
  
  
bDescriptorType
  
  
1
  
  
22h
  
  
Report
  
  
7
  
  
wDescriptorLength
  
  
2
  
  
0043h
  
  
67 bytes
  
Endpoint Descriptor 81 1In, Interrupt, 1 ms
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
07h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
05h
  
  
Endpoint
  
  
2
  
  
bEndpointAddress
  
  
1
  
  
81h
  
  
1 In
  
  
3
  
  
bmAttributes
  
  
1
  
  
03h
  
  
Interrupt
  
  
1..0: Transfer Type
  
  
......11
  
  
Interrupt
  
  
7..2: Reserved
  
  
000000..
  
  
4
  
  
wMaxPacketSize
  
  
2
  
  
0008h
  
  
8 bytes
  
  
6
  
  
bInterval
  
  
1
  
  
01h
  
  
1 ms
  
Interface Descriptor 1/0 HID,1 Endpoint
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
09h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
04h
  
  
Interface
  
  
2
  
  
bInterfaceNumber
  
  
1
  
  
01h
  
  
3
  
  
bAlternateSetting
  
  
1
  
  
00h
  
  
4
  
  
bNumEndpoints
  
  
1
  
  
01h
  
  
5
  
  
bInterfaceClass
  
  
1
  
  
03h
  
  
HID
  
  
6
  
  
bInterfaceSubClass
  
  
1
  
  
00h
  
  
7
  
  
bInterfaceProtocol
  
  
1
  
  
00h
  
  
8
  
  
iInterface
  
  
1
  
  
00h
  
HID Descriptor
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
09h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
21h
  
  
HID
  
  
2
  
  
bcdHID
  
  
2
  
  
0111h
  
  
1.11
  
  
4
  
  
bCountryCode
  
  
1
  
  
00h
  
  
5
  
  
bNumDescriptors
  
  
1
  
  
01h
  
  
6
  
  
bDescriptorType
  
  
1
  
  
22h
  
  
Report
  
  
7
  
  
wDescriptorLength
  
  
2
  
  
00CCh
  
  
204 bytes
  
Endpoint Descriptor 82 2In, Interrupt, 1 ms
  
Offset
  
  
Field
  
  
Size
  
  
Value
  
  
Description
  
  
0
  
  
bLength
  
  
1
  
  
07h
  
  
1
  
  
bDescriptorType
  
  
1
  
  
05h
  
  
Endpoint
  
  
2
  
  
bEndpointAddress
  
  
1
  
  
82h
  
  
2 In
  
  
3
  
  
bmAttributes
  
  
1
  
  
03h
  
  
Interrupt
  
  
1..0: Transfer Type
  
  
......11
  
  
Interrupt
  
  
7..2: Reserved
  
  
000000..
  
  
4
  
  
wMaxPacketSize
  
  
2
  
  
0010h
  
  
16 bytes
  
  
6
  
  
bInterval
  
  
1
  
  
01h
  
  
1 ms
  
Interface 0 HID ReportDescriptor 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  Maximum
  
  
2A 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 Collection
  
  
C0
  
Interface 1 HID ReportDescriptor 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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
  
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 Collection
  
  
C0
  
This report was generated by USBlyzer
需要特别注意的是:这个设备是 USB Full Speed(12Mbits/s)的,必须在文件头部设置为 Full Speed,如果继续使用 Low Speed,插入之后读取描述符后 Host就会停止继续发送数据(Windows行为,我不知道原因)。
除此之外,和之前的鼠标代码相比还增加了一个HID描述符,另外,在 Main 中定时发送打开Windows菜单(Win按键)。


USB1_Keyboard.zip (379.23 KB, 下载次数: 1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:22 , Processed in 0.079232 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表