USB-HID描述符结构解析

USB-HID描述符结构解析

USB描述符:

USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如类描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序

在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后, USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。

ps:
每一个USB设备只有一个设备描述符,一个设备中包含一个或者是多个配置描述符,每一个配置中包含一个或者多个接口描述符;
一个设备至少要包含设备描述符,配置描述符,接口描述符;

在这里插入图片描述

设备描述符:

设备描述符给出了USB设备的一般信息,包括对设备及在设备配置中起全程作用的信息,包括*制造商标识号ID,产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一个USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了14个字段,结构如下:
在这里插入图片描述在这里插入图片描述
类型值:
在这里插入图片描述
在这里插入图片描述

配置描述符:

配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(白供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。
在这里插入图片描述

接口描述符

配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这里把它称之为“功能"更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个“接口"。

如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB主机的配置描述符命令时, USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回接口描述符不可直接用Set Descriptor和Get Descriptor来存取。

如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0,接口描述符在说明端点个数并不把端点0计算在内。

在这里插入图片描述
在这里插入图片描述
接口类别:
在这里插入图片描述

端点描述符:

端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。
除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。

在于LINUX进行通信时,可以通过确认端点描述符输入输出的端口号,使LINUX打开正确的输入输出设备,与USB-HID进行通信;
在使用多个接口的时候,建议设置端点描述符的时候,使端口号不一样

在这里插入图片描述
在这里插入图片描述

字符串描述符:

字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值部必须为0。字符串使用的是Unicode编码。
主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农-老七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值