HID开发笔记
+ -

以固件的视角查看HID设备的枚举过程

2023-10-08 416 0

以下从固件的角度来理解HID设备的枚举过程。

注意:该过程截止到获取配置描述符,并不包括后续的获取HID报告描述符的操作。

使用以下的抓包过程,可以对照BUSHOUND的抓包过程,来理解事务和传输之间的关系。

一次传输可以包括多个事务

USB_Reset

//获取设备描述符符
<-SETUP:80 06 00 01 00 00 40 00 
SetupPacket:请求->主机,标准请求,目标=设备,6:GET_DESCRIPTOR,

请求设备符,要求长度=64
实际返回长度:18
->EP0IN:12 01 00 02 00 00 00 08 
EP0_IN,发送成功
->EP0IN:83 06 00 01 00 02 04 2C 
EP0_OUT,接收成功
StatusOutStage..无数据
USB_Reset

//设置地址
<-SETUP:00 05 18 00 00 00 00 00 
SetupPacket:请求->设备,标准请求,目标=设备,5:SET_ADDRESS,

StatusInStage..空包应答
EP0_IN,发送成功
USB_SetAddress:18


//获取设备描述符符
<-SETUP:80 06 00 01 00 00 12 00 
SetupPacket:请求->主机,标准请求,目标=设备,6:GET_DESCRIPTOR,

请求设备符,要求长度=18
实际返回长度:18
->EP0IN:12 01 00 02 00 00 00 08 
EP0_IN,发送成功
->EP0IN:83 06 00 01 00 02 04 2C 
EP0_IN,发送成功
->EP0IN:48 01 
EP0_IN,发送成功
EP0_OUT,接收成功
StatusOutStage..无数据


//获取配置描述符
<-SETUP:80 06 00 02 00 00 FF 00 
SetupPacket:请求->主机,标准请求,目标=设备,6:GET_DESCRIPTOR,

请求配置符,索引号 = 0,要求长度=255
实际返回长度:73
->EP0IN:09 02 49 00 02 01 00 80 
EP0_IN,发送成功
->EP0IN:F0 09 04 00 00 02 03 00 
EP0_IN,发送成功
->EP0IN:00 2C 09 21 10 01 00 01 
EP0_IN,发送成功
->EP0IN:22 21 00 07 05 81 03 40 
EP0_IN,发送成功
->EP0IN:00 03 07 05 01 03 40 00 
EP0_IN,发送成功
->EP0IN:10 09 04 01 00 02 03 00 
EP0_IN,发送成功
->EP0IN:01 00 09 21 10 01 00 01 
EP0_IN,发送成功
->EP0IN:22 41 00 07 05 82 03 40 
EP0_IN,发送成功
->EP0IN:00 03 07 05 02 03 40 00 
EP0_IN,发送成功
->EP0IN:10 
EP0_IN,发送成功
EP0_OUT,接收成功
StatusOutStage..无数据


//获取字符串描述符语言ID
<-SETUP:80 06 00 03 00 00 FF 00 
SetupPacket:请求->主机,标准请求,目标=设备,6:GET_DESCRIPTOR,

请求字符串符:索引号 = 0,要求长度=255
实际返回长度:4
->EP0IN:04 03 09 04 
EP0_IN,发送成功
EP0_OUT,接收成功
StatusOutStage..无数据

//获取字符串描述符
<-SETUP:80 06 2C 03 09 04 FF 00 
SetupPacket:请求->主机,标准请求,目标=设备,6:GET_DESCRIPTOR,

请求字符串符:索引号 = 44,要求长度=255
实际返回长度:28
->EP0IN:1C 03 44 00 49 00 54 00 
EP0_IN,发送成功
->EP0IN:32 00 33 00 59 00 20 00 
EP0_IN,发送成功
->EP0IN:52 00 65 00 61 00 64 00 
EP0_IN,发送成功
->EP0IN:65 00 72 00 
EP0_IN,发送成功
EP0_OUT,接收成功
StatusOutStage..无数据

<-SETUP:80 06 48 03 09 04 FF 00 
SetupPacket:请求->主机,标准请求,目标=设备,6:GET_DESCRIPTOR,

