USB协议详解第4讲(USB描述符-标准配置描述符)

news/2024/11/15 11:51:11/文章来源:https://www.cnblogs.com/linhaostudy/p/18353258

1.USB描述符

USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB标准配置描述符的组成。

2.标准配置描述符组成

一个USB设备至少有一个或者多个配置,这一点可以从设备描述符的最后一项bNumConfigurations得到,但是当前只能选择其中一种配置,每一种配置都对应一个配置描述符集合,为什么说是一个集合呢,因为这个配置包括标准配置描述符、接口描述符、端点描述符,如果是HID设备还会包括HID描述符,我们今天讲的是标准配置描述符,后期会讲解其他的描述符。标准配置描述符只有9个字节,组成如下:

3.STM32配置描述符*集合*代码(必须按照顺序)

/* USB Configuration Descriptor */
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
{
//
// 标准配置描述符
//	0x09, /* bLength: Configuation Descriptor size */USB_CONFIGURATION_DESCRIPTOR_TYPE, 	/* bDescriptorType: Configuration */CUSTOMHID_SIZ_CONFIG_DESC,			/* wTotalLength low : Bytes returned */0x00,								/* wTotalLength high: Bytes returned */0x01,         /* bNumInterfaces: 1 interface */0x01,         /* bConfigurationValue: Configuration value */0x00,         /* iConfiguration: Index of string descriptor describing the configuration*/0xC0,         /* bmAttributes: Bus powered *//*Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits */0x96,         /* MaxPower 300 mA: this current is used for detecting Vbus *///
// 接口描述符
//		/************** Descriptor of Custom HID interface ****************//* 09 */0x09,         						/* bLength: Interface Descriptor size */USB_INTERFACE_DESCRIPTOR_TYPE,		/* bDescriptorType: Interface descriptor type */0x00,         /* bInterfaceNumber: Number of Interface */0x00,         /* bAlternateSetting: Alternate setting */0x02,         /* bNumEndpoints 此接口有两个端点 */0x03,         /* bInterfaceClass: HID */0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */0,            /* iInterface: Index of string descriptor *///
// HID描述符(后续讲解)
//		/******************** Descriptor of Custom HID HID ********************//* 18 */0x09,         /* bLength: HID Descriptor size */HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */0x10,         /* bcdHID: HID Class Spec release number */0x01,0x00,         /* bCountryCode: Hardware target country 国家代码 */0x01,         /* bNumDescriptors: Number of HID class descriptors to follow类别描述符数目(至少有一个报表描述符)*/0x22,         /* bDescriptorType 报告描述符 */CUSTOMHID_SIZ_REPORT_DESC,	/* wItemLength: Total length of Report descriptor 报告描述符大小 */0x00,						/* 标志类别描述符说明结束 */ //
// 端点1描述符
//		/******************** Descriptor of Custom HID endpoints ******************//* 27 */0x07,          /* bLength: Endpoint Descriptor size */USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */0x82,          /* bEndpointAddress: Endpoint Address (IN) */               // bit 3...0 : the endpoint number// bit 6...4 : reserved// bit 7     : 0(OUT), 1(IN)0x03,          /* bmAttributes: Interrupt endpoint */0x40,          /* wMaxPacketSize: 64 Bytes max */0x00,0x02,          /* bInterval: Polling Interval (2 ms) *//* 34 *///
// 端点2描述符
//		0x07,	/* bLength: Endpoint Descriptor size */USB_ENDPOINT_DESCRIPTOR_TYPE,	/* bDescriptorType: *//*	Endpoint descriptor type */0x01,	/* bEndpointAddress: *//*	Endpoint Address (OUT) */0x03,	/* bmAttributes: Interrupt endpoint */0x40,	/* wMaxPacketSize: 64 Bytes max  */0x00,0x02,	/* bInterval: Polling Interval (2 ms) *//* 41 */
}; /* CustomHID_ConfigDescriptor */

4.标准配置描述符组成详解

1.bLength

配置描述符的长度。

2.bDescriptorType

描述符类型,配置描述符为0x02。描述符的结构开头是一样的,都是先说描述符长度,然后说类型,每种描述符的类型是不一样的,如下表格,可速查。

3.wTotalLength

配置描述符集合总长度,也就是说总共有多少个字节。第二节讲了,配置描述符是以集合的形式,集合里包含了标准配置描述符,接口描述符,端点描述符,HID描述符,wTotalLength就是配置描述符集合的长度。

3.wTotalLength

配置描述符集合总长度,也就是说总共有多少个字节。第二节讲了,配置描述符是以集合的形式,集合里包含了标准配置描述符,接口描述符,端点描述符,HID描述符,wTotalLength就是配置描述符集合的长度。

4.bNumInterfaces,

当前配置下面有多少个接口,单一功能设备只有一个接口,如鼠标或者键盘,如果是复合设备,如果是鼠键一体的设备,那么它可能有两个接口,其实一个接口对应于一种功能,如果我们在软件实现的时候,把鼠标键盘当做一个功能实现的时候,那就是一个接口的设备(也就是单功能设备)。

