HID报表描述符大全及实例分析
+ -

HID键盘报告描述符3

2026-08-06 本文链接为:http://www.usbzh.com/article/detail-1783.html ,欢迎转载,转载请附上本文链接。
0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
0x09, 0x06,        // Usage (Keyboard)
0xA1, 0x01,        // Collection (Application)
0x85, 0x02,        //   Report ID (2)
0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
0x19, 0xE0,        //   Usage Minimum (0xE0)
0x29, 0xE7,        //   Usage Maximum (0xE7)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x08,        //   Report Count (8)
0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x95, 0x01,        //   Report Count (1)
0x75, 0x08,        //   Report Size (8)
0x81, 0x03,        //   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x95, 0x05,        //   Report Count (5)
0x75, 0x01,        //   Report Size (1)
0x05, 0x08,        //   Usage Page (LEDs)
0x19, 0x01,        //   Usage Minimum (Num Lock)
0x29, 0x05,        //   Usage Maximum (Kana)
0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)

0x95, 0x01,        //   Report Count (1)
0x75, 0x03,        //   Report Size (3)
0x91, 0x03,        //   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)

0x95, 0x06,        //   Report Count (6)
0x75, 0x08,        //   Report Size (8)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x65,        //   Logical Maximum (101)
0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
0x19, 0x00,        //   Usage Minimum (0x00)
0x29, 0x65,        //   Usage Maximum (0x65)
0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)

0xC0,              // End Collection

这是一个标准的 USB HID 键盘报告描述符。它定义了一个特定 Report ID 为 2 的键盘,包含 按键状态(修饰键 + 普通键)LED 指示灯控制

1. 基础信息与集合

  • 0x05, 0x01 / 0x09, 0x06:定义为“键盘”用途。
  • 0x85, 0x02关键点。此键盘使用 Report ID = 2。这意味着主机与设备通信时,数据包的第一个字节必须是 0x02

2. 第一块数据:修饰键(8 位)—— 输入

0x05, 0x07, 0x19, 0xE0, 0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08, 0x81, 0x02
  • 内容:占用 8 个 bit(1 字节),每个 bit 代表一个修饰键(Ctrl、Shift、Alt、Win 等)。
  • 含义:这是一个 位图(Bitmap)。如果按住了左 Ctrl,该字节的第 0 位即为 1。

3. 第二块数据:预留字节(1 字节)—— 输入

0x95, 0x01, 0x75, 0x08, 0x81, 0x03
  • 内容:占用 8 个 bit(1 字节)。
  • 标志0x03(常量),表示这是一个填充占位符,数据始终为 0,主机应忽略该字节。这是为了在数据结构中对齐后续的 LED 字节。

4. 第三块数据:指示灯(LEDs)—— 输出

0x95, 0x05, 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02
  • 方向Output(主机 -> 设备)。用于控制键盘上的 Num Lock、Caps Lock 等指示灯。
  • 内容:占用 5 个 bit,分别对应 Num Lock、Caps Lock、Scroll Lock、Compose、Kana。
  • 注意:由于 Report ID 是 0x02,主机下发的数据包格式为:[0x02][LED状态字节]

5. 第四块数据:LED 填充位(3 bit)—— 输出

0x95, 0x01, 0x75, 0x03, 0x91, 0x03
  • 补齐 3 个 bit,使 LED 部分也凑成 1 字节,方便字节对齐。数据固定为 0。

6. 第五块数据:普通按键(6 个键)—— 输入

0x95, 0x06, 0x75, 0x08, 0x15, 0x00, 0x25, 0x65, 0x05, 0x07, 0x19, 0x00, 0x29, 0x65, 0x81, 0x00
  • 内容:占用 6 字节。
  • 格式数组(Array)。每个字节存放一个按键的 Usage ID(值范围 0~101,即 0x00 ~ 0x65)。
  • 机制:数组模式下,如果没按任何键,该字节为 0(报告无按键)。如果同时按下多个键,这里最多存储 6 个 同时按下的键(超过 6 个会产生溢出或丢弃)。

数据包结构总览

当你的设备发送 Report ID = 2 的数据给电脑时,数据格式固定为 8 字节

字节偏移 0 1 2 3 4 5 6 7
内容 Report ID 修饰键 保留 普通按键 1 普通按键 2 普通按键 3 普通按键 4 普通按键 5
值(示例) 0x02 0x22 0x00 0x04 0x00 0x00 0x00 0x00

示例数据含义(如上表)

  • 0x02:标识是这张键盘ReportId。
  • 0x22:二进制 0010 0010,表示按住了 左 Shift左 Ctrl
  • 0x04:表示按下了 A 键(键盘 Usage ID 0x04)。

潜在限制分析

  1. 最大按键数量:只支持 6 键无冲(6KRO)。如果同时按下第 7 个键,键盘可能不会上报,或上报错误的键值(取决于固件实现)。
  2. Usage ID 覆盖范围:只支持 0~101(即标准键盘的 A~Z、数字、F1~F12 等),不支持多媒体键(如音量加减)。
  3. Boot Protocol 兼容性:这个描述符完全兼容标准的 BIOS 和 USB 协议。如果设备插入只支持 Boot 协议的电脑(如老式 BIOS),可以正常工作。
