首页 > 其他分享 >USB配置描述符

USB配置描述符

时间:2024-03-17 19:31:31浏览次数:19  
标签:USB 配置 接口 描述符 端点 设备

配置描述符

我们的主机枚举过程中,是没有单独获取接口和端点描述符的,这是因为他们都是配置描述符的,当主机获取配置描述符时候,也就意味着会同时获取从属的接口,端点(及其他特定类描述符)。

USB主机对于设备描述符的获取是有两次的,第一次只是获取如上图的8个字段,也就是前9个字节,这9个字节就是配置描述符信息(暂时还不包括接口与端点描述符的具体信息),

第一个字段(bLength)同样代表该描述符的长度,配置描述符固定为9字节,这和配置描述符不一样,该字段不代表Joystick_ConfigDescriptor数组的长度,因为我们配置描述符还包括了端点和接口(及其他特定类)描述符。

第二个字段(bDescriptorType)固定为0x02,表示配置描述符的类型

第三个字段(wTotalLength)表示配置描述符的长度,这时候他就是整个数组的长度了,包括了端点和接口(及其他特定类)描述符。它是双字节表示,但是注意他不是BCD码。

该数组一共34字节 

第四个字段(bNumInterfaces)表示接口数量,如果设备包含多个接口,并且这每个接口代表一个独立的功能,我们称为复合设备。

无论一个复合设备有多少接口,主机只会给设备分配一个地址,但是对于一些组合设备来说,每个功能(设备)都会分配一个地址。

第五个字段(bConfigurationValue)表示配置值。我们的USB设备可以有多个配置,这个配置值就是我们每个配置的标志。我们的主机在枚举过程中会读取设备所支持的所有配置描述符,最后才发送命令来选择一个配置,如果我们选择的配置值与该字段值一样,说明该值对应的配置被激活。

第六个字段(iConfiguration)表示描述该配置描述符的索引值。如果没有就设置为0.

第七个字段(bmAttributes)表示USB设备的配置特性,总共一个字节,八个数据位,一个或多个数据位代表一定的功能配置

最高位必须为1,这是规定的,没什么理由,低5位全为0,第六位 D5 表示设备是否支持远程唤醒

第七位 D6 表示USB设备的供电模式,1 就是自供电 它主要供电来源不是USB电源,而是单独配置了一个供电电源接口,0就不是自供电,就是可以USB供电,比如键盘,鼠标啥的。

第八个字段(MaxPower)表示从总线获取的电流 是以2MA为单位 

下节讲接口和端点描述符

标签:USB,配置,接口,描述符,端点,设备
From: https://blog.csdn.net/Z1799369927/article/details/136773060

相关文章

  • USB接口与端点描述符
    主机在第一次发送获取配置描述符的命令时,只会读取配置描述符的前九个字节,它包含了配置描述符以及所有从属的接口,端点(及其他特定类描述符)的总长度。获取其他长度不固定的描述符也是这样分成两步执行如果一个配置描述符不只支持一个接口描述符,并且每个接口描述符都有自己从属......
  • FTP的配置和管理
    实验环境:两台windowsservers一台已经配置了FTP服务器,IP为192.168.1.220,vmnet1一台作为客户端测试,IP为192.168.1.138,vmnet1一:FTPIP限制1.关闭ftp服务器端防火墙,使客户端能pin通服务器端2.在客户端资源管理器输入ftp://192.168.1.220,访问再此新建文件夹,查看是否成功3.......
  • Eclipse中配置tomcat两种方式
    0.原始方法参考:war包部署到Tomcat下运行步骤将Eclipse中javaweb工程打成war包,放在tomcat目录的WebApp下进入bin目录下,双击startup.bat1.使用server配置tomcat1.1在下方的server一栏中,右键选择新建server1.2选择你的tomcat版本,并点击Configureruntimeenvironments进......
  • 修改Maven配置项
    0.打开Maven安装目录>conf>settings.xml1.修改本地仓库地址(默认是Default:${user.home}/.m2/repository也就是用户目录下的/.m2/repository下)修改为自己的本地仓库地址<localRepository>xxx</localRepository>2.了解servers当你将仓库发布到远程仓库时,在这里设置s......
  • vscode配置别名
    vscode配置别名vite.config.tsimportpathfrom'path'resolve:{alias:{'@':path.join(__dirname,'src')}}解决path不能识别的问题npmi@types/node-D解决vscode没有智能提示的问题,tsconfig.json"compilerOptions"......
  • 【QT入门】VS2019+QT的开发环境配置
    声明:该专栏为本人学习Qt知识点时候的笔记汇总,希望能给初学的朋友们一点帮助(加油!) 往期回顾:【QT入门】什么是qt,发展历史,特征,应用,QtCreator-CSDN博客【QT入门】Windows平台下QT的编译过程_qt编译windows应用-CSDN博客【QT入门】VS2019+QT的开发环境配置一、安装流程1......
  • JDK的安装以及环境变量的配置
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、JDK是什么?二、使用步骤1.安装:2.配置环境变量1.JAVA_HOME2.PATH3.CLASSPATH一、JDK是什么?JDK是JavaDevelopmentToolKit的简称,也就是Java开发工具包。JDK是整个Java的核心,包括......
  • 【业务功能篇】多环境配置、多数据源切换失效@DS解决方式
     多环境配置通过resources资源目录--config目录,我们分成了开发生产测试三个,不过一般我们都是测试环境进行测试数据库,本地开发环境就是连接测试环境 根据三个不同的环境,注意命名规范:application-xxx.yml,这样在我们的app配置文件就可以指定后缀这个值xxx就表示要运行哪个......
  • Linux 运维工程师面试真题-4-Linux 服务配置及管理
    Linux运维工程师面试真题-4-Linux服务配置及管理**1.请写出apache2.X版本的两种工作模式,以及各自工作原理。如何查看apache当前所支持的模块,并且查看是工作在哪种模式下?2.Linux下nfs在客户端无法挂载,请写出排查步骤?3.Linux下已经部署了dhcp服务器,客户端无法获取的......
  • opensips数据库配置及数据表简介
    操作系统:CentOS7.6_x64opensips版本:2.4.9MySQL版本:5.7.38一、添加mysql支持1、安装mysql依赖库安装命令如下:wgethttps://repo.mysql.com/mysql57-community-release-el7.rpmrpm-ivhmysql57-community-release-el7.rpmrpm--importhttps://repo.mysql.com/RPM-GPG-......