USB协议详解第3讲(USB描述符-设备描述符)

news/2024/9/22 9:53:16/文章来源:https://www.cnblogs.com/linhaostudy/p/18353120

我们第一个学习要点就是USB描述符,所谓描述符其实就是C语言里面的结构体或者数组,数组包含的信息说明当前的设备具有哪些特征。USB描述符有设备描述符配置描述符接口描述符端点描述符字符串描述符,HID设备有HID描述符报告描述符物理描述符。我们先学会每个描述符的细节,我会写的非常详细且简洁,后面在学习USB枚举的时候会通过抓包和波形来学习每一个描述符在总线上的作用,并且会介绍每一个描述符是在什么时候以哪种方式在总线上进行传输的,今天主要是学习USB设备描述符的组成。

设备描述符是USB主机枚举USB设备申请的第1个描述符,每个设备有且仅有一个设备描述符,也就是大家以后看到的任何的USB设备都只有一个设备描述符数组,设备描述符的长度是18字节,下面我们来学习设备描述符数据结构,看看USB设备具有哪些特征,它的结构我们可以通过下面的表格来逐一了解。

STM32 设备描述符代码实现如下:

	#define 	USB_DEVICE_DESCRIPTOR_TYPE              	0x01		// 设备描述符类别#define 	USB_OTG_MAX_EP0_SIZE                 		64			// 端点0支持的最大包长#define 	USBD_VID                        			0x0483		// 厂商ID		#define 	USBD_PID                       		 		0xDF11		// 产品ID#define  	USBD_IDX_MFC_STR                            0x01 		// 厂商字符串的索引#define  	USBD_IDX_PRODUCT_STR                        0x02		// 产品字符串的索引#define  	USBD_IDX_SERIAL_STR                         0x03		// 产品序列号字符串的索引#define 	USBD_CFG_MAX_NUM                			1 			// 设备的配置数	/* USB Standard Device Descriptor */uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] ={0x12,                       /*bLength */USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/0x00,                       /*bcdUSB */0x02,0x00,                       /*bDeviceClass*/0x00,                       /*bDeviceSubClass*/0x00,                       /*bDeviceProtocol*/USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/LOBYTE(USBD_VID),           /*idVendor low*/HIBYTE(USBD_VID),           /*idVendor high*/LOBYTE(USBD_PID),           /*idVendor low*/HIBYTE(USBD_PID),           /*idVendor high*/0x00,                       /*bcdDevice rel. 2.00*/0x02,USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/USBD_IDX_PRODUCT_STR,       /*Index of product string*/USBD_IDX_SERIAL_STR,        /*Index of serial number string*/USBD_CFG_MAX_NUM            /*bNumConfigurations*/} ; /* USB_DeviceDescriptor */

下面来介绍设备描述符每一个内容的详细含义(所有的描述符都是小端格式,先低后高)

(1)bLength

描述符长度(18字节,十六进制为0x12),就是标志描述符数据结构的长度。

(2)bDescriptorType

bDescriptorType代表了本描述符的类型,设备描述符为0x01。所有的描述符类型表示如下图,大家以后也可以速查:

(3)bcdUSB

USB协议版本,表示形式0xJJMN版本JJ.M.N(JJ - 主要版本号,M - 次要版本号,N - 次要版本)

例子:如果是USB2.0,写成:0200H;如果是USB1.1,写成:0110H 如果是USB3.11,写成:0311H

(4)bDeviceClass、bDeviceSubClass、bDeviceProtocol

bDeviceClass、bDeviceSubClass、bDeviceProtocol分别代表设备类型,子类型,设备使用的协议,USB-IF区分设备类分了三个等级(类-子类-协议码)其中,类包含人机交互类、图像类、无线类、音频类等等,子类比如音频类的音频控制、音频流等等,协议比如人机接口类中的鼠标、键盘、触摸屏等,为何会有这么多USB的Class分类,子分类,设备协议。我们要知道,USB协议设计的目的,就是为实现通用,用单一的USB接口取代之前种类繁多的各种其他接口。而为了取代其他各种接口,那意味着就要实现各种设备所对应的各种功能。如下图显示USB设备的各种类别,USB设备类信息更详细内容可进入https://www.usb.org/defined-class-codes查看。

(5)bMaxPackeSize0

就是端点一次最大传多少个字节。USB协议里有规定,端点0最低8字节,端点的最大传输大小和USB速度等级以及传输类型有关,控制传输一般使用端点0,低速最大8字节,全速和高速最大传输64字节,如下图:

(6)idVender

厂商ID,就是个2字节的编号,由USB协议分配,厂商申请时需要交费。自己随便写的话,仅限于学习、测试的情况下,不能用做产品。

(7)idProduct

产品ID,厂家自己随便定义。

(8)bcdDevice

产品版本号,厂家自己随便定义。

(9)iManufacturer