请求字符串符:索引号 = 72,要求长度=255
实际返回长度:26
->EP0IN:1A 03 30 00 30 00 30 00 
EP0_IN,发送成功
->EP0IN:31 00 41 00 30 00 30 00 
EP0_IN,发送成功
->EP0IN:30 00 30 00 30 00 30 00 
EP0_IN,发送成功
->EP0IN:30 00 
EP0_IN,发送成功
EP0_OUT,接收成功
StatusOutStage..无数据
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

Windows下枚举系统中所有HID设备
Windows下对任何设备,文件的打开都是通过CreateFile来实现的,不过要打开一个设备得首先知道设备或文件名。由上节可知道,对于HID设备,都会注册一个接口类型为{2ACCFE60-C130-11D2-B082-00A0C91EFB8B}的GUID。我们可以通过Setup系列函数枚举出系统中......
USB 枚举/断开过程
USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配置设备这么几个过程。各过程的状态如下表:USB设备的枚举过程USB主机检测到USB设备插入后,就要对设备进行枚举了。枚举的作用就是从设备是那个读取一些信息,知道设备是什么样的设备,然后......
USB设备的枚举过程分析
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))详情可见:http://www.usbzh.com/art......
HID 设置协议SetProtocol
SetProtocol用于设置ID设备的协议值。对于USB引导设备,该协议是必须对;对于非引导设备,是可选的。详见:USB请求bmRequestType(1):0x21bRequest(1): SetProtocol,值为0bwValue(2):数据为0表示引导协议,为1表示报告协议。wInd......
HID 设置报告请求SetReport
SetReport请求用于主机向设备发送报告请求。详见:USB请求bmRequestType(1):0x21bRequest(1): SET_REPORT,值为09.wValue(2):高字节报告类型,低字节为报告ID.01:表示输入报告02: 表示输出报告03: 表示特定报告wIndex......
HID 触摸屏的报表描述符
讲道理,这个触摸屏的报告描述符是我从网上搜索的一段代码,这个触摸屏的报告内容本人也进行了测试。测试是通过本站编写的虚拟触摸屏驱动实现的。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0 0x......
HID 简介
 HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。  Wndows操作系......
Windows下USB设备的枚举过程分析
1.用户把USB设备插入USB端口或给系统启动时设备上电这里的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。2.Hub监测它各个端口数据线上(D+/D-)的电压在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rp......
HID 体系结构
Windows 中的 HID 驱动程序堆栈的体系结构基于名为 hidclass.sys 的类驱动程序。 客户端和传输微型驱动程序从用户模式或内核模式下访问的类驱动程序。HID类驱动程序在系统提供的 HID 类驱动程序是 WDM 功能驱动程序和总线驱动程序 HID 设备安装程序类 (HIDClass)......
HID 报表描述符数字显示实例
USAGE_PAGE (Alphnumeric Display) 05 14USAGE (Alphanumeric Display) 09 01LOGICAL_MINIMUM (0) 15 00 CO......
HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的......
USB复合HID设备报告描述符的区分
在USB规范中,设备的功能是通过接口来承载的,在USB规格书中就是接口描述符。对于一般的设备,一般一个接口就是一个功能,这个功能可以是鼠标,键盘或其它设备类型。当然这个只是对USB简易设备而言的,对于一些USB复杂设备如UVC摄像头,UAC音频等是多接口相互配合来实现其功能的,为了整合这么多接口使......
HID 设备描述符关系
HID设备连接到USB主机后,主机通过发送Get_Descriptor请求读取HID设备的描述符,了解描述符对了解USB设备是至关重要的。HID设备的描述符HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。这些描述符是:USB标准描述符:设备描述符、配置描述符、......
HID描述符
HID描述符的主要作用是用来识别HID通信所使用的额外描述符。下表是HID描述符结构。偏移量字段字节数数值类型说明0bLength1Numeric描述符字节数1bDescriptorType1Constant0x21 = HID描述符2bcdH......
HID报告描述符详解
HID的报告描述符和其它描述符不一样,不是具有固定的数据结构,而是由固件开发商根据上报的数据自行组装的。这个组装的原材料是HID规范定义的ITEM。所以说HID报告描述符就像搭积木一样,其最终的数据结构和设计图纸是什么,都是由固件开发商决定的,但是其最终的产品又是由HID规范提供的各个标准积木模块搭......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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