本文链接为:http://www.usbzh.com/article/detail-1783.html ,欢迎转载,转载请附上本文链接。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的......
USB键盘报告描述符数据格式分析
USB键盘的HID报表描述符的内容参见下表。数据的输入端点为中断方式,当有键盘敲击事件时,会上报数据长度为8字节的数据报告。0x05,0x01,// Global Generic Desktop0x09,0x06,// Local KeyBoard 0xA1,0x01,// Main app col......
HID 报表描述符键盘实例
通过下面的报告描述符的定义,我们根据上面的注释可知,包含一个中断输入报表描述符和一个中断输出报告描述符。其中断输入报告描述符用于USB HID键盘中断输入端点,输出报表描述符用于USB HID键盘中断输出端点。USB HID键盘的中断输入报告对于中断输入端点,数据格式定义如下:BYTE0:该字......
BIOS下识别USB键盘
在BIOS下要识别一个USB键盘和在操作系统下识别一个USB键盘其实是有一些区别的:首先接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIO......
为什么Windows7重新安装系统后插在USB3.0端口的鼠标不能使用?
在 Windows 7 及更早版本的操作系统中,USB 3.0 驱动程序堆栈由第三方提供,操作系统不提供USB3.0驱动栈。 因此,Windows7重新安装系统后插在USB3.0端口上的所有设备都无法工作,需要安装第三方提供的USB控制器和集线器驱动,这样才能识别出挂接在该USB总线下的设备。从Wi......
USB键盘与HID报表描述符关系
报告描述符确实非常复杂,要看懂协议真得比较难(因为只有英文的),我见到的国内教材也没有对这部分写得很详细的,有的也只是部分内容的翻译而已。一般建议用示例报告描述符修改一下就可以了,《Hid Usage Table》里给出了一些常见应用的报告描述符。对于键盘类应用,通常用已有的示例已经够用了。“如果是......
HID复合设备(键盘、鼠标)的实现
在使用一些USB键盘或鼠标的时候,特别是一些电竟高档HID设备时,经常发现这些设备会额外定义一些特别的快捷键,使得这些设备不仅有基础设备(如键盘,鼠标)的功能,也有一些特别的快捷功能(如系统声音的放大放小)。甚至更有一些复杂的设备,只需要一个USB接口,就同时支持鼠标键盘功能或在键盘的额外区域支持触......
USB HID键盘设备树及设备枚举过程分析
今天在本站USB中文网微信技术交流群有一个同学在问关于HID设备的报表描述符的东东。但是在问的过程中发现一个很严重的问题,那就是它的它设备是一个复合设备,导致设备树比较复杂,关于报表描述符与接口描述符等之间的相关对应关系不是很清楚。为此,本人手中刚好有一个本人认为USB HID设备中相对比较复杂的设......
Windows下通过USB虚拟的键盘鼠标总结
产品级详见:https://www.usbzh.com/article/detail-1182.html哐哐铛铛的,终于把以前搞的虚拟键盘、鼠标的驱动代码重新整理完成,并且在此基础上将USB虚拟的键盘和鼠标整合到一个驱动中。将键盘和鼠标的代码合并在一起的原因很简单:第一是为了验证自己写的这个虚......
USB键盘在Linux环境下一直返回NAK的输入端点和一直OUT数据的输出端点
群里有同学反馈,自己做的USB键盘在Windows下正常,但在Linux下就失败,想让帮忙分析一下原因。一个比较好的消息是他那边有USB总线分析仪,所以只需要抓包就可以进行分析了。最好开他给的抓包截图是样子的:从它的截图可以看到,USB键盘在获取了该键盘的HID报告描述符后,紧跟着一下发Report......
USB键盘HID设备示例
键盘是一个比较复杂的复合设备,其中接口0实现的是键盘功能,接口1又因为报告描述符分为三个HID设备。BUSHOUND下的设备ID关系:在BUSHOUND抓取该USB键盘的枚举过程:Device Length Phase Data ......
USB键盘鼠标芯片选型
型号协议功能时钟工作温度封装 CH93292.0 全速 Device串口转HID键盘/鼠标/自定义HID芯片,支持多种工作模式和串口通讯模式内置-40~+85℃SOP16 CH93282.0 全速 Device串口转HID键盘芯片,实现串口数据转US......
USB键盘定义HID报告描述符一键关机、唤醒和睡眠功能
这是本人电脑的USB键盘复合设备中的一个HID功能,用于实现一键关机,唤醒机器和一键进入睡眠状态。使用USB标准请求及描述符在线分析工具http://www.usbzh.com/tool/usb.html 分析该报告描述符0x05, 0x01, // Usage Page (Gene......
HID键盘鼠标复位报告描述符
0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, ......
HID键盘报告描述符
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)0x09, 0x06, // Usage (Keyboard)0xA1, 0x01, // Collection (Application)0x05, 0......
关注公众号
  • HID人机交互
  • Linux&USB
  • Linux-USB百科
  • MIDI V1.0
  • TinyUSB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB3测试
  • USB3知识点
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • XHCI 1.2b 规范
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!