描述厂商的字符串的索引,为0则表示没有,后面详细讲解。

(10)iProduct

描述产品的字符串的索引,为0则表示没有,后面详细讲解。

(11)iSerialNumber

产品序列号字符串的索引,为0则表示没有,后面详细讲解。

(12)bNumConfigurations

指示设备由多少个配置,前面提到过,一个USB可能有多个配置,一般USB产品都是1个配置。

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

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

相关文章

Windows如何保证所有软件在D(其他)盘

Windows如何保证所有软件在D(其他)盘首先使用你电脑有两个固态硬盘就是盘符自己分区也可以 C盘我们只用于电脑的系统资源管理其他所有数据包括默认安装的文件都在D盘或者自定义的盘 win+R 输入 regedit 进入注册表根据下面路径依次点开,找到CurrentVersion,或者复制路径,粘贴…

【笔记】【THM】Malware Analysis(恶意软件分析)

二进制安全入坟【笔记】【THM】Malware Analysis(恶意软件分析) 探索恶意软件的世界,分析恶意软件如何感染系统并造成破坏。 恶意软件分析就像猫捉老鼠的游戏。恶意软件的作者一直在设计新的技术来躲避恶意软件分析师的眼睛,而恶意软件分析师也一直在寻找识别和抵消这些技术…

《逆行人生》电影迅雷下载3.69GB/MP4(百度云磁力资源共享)HD高清版

在光怪陆离的电影世界里,总有一些作品能够触动人心,让人在欢笑与泪水中重新审视生活的意义。《逆行人生》就是这样一部电影,它不仅仅是一部简单的现实题材作品,更是一次对人性光辉和社会现实的深刻探讨。由徐峥执导并主演,这部电影汇聚了冯兵、贾冰、王骁、丁勇岱等众多实…

[图文直播]Windows操作系统部署Jenkins

前言 首先说明一下我为什么选择在Windows操作系统上部署Jenkins是吧,主要基于虽然从长远上看,我是有进行跨平台开发的需求,但至少在可预见的三到五年时间内,我的潜在客户也都是在windows操作系统上。至于跨平台,规划上要有,但正如天龙八部里天龙寺内面对鸠摩智打算拿拈花…

C# 打包

目前打包比较好用的版本是 Advanced_Installer_v16.9.0_Chs .net 4.62 安装的命令行参数 /passive /norestart 安装后启动配置

时间序列分析

平稳性检验 时序图 自相关系数图 纯随机性检验方法性工具 差分运算延迟算子线性差分方程AR模型

Cisco Firepower 4100 Series FTD Software 7.4.2 ASA Software 9.20.3 发布下载 - 思科防火墙系统软件

Cisco Firepower 4100 Series FTD Software 7.4.2 & ASA Software 9.20.3 发布下载 - 思科防火墙系统软件Cisco Firepower 4100 Series FTD Software 7.4.2 & ASA Software 9.20.3 发布下载 - 思科防火墙系统软件 Firepower Threat Defense (FTD) Software 请访问原文链…

Cisco Firepower 2100 Series FTD Software 7.4.2 ASA Software 9.20.3 发布下载 - 思科防火墙系统软件

Cisco Firepower 2100 Series FTD Software 7.4.2 & ASA Software 9.20.3 发布下载 - 思科防火墙系统软件Cisco Firepower 2100 Series FTD Software 7.4.2 & ASA Software 9.20.3 发布下载 - 思科防火墙系统软件 Firepower Threat Defense (FTD) Software 请访问原文链…

进度报告11

(1)1.方法重写2.多态 3.抽象类

工作流之Flowable与SpringBoot结合

目录1 Flowable1.1 flowable-ui部署运行1.2 绘制流程图1.2.1 绘制1.2.2 绘图细节1.2.3 bpmn文件导入1.3 后台项目搭建1.3.1 pom.xml1.3.2 数据库表说明1.4 流程引擎API与服务1.4.1 主要API1.4.2 示例 1 Flowable 1.1 flowable-ui部署运行 flowable-6.6.0 运行 官方demo 参考文档…

Docker简单使用MySQL

前提 安装好Docker 下载Mysql镜像 在这个网址搜索Mysql并选择合适的镜像 https://hub.atomgit.com/详情页就有拉取镜像的命令查看Docker所有镜像 ​ docker images镜像重命名 ​ docker tag 镜像id 仓库:标签 ​ docker tag 8a709252ac32 mysql:5.7 镜像启动(容器) docker ru…

上云避坑指南

云计算的本质就俩词:共享、服务。上云的目的是为了让自己聚焦于业务我在之前的文章《云计算-虚拟化-OpenStack》里聊过,云计算的本质是一种IT资源通过虚拟化进行的共享,是一种更高维度的服务。云计算的本质就俩词:共享、服务。 1、建议企业上云 作为一个IT行业14余年的老杆…