5.bConfigurationValue,

前面说了,一个USB设备可能有多个配置,但是当前只能选择一种配置。bConfigurationValue就是当前配置的标识,如果主机想选择哪种配置,是通过标识去选择的,后面枚举的时候会详细讲解。

6.iConfiguration

描述该配置的字符串的索引值,如果没有字符串,那这个值就是0。

7.bmAttributes

在这个配置下,设备的一些特性。D7是保留位,默认为1;D6表示供电方式,0是自供电,1是总线供电;D5表示是否支持远程唤醒,为1表示设备支持远程唤醒;D4~D0保留,默认为0。大家可能会问为什么不把这些特性放在设备描述符里面,这些可都是设备的属性啊,在这里要告诉大家,USB设备会有多种配置,每种配置下的设备属性是不一样的,主机可以灵活的选择使用那种配置,从而实现对应配置上的功能,这样增加了总线设计的灵活性和可配置性,从而达到通用性。

8.bMaxPower

在这个配置下,设备需要的电流,单位是2ma。如果一个设备耗电量100ma,那么本字节设置为0x32即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781233.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启/关闭子系统的命令

WSL 下的运行 我们需要怎么关闭或者开启子系统呢 用管理员权限打开的命令行 先用 wsl -l -v查看当前有无任务我这边是关闭的,于是我想把它开上,输入net start LxssManager已经开启,接下来去想去的地方操作就好了 如果要关掉子系统呢 直接net stop LxssManager即可关闭本文来…

解决LocalDateTime返回前端数据为数组结构的问题

问题现象解决办法如下 1、使用@JsonFormat @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")结果2、使用SpringMVC提供的ExtendMessageConverters @Slf4j @Configuration public class WebMvcConfig extends WebMvcConfigurationSupport…

windows网络正常,但是网络图标变为飞机

本文来自博客园,作者:东岸,转载请注明原文链接:https://www.cnblogs.com/donghao99/p/18353254

气象爱好者必备网址(持续更新)

目录测站资料雷达资料探空图资料学习教程论坛/BBS/个人站天气模拟器 测站资料 q-weather 中山市气象公众网 深圳市气象局(台)-自动站查询 雷达资料 NMC-全国雷达回波反射率组合图 广州天气PDA版-雷达回波图 广州市海珠区Swift 江门雷达(相控阵雷达) NaTyphoon-雷达回波反射…

springMVC 请求流程解析

` @SuppressWarnings("deprecation") protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { // 实际处理时用的请求,如果不是上传请求,则直接使用接收到的 request,否则封装成上传的 request HttpServletRequ…

时间分辨率、采样率与采样深度三者关系理解

在脑成像研究中,分辨率和采样率是一个经常被提及的概念,但分辨率和采样率有时候容易混淆。除此之外,采样深度这个重要的概念却很少被提及。因此,本篇随笔主要内容是为阐述上述三者的概念以及相关联系。 概念的明晰 了解关系之前,首先需要明晰三者的定义概念,其中分辨率仅…

SciTech-BigDataAIML-Algorithm-: 主观经验:先验概率似然概率 和 客观事实:后验概率条件概率 + Floyd(弗落伊得)最短路线算法

主观经验 和 客观事实:后验概率 Subjective主观经验: 先验概率 & 似然概率 Objective客观事实: 后验概率 & 条件概率Floyd(弗落伊得)最短路线算法

动手做科研-day01-AI的最新进展与科研应用

01. Python 程序运行工具以及环境搭建 选择使用kaggle官方的notebook作为环境搭建的平台, 因为之前使用过kaggle进行注册,因此直接简单登录,按照下图依次进行操作 note: 需要挂来登录 1. 点击create2. 创建notebook记事本3. 尝试写一个简单的hello world 先新建codeprint(&q…

FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo

​不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以QQ、微信为代表的即时通信工具,能够实时传输文本和图片。其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊。除了常见的图文即时通信,还有实时音视频通信,比如一对一的音频通话、一对一的视频通话等…

电容在电路中的作用

电容在电路中的作用上图中,六个电容的作用 1、在运算放大器IC供电旁边的电解电容或固态电容C09 一般放在这里的作用是 a.电源输入的电池泵,因为开关电源或者DC/DC离运算放大器IC太远了,相当于中转的电池泵的作用 b.电容的容量较大,所以有低频滤波的效果 2、小电容或者陶瓷电…

基于模糊pid的两路交错boost变换器Simulink仿真及代码自动生成(上)电路仿真部分

设计两路交错BOOST变换电路,搭建Simulink仿真模型,并设计控制算法(常规PID与模糊控制PID)。基于德州仪器TMS320F280025单片机使用Matlab Code Generation Tools进行编程与实物测试。后半部分已更新 简介:设计两路交错BOOST变换电路,搭建Simulink仿真模型,并设计控制算法…