USB学习(3):USB描述符和USB类设备

news2024/9/24 0:50:00

文章目录

  • 1 USB描述符(Descriptors)
    • 1.1 设备描述符(Device Descriptor)
    • 1.2 配置描述符(Configuration Descriptor)
    • 1.3 接口关联描述符(Interface Association Descriptor)
    • 1.4 接口描述符(Interface Descriptor)
    • 1.5 端点描述符(Endpoint Descriptor)
    • 1.6 字符串描述符(String Descriptor)
    • 1.7 其他描述符类型
    • 1.8 使用多个USB描述符
  • 2 USB类设备(Class Devices)

1 USB描述符(Descriptors)

当设备连接到USB主机时,该设备会向主机提供有关其功能和电压的信息。通常,设备通过一个描述符表提供这些信息。描述符表的值由开发人员定义,但所有描述符表都具有一组标准信息,用于描述设备属性和电压信息。比如,USB设备类(USB device class)的规范规定:必须在设备描述符结构中包括该类必要的附加描述符信息。

  • 设备描述符是先传输LSB,再传输MSB的

下图为有两个配置描述符的USB描述符树:
在这里插入图片描述

1.1 设备描述符(Device Descriptor)

设备描述符提供给主机一些信息,如设备符合的USB规范、设备支持的配置数量、支持的协议、制造商标识(VID)、产品标识(PID),以及序列号(如果有的话)。下表展示了设备描述符的结构:

偏移大小(Bytes)描述
0bLength1设备描述符的长度(字节为单位)
1bDescriptorType1描述符的类型
2bcdUSB2设备支持的USB版本(使用BCD码表示),如USB2.0为0x0200
4bDeviceClass1设备的类
5bDeviceSubClass1设备的子类
6bDeviceProtocol1设备协议
7bMaxPacketSize01端点0的最大包长度(8/16/32/64 Bytes)
8idVendor2制造商ID
10idProduct2产品ID
12bcdDevice2设备版本号(以BCD码描述)
14iManufacturer1制造商信息在USB描述符中的索引,不存在应置0
15iProduct1产品信息在USB描述符中的索引,不存在应置0
16iSerialNumber1序列号在USB描述符中的索引,不存在应置0
17bNumConfigurations1设备可以支持的总配置数
  • bDeviceClass,bDeviceSubClassbDeviceProtocol:这些字段在USB设备枚举(插入并检测设备)过程中协助操作系统正确识别设备并加载适当的驱动程序。此外,它们还有助于避免不同接口(例如复合设备,一个物理设备包含多个逻辑设备)独立运作,确保设备的不同部分协同工作。大多数USB设备会在接口描述符中更详细地定义其类别,因此设备描述符中的这些字段通常为0x00,具体信息在接口描述符中提供。

1.2 配置描述符(Configuration Descriptor)

该描述符提供了有关特定设备配置的信息,例如接口数量、设备是否由总线供电或自供电、设备是否可以启动远程唤醒以及设备需要多少功率。下标为配置描述符的结构。

偏移大小(Bytes)描述
0bLength1设备描述符的长度(字节为单位)
1bDescriptorType1描述符的类型
2wTotalLength2配置描述符的接口和端点描述符的总长度
4bNumInterfaces1配置中的接口总数
5bConfigurationValue1配置值(给SET_CONFIGURATION使用的来选择此配置的值)
6iConfiguration1描述此配置的字符串的索引
7bmAttributes1Bit7:保留(默认为1)
Bit6:0-总线供电 1-自供电
Bit5:0-支持远程唤醒 1-不支持远程唤醒
8bMaxPower1设备全速运行时消耗的最大功率(2mA为单位)

1.3 接口关联描述符(Interface Association Descriptor)

这个描述符描述了与单个设备功能相关联的两个或多个接口。接口关联描述符通知主机这些接口是连接在一起的。例如,USB串口有两个与之相关联的接口:一个控制接口和一个数据接口。该描述符告诉主机这两个接口属于同一个功能,并属于通信设备类(CDC)。并非在所有情况下都需要此描述符。下图显示了单个接口与单个设备功能的一一对应的关系,这种情况使用接口描述符就行(1.4介绍):
在这里插入图片描述
下显示了两个独立的接口与特定设备功能相关联的情况,这种情况需要使用接口关联描述符:
在这里插入图片描述
下表为接口关联描述符的组成:

偏移大小(Bytes)描述
0bLength1设备描述符的长度(字节为单位)
1bDescriptorType1描述符的类型
2bFirstInterface1与该功能相关联的第一个接口的编号
3bInterfaceCount1与该功能相关联的连续接口的数量(即第一个开始数后面连续多少个)
4bFunctionClass1类别码
5bFunctionSubClass1子类码
6bFunctionProtocol1协议码
7iFunction1该功能的字符串描述符索引

1.4 接口描述符(Interface Descriptor)

接口描述符描述了配置中的特定接口,此描述符中确定了接口的端点数量,声明了设备的USB类,供主机加载适合适驱动程序。

偏移大小(Bytes)描述
0bLength1设备描述符的长度(字节为单位)
1bDescriptorType1描述符的类型
2bInterfaceNumber1该接口在特定USB配置中的索引
3bAlternateSetting1描述接口的不同配置或操作模式(可理解为功能复用)
4bNumEndpoints1此接口使用的端点数量(不包括端口0)
5bInterfaceClass1接口类
6bInterfaceSubclass1接口子类
7bInterfaceProtocol1接口协议
8iInterface1描述此接口的字符串索引

1.5 端点描述符(Endpoint Descriptor)

设备中使用的每个端点都有自己的描述符。这个描述符提供了主机必须具备的有关端点的信息,包括端点的方向、传输类型和最大数据包大小。如下图所示:

偏移大小(Bytes)描述
0bLength1设备描述符的长度(字节为单位)
1bDescriptorType1描述符的类型
2bEndpointAddress1bit[3:0]:端点号
bit[6:4]:保留,默认为0
bit[7]:方向,0-out 1-IN,控制端点将忽略此字段
3bmAttributes1bit[1:0]:传输类型,00-控制,01-等时,10-批量,11-中断
如果是等时端点,bit[5:2]的定义如下(若不是下面字段则忽略):
bit[3:2]:同步类型,00-不同步,01-异步,10-自适应,11-同步
bit[5:4]:使用类型,00-数据端点,01-反馈端点,10-隐式反馈数据端点,11-保留
4wMaxPacketSize2该端点的最大数据包大小
6bInterval1中断端点的轮询间隔,以毫秒为单位(等时端点为1,控制或批量端点则该字段忽略)

1.6 字符串描述符(String Descriptor)

字符串描述符是可选描述符,用于提供有关设备的用户可读信息。描述符中可能包含设备的名称、制造商、序列号,以及各个接口或配置的名称等信息。如果设备未使用字符串,前面提到的描述符中的任何字符串索引字段必须设置为00h。

这些字符串是使用UNICODE UTF16LE编码定义的,可以支持多种语言(每个语言有一个语言标识码)。在Windows系统中,这些字符串可以在设备管理器中查看。下表展示了字符串描述符的结构。

偏移大小(Bytes)描述
0bLength1设备描述符的长度(字节为单位)
1bDescriptorType1描述符的类型
2…nbString/wLangID不定unicode编码的字符串或语言标识码

字符串描述符有两种可能的形式。第一个字符串描述符包含语言ID的值,即wLangID,其中包含一个或多个两字节的ID代码,指示字符串所用的语言。USB-IF提供了定义许多不同ID代码的文档。例如,美国英语的ID代码是0409h。wLangID之后的所有字符串描述符都使用bString字段,它是一个包含Unicode字符串(UTF16LE)的字符串字段,每个字符使用2个字节表示。

1.7 其他描述符类型

1、报告描述符(Report Descriptors):USB设备类可能需要扩展的描述符信息。开发者必须确保USB设备类所需的任何额外描述符信息包含在描述符文件中。例如,对于HID类,开发者必须包括进一步定义设备属性的报告描述符。

  • 具体参考<AN57473 - USB HID Basics with PSoC® 3 and PSoC 5LP>和<AN58726 - USB HID Intermediate with PSoC® 3 and PSoC 5LP>

2、MS OS描述符(MS OS Descriptor):微软有一个名为Microsoft OS Feature Descriptor的描述符,用于供应商特定的设备。该描述符提供了与Microsoft Windows有关的特定信息,如特殊图标、注册表设置、帮助文件和URL。

3、设备限定符描述符(Device Qualifier Descriptor):它描述了高速USB设备的信息,如果设备以另一速度运行,该描述符将发生更改,这在支持两种速度配置的设备中是必需的。如果设备当前以全速运行,这个描述符将提供关于设备在高速模式下可能运行的方式或特性的信息。同样,如果在设备以高速运行时请求此描述符,描述符读取将告诉主机有关全速配置的信息。如果请求此描述符并且设备仅支持全速,适当的操作是返回STALL。否则,将根据请求提供描述符信息。

4、BOS描述符(BOS Descriptor):在支持链接电源管理(Link Power Management)的USB 2.0设备中,还有一个二进制设备对象存储(Binary device Object Store,BOS)描述符。只有支持LPM功能的PSoC设备家族中的PSoC 4200L设备支持BOS描述符。LPM是USB暂停模式的改进,允许设备以微秒级的转换延迟进入和退出低功耗模式,而不是与暂停模式进入/退出相关的3-20毫秒的延迟。

1.8 使用多个USB描述符

USB设备只有一个设备描述符。然而,一个设备可以拥有多个配置、接口、端点和字符串描述符。当一个设备进行枚举时,最后的阶段之一是读取设备描述符并决定启用哪个设备配置。一次只能启用一个配置。例如,一个设计中可以有一个在设备自供电时使用的配置,以及一个在设备由外部总线供电时使用的配置。自供电设备和总线供电设备的整体USB功能可能不同,多个配置和多个配置描述符就能实现这种切换。

同时,一个设备可以拥有多个接口,因此也有多个接口描述符。一个拥有多个执行不同功能的接口的USB设备被称为复合设备(composite device)。比如在USB耳机中,USB设备拥有两个接口:一个用于耳机的音频功能,另一个用于音量调节的控制。多个接口可以同时处于活动状态。下图显示了在单个USB设备但有两个接口的情况:
在这里插入图片描述
每个接口可以拥有多个配置,这些多个配置称为备用设置(alternate settings)。例如,在一个备用设置中,设备的端点可以配置为批量(bulk),而在另一个备用设置中,端点可以配置为等时(Isochronous)。如下图所示:
在这里插入图片描述
下图显示了用于创建高度可定制的USB设备的定制选项的总体示意图,以适应各种配置选项
在这里插入图片描述

2 USB类设备(Class Devices)

USB开发者论坛有一个被承认和批准的USB设备类列表。最常见的设备类包括:

  • 人机接口设备(Human Interface Device,HID)
  • 大容量存储设备(Mass Storage Device,MSD)
  • 通信设备类(Communication Device Class,CDC)
  • 厂商(Vendor Specific,特定尝试开发的USB类)

在开发特定类的应用程序时,需要考虑几个因素。首先,每个类都有固定的最大带宽。其次,每个类别都有对支持的传输类型和必须支持的特定命令的限制。使用这些被承认的USB设备类别的最大优势是在各种操作系统上实现跨平台支持。

在上一节的USB描述符部分,USB设备类的定义在:设备描述符的第四个字节和接口描述符的第六个字节。USB规范定义了许多不同的USB类以及与之相关的设备类代码,如下表所示:

类代码用途(即类信息的使用范围)描述例子
00h设备未定当设备类别未指定时,接口描述符用于确定所需的驱动程序
01h接口音频扬声器、麦克风、声卡、MIDI
02h设备/接口通信和CDC控制调制解调器、以太网适配器、Wi-Fi适配器
03h接口HID(Human Interface Device)键盘、鼠标、摇杆
05h接口PID(Physical Interface Device)力反馈操纵杆
06h接口图像摄像机、扫描仪
07h接口打印打印机、计算机数控机器
08h接口大容量存储外部硬盘、闪存驱动器、存储卡
09h设备USB集线器USB集线器
0Ah接口CDC数据与上面的02h类一起使用
0Bh接口智能卡USB智能卡读取器
0Dh接口信息安全指纹读取器
0Eh接口视频网络摄像头
0Fh接口个人健康护理心跳监测器、血糖仪
DCh设备/接口诊断设备测试USB设备是否符合USB标准/规范的设备
E0h接口无线控制器蓝牙适配器
EFh设备/接口杂项如微软的ActiveSync :同步手机和电脑数据的APP
FEh接口应用特定的红外桥接器、测试与测量类,USB DFU(直接固件更新,即通过USB升级固件)
FFh设备/接口供应商特定的表示一个设备需要供应商特定的驱动

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

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

相关文章

CS224W2.1——传统基于特征的方法(节点层级特征)

CS224W1.1——图机器学习介绍CS224W1.2——图机器学习应用CS224W1.3——图表示的选择 前面几篇介绍了图机器学习的基础一些背景知识&#xff0c;我们知道图机器学习任务分为多个层级&#xff1a; 节点层级任务边层级任务子图层级任务图层级任务 这篇主要讲传统的基于特征方法…

基于MFC的串口通信

1、串口通信的概述&#xff1a; 串口是一种重要的通信资源&#xff0c;例如鼠标口、USB接口都是串口。串行端口是CPU和串行设备间的编码转换器。当数据从CPU经过端口发送出去的时候&#xff0c;字节数据会被转为串行的位&#xff0c;在接收数据时&#xff0c;串行的位被转换为…

无线WIFI接入FreeRadius进行认证——筑梦之路

环境说明 硬件设备&#xff1a; ASUS RT-AC88U路由器 服务器系统&#xff1a;Ubuntu 16.04 软件版本&#xff1a;FreeRADIUS 2.2.8 服务安装搭建 1. 安装freeradius apt-get install freeradius freeradius-mysql 2. 配置用户 vim /etc/freeradius/userssteve Cleart…

数据结构绪论,基本概念

目录 1.什么是数据结构&#xff1f; 2.三种数据结构&#xff1a; 3.第一章绪论 了解概念 1.几个概念 2.数据存储方式&#xff1a; 3.算法的五个重要特性: 4.算法设计的要求: 1.什么是数据结构&#xff1f; 数据 数据&#xff0c;是对客观事物的符号表示&#xff0c;在计…

操作系统——内存扩容:覆盖技术、交换技术(王道视频p44)

1.对于覆盖技术 和 交换技术&#xff1a;&#xff08;并不是重点&#xff09;

LaTeX:在标题section中添加脚注footnote

命令讲解 先导包&#xff1a; \usepackage{footmisc} 设原标题为&#xff1a; \section{标题内容} 更改为&#xff1a; \section[标题内容]{标题内容\protect\footnote{脚注内容}} 语法讲解&#xff1a; \section[]{} []内为短标题&#xff0c;作为目录和页眉中的标题。…

redis6.0源码分析:字典扩容与渐进式rehash

文章目录 字典数据结构结构设计dictType字典类型为什么字典有两个哈希表&#xff1f;哈希算法 扩容机制扩容前置知识字典存在几种状态&#xff1f;容量相关的关键字段定义字典的容量都是2的幂次方 扩容机制字典什么时候会扩容&#xff1f;扩容的阈值 & 扩容的倍数哪些方法会…

Android平台GB28181执法记录仪技术方案

技术背景 我们在做Android平台GB28181设备接入模块的时候&#xff0c;对接过好多开发者&#xff0c;他们都是用于执法记录仪场景&#xff0c;执法记录仪是一种便携式设备&#xff0c;用于记录执法人员的行动和接触情况&#xff0c;通过实时回传音视频数据和实时位置信息给指挥…

2023 MathorCup(妈妈杯) 数学建模挑战赛B题完整解题思路+模型+代码

2023妈妈杯数学建模B题完整版思路、模型代码已出&#xff01;&#xff01;&#xff01; 云顶数模最新完整版解题思路、模型代码&#xff0c;供大家参考~~ B题目 解题思路 详细模型解析&#xff1a;

RGB-T Salient Object Detection via Fusing Multi-Level CNN Features

ADFC means ‘adjacent-depth feature combination’&#xff0c;MGF means ‘multi-branch group fusion’&#xff0c;JCSA means ‘joint channel-spatial attention’&#xff0c;JABMP means ‘joint attention guided bi-directional message passing’ 作者未提供代…

Sprint Cloud Stream整合RocketMq和websocket实现消息发布订阅

1.引入RocketMQ依赖&#xff1a;首先&#xff0c;在pom.xml文件中添加RocketMQ的依赖&#xff1a; <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.0</versi…

JVM虚拟机:运行时数据区详解

本文重点 我们前面已经将类的加载过程进行了全面的了解和学习,按照如下所示的JVM架架构图,接下来我们应该学习运行时数据区了。 运行时数据区 如上图所示,灰色的标识线程私有,基本不存在垃圾回收。而非灰色的是线程共享的,存在垃圾回收。 PC计数器 每个线程都有一个程序…

【java】建筑施工一体化智慧工地信息管理系统源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面&#xff0c;多维度数…

简化geojson策略

1、删除无用的属性&#xff0c;也就是字段&#xff0c;在shp的时候就给删了 用arcgis等等软件都可以做到 2、简化坐标的小数位数 &#xff08;1&#xff09;网上推荐的办法&#xff0c;俺不会Python… github.com/perrygeo/geojson-precision &#xff08;2&#xff09;曲线…

【C++项目】高并发内存池第五讲内存回收释放过程介绍

内存回收 1.ThreadCache2.CentralCache3.PageCache 1.ThreadCache void ThreadCache::Deallocate(void* ptr, size_t size) {assert(ptr);assert(size < MAX_BYTES);//计算在哪号桶中&#xff0c;然后插入进去size_t index SizeClass::Index(size);_freeLists[index].Push…

HCIP笔记——数据链路层协议

网络类型 根据二层&#xff08;数据链路层&#xff09;所使用的协议来进行区分。 MA——多点接入网络 BMA——广播型多点接入网络——以太网 NBMA——非广播型多点接入网络 P2P——点到点的网络 以太网协议 MAC地址——区分和标识不同的设备 以太网中独有的一种地址——MAC地址…

基于华为云 IoT 物联网平台实现家居环境实时监控

01 智能家居环境监测 智能家居环境监测采用 Ruff 开发板作为主控&#xff0c;串口线连接温湿度传感器 DHT11 和空气质量传感器 SDS011&#xff0c;每5分钟采集一次数据&#xff0c;通过 MQTT 协议发送到华为云 IoT 物联网平台&#xff0c;并基于数据分析服务实时计算出整个家庭…

大数据Doris(十三):创建用户和创建数据库并赋予权限

文章目录 创建用户和创建数据库并赋予权限 一、创建用户

Python算法练习 10.28

leetcode 700 二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,…

springboot web项目中 Set-Cookie 失败 办法

1. 背景 目前有个项目 线上环境 使用spring session管理的登录 项目中有两个接口 一个用来登录的 登录成功后会设置cookie 后续请求就会使用该cookie &#xff08;cookie的键值就是session Id 和 登录后的信息 例如菜单&#xff0c;权限等&#xff09; 一个用来检查是否登录…