USB描述符实例和介绍

具体的描述符每个字节的含义可参考USB2.0协议

一个标注的描述符集合

/*********************************/
设备描述符[18]{0x12,      //固定 bLength字段。设备描述符的长度为18(0x12)字节0x01,	  //固定 bDescriptorType字段。设备描述符的编号为0x010x10,0x01, //bcdUSB字段。这里设置版本为USB1.1,即0x0110。//由于是小端结构,所以低字节在先,即0x10,0x01。
//设备类参考:https://www.usb.org/defined-class-codes0x00,	  //bDeviceClass字段。类代码,不在设备描述符中定义设备类,在接口	 描述符定义,这里为0则下面两个都是0 0x00,	  //bDeviceSubClass字段。bDeviceClass字段为0时,该字段也为0。0x00,	  //bDeviceProtocol字段。设备协议0x08,	  //bMaxPacketSize0字段。端点0最大包长(仅8(低速),16,32,64(全速/高速)合法)0x3d,0x41, //idVender字段,注意小端模式,低字节在先。从此6字节是描述设备信息0x3a,0x55, //idProduct字段 产品ID号。注意小端模式,低字节应该在前。0x00,0x00, //bcdDevice字段。注意小端模式,低字节应该在前。0x00,	  //iManufacturer字段。厂商字符串的索引从此3字节可以认为名字0x00,	  //iProduct字段。产品字符串的索引值,注意字符串索引值不要使用相同的值0x00,	  //iSerialNumber字段。设备的序列号字符串索引值。0x01		  //bNumConfigurations字段。该设备所具有的配置描述数量。
}、实际传输的配置描述符集合:配置描述符+接口+hid等类+端点描述符,必须按照顺序定义
/***************配置描述符******************/0x09,         //固定 bLength字段。配置描述符的长度为9字节
0x02,         //固定 bDescriptorType字段。配置描述符编号为0x02
0x3b,0x00, //wTotalLength字段。配置描述符集合的总长度0x003b(配置描述符集合)
0x02, 	//bNumInterfaces字段。该配置包含的接口数,只有2个接口,使用时只能是某个
0x01, 	//bConfiguration字段。该配置的值为1,哪个配置生效,通过这个选择使用哪个
0x01, 	//iConfigurationz字段,该配置的字符串索引。
/*bmAttributes字段,
D7:默认1,D6:自供电(0)总线供电(1),D5:支持远程唤醒(1);D4-D0:保留*/
0xA0,	 
0x64, 	//bMaxPower字段,多少个电流单位。每单位电流为 2 mA    /***************接口描述符******************/
0x09,  //固定,描述符长度
0x04,  //固定,接口描述符类型
0x00,  //接口编号,从0开始
0x00,  //备用编号,很少用,一般设置为0
0x01,  //接口包含的端点数量,不包括端点0
0x03,  //接口使用的(hid)类,当设备描述符该位0,则在这里设置设备类,单纯用作数据传输的话,直接写FFh就好,代表着用户自定义
0x01,  //子类(hid类的话这里说明是支持引导(在bios环境可用鼠标键盘),00表示不支持引导)
0x01,  //协议
0x00,  //字符串索引值,没有就写0/***************hid类描述符******************/
0x09,                //描述符(不是hid报告描述符)长度,由下级描述符的数量决定
0x21,  	        //固定,hid类描述
0x11,0x01,       // HID协议版本BCD,1.11
0x00,	       国家代码not support
0x01,              //下级描述符的数量。下级描述符的类型
0x22,	      //下级描述符的类型,报告描述符是0x22(常用),物理描述符0x23
0x3e,  0x00,   //下级描述符长度,也就是下面定义的HID报表描述符的字节数
//下级描述符类型,和下级描述符长度交替定义,可定义多个下级描述符/***************端点描述符******************/
0x07,    //固定,描述符长度
0x05,    //固定,描述符种类 端点  
//端点编号,D7:OUT(0),IN(1); D6-D4:保留默认0;D3-D0:编号值 ,下面就是IN 1
0x81,    //D1,D0:控制传输(00),同步传输(01),批量传输(10),中断传输 (11)    中断传输,参考:usb2.0手册中的9.6.6
0x03,   //最大数据包8字节 bit0-10决定,bit11-12每个微帧传输几个事务:00(1个),01(2个),10(3个),11保留
0x08,0x00, //主机和设备通讯时间多个时间单位,低速和全速单位是1ms,高速单位是1us,这里1ms*10
0x0A, 

主要描述符

设备描述符,配置描述符,接口描述符,hid类(其他类)描述符,端点描述符
需要注意的:主机请求描述符时,上传的描述符分为两大部分设备描述符配置描述符集合(包含除设备描述符外的所有描述符)。虽然可以有多个配置描述符,但在某一时刻,设备起作用的只能是某一种描述符

参考

usb中的标准请求,而描述符就是其中的GET_DESCRIPTION命令

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

获取设备描述符

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

HID类中的命令,参考hid手册

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

uniapp中@click或者@tap多层嵌套的问题解决方法

我们在开发页面的过程中。例如要设计一个九宫格的相册,并且加上删除上传图片和点击图片后预览图片大图的功能例如下图的演示功能。 点击图片后显示大图预览图片,点击x号后要删除掉当前的图片,那么我们设计的时候如果我们代码写成如下的格式 …

【C语言】栈的实现(数据结构)

前言: 还是举一个生活中的例子,大家都玩过积木,当我们把积木叠起来的时候,如果要拿到最底部的积木,我们必须从顶端一个一个打出,最后才能拿到底部的积木,也就是后进先出(先进后出&a…

硬件厂家行业进销存系统开发之门票预约,源码解析css样式

采用技术未来之窗web行业应用弹窗对话框artDialog 未来之窗web行业应用弹窗对话框artDialog: 网页弹窗,独立使用单文件版本,可指定位置,左上,左下,中间,右侧,下册,左侧,…

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧,重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧&#xf…

做一个能和你互动玩耍的智能机器人之一

2024年被很多人称为AI元年,其实AI元年的叫法由来以久,近年来每一次AI技术的进步,都有很多圈内人大呼AI元年,但不仅一直风声不大,雨点也偏小,都是小范围交流。 得益于软硬件的进步,AI今年开始侵…

深度学习系列70:模型部署torchserve

1. 流程说明 ts文件夹下, 从launcher.py进入,执行jar文件。 入口为model_server.py的start()函数。内容包含: 读取args,创建pid文件 找到java,启动model-server.jar程序,同时读取log-config文件&#xff…

数据库表结构创建

一、原型图 二、分析 1、天气,值字段只有实测值,可用一个字段表示(单位、来源同上) 2、气温有默认值与实测值两个选项,一个字段无法表示默认值与实测值(单位,来源同上) 3、因为有…

【Kettle实现神通(数据库)MPP增量、全量数据ETL,同步任务Linux运行(通用)】

1、背景介绍 具体Kettle操作步骤不做过多介绍,主要技术方案说明,Kettle8.2版本放在底部链接提取,本次采用Kettle实现源端:神通数据通用库、目标端:神通MPP增量数据同步,并在服务器端运行Job。 2、windows…

【AIGC】构建自己的谷歌搜索引擎服务并使用

一、谷歌 谷歌的搜索引擎需要自己创建服务才能启用检索api。(需自行翻墙和创建自己的谷歌账号) 1.1 API服务创建 1)登陆https://console.cloud.google.com/: 2) 选择新建项目,取号项目名即可(比如:Olin…

在 Windows 搭建 flink 运行环境并模拟流数据处理

一、引入 在大数据场景中,开发者追求高效与灵活,Linux 系统以其稳定性成为众多组件的首选,但在资源有限的情况下,在本机搭建一个 Linux 虚拟机集群却显得过于笨重,启动、运行占资源,需要配置网络,无法和windows共享资源,尤其是对只有 8GB 内存的 Windows 系统用户来说…

钙成像数据建模为行为事件

摘要 我在触摸屏盒中记录了小鼠在进行行为学习任务时的钙映像数据。 我想找到一种方法来整合神经数据(100 个个体细胞随时间的活动(约 30,000 x 约 30 毫秒时间段))和行为数据(动物在行为任务期间做出的时间戳动作和决…

电脑如何进行录屏?电脑录屏无压力!

在数字时代,屏幕录制已成为我们日常生活和工作中不可或缺的一部分。无论你是想要制作教程、记录游戏过程,还是捕捉在线会议的精彩瞬间,掌握屏幕录制的方法都显得尤为重要。本文将为你详细介绍电脑如何进行录屏,帮助你轻松捕捉屏幕…

MySql 触发器、存储器练习

一: 触发器 1、建立两个表:goods(商品表)、orders(订单表) 查看数据库:mysql> show databases; 使用数据库:mysql> use mydb16_trigger; 创建goods表: mysql> create table goods(gid char(8) not null primary key, …

免费【2024】springboot 畅游游戏销售平台

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

AnyMP4 Data Recovery for Mac v1.5.8免激活版:高效数据恢复新选择

AnyMP4 Data Recovery for Mac是一款专为Mac用户设计的高效数据恢复软件,凭借其强大的功能和简洁的操作界面,为用户提供了快速、安全的数据恢复体验。 该软件支持恢复多种文件类型,包括照片、视频、音频、文档等,无论是常见的图片…

pytorch-梯度下降

梯度下降 y x 2 ∗ s i n ( x ) y ′ 2 x s i n x x 2 c o s x x 1 x − Δ y ′ ( x ) 其中 Δ 表示学习率, y ′ ( x ) 代表 y 在 x 点处关于 x 的梯度。 y x^2 * sin(x) \\ y 2xsinxx^2cosx \\ x_1 x - \Delta y(x) \\ 其中 \Delta 表示学习率&#xff0c…

python机器学习8--自然语言处理(2)

1.移除用词 在很多情况下,有一些文章内的英文字符、标点符号分词的结果不符合自己的预期,会出现一些不想要的分词,此时就能通过以下的函数自己设定用词,并且删除。 jieba.analyse.set_stop_words("stop_words.tx…

uniapp引入自定义图标

目录 一、选择图标,加入购物车 二、下载到本地 三、导入项目 四、修改字体引用路径 五、开始使用 这里以扩展iconfont图标为例 官网:iconfont-阿里巴巴矢量图标库 一、选择图标,加入购物车 二、下载到本地 直接点击下载素材&#xff0…

地球的2亿年轮回:彗星雨下的地质巨变与未来展望

在浩瀚的宇宙中,地球正悄然经历着一次巨大的轮回。你是否曾想过,地球为何拥有如此活跃的板块构造和与众不同的大陆?科学家们发现,每隔大约2亿年,地球便会遭遇一场彗星雨,这场彗星淋浴不仅改变了地球的面貌&…

【TAROT学习日记】韦特体系塔罗牌学习(8)——战车 THE CHARIOT VII

韦特体系塔罗牌学习(8)——战车 THE CHARIOT VII 目录 韦特体系塔罗牌学习(8)——战车 THE CHARIOT VII牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际财富5. 其他象征意 逆位牌意1. 关键词/句…