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

文章目录

  • 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.mzph.cn/news/121440.shtml

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

相关文章

极米科技H6 Pro 4K、H6 4K高亮定焦版——开启家用投影4K普及时代

智能投影产业经过几年发展&#xff0c;市场规模正在快速扩大。洛图数据显示&#xff0c;预计今年中国投影出货量有望超700万台&#xff0c;2027年达950万台&#xff0c;可见智能投影产业规模将逐渐壮大&#xff0c;未来可期。2023年&#xff0c;投影行业呈现出全新面貌&#xf…

【观察】Dell APEX云平台:引领多云时代上云新范式

毫无疑问&#xff0c;过去十多年是云计算发展的黄金十年&#xff0c;云计算理念不断被市场所接受&#xff0c;但随着企业上云深入和认知度的不断增加&#xff0c;摆在很多企业面前的选择题也发生了新变化&#xff0c;即从过去企业上云或不上云的纠结&#xff0c;转变成今天如何…

文件混淆-界面介绍

目录 文件混淆-界面介绍 顶部介绍 中间文件列表区介绍 底部功能介绍 介绍文件混淆界面功能选项和操作流程 文件混淆-界面介绍 文件混淆功能区域包括3个功能区&#xff1a;顶部显示过滤区、中间文件列表区、底部的是否混淆开关 顶部介绍 显示控制区域&#xff0c;这个区…

【漏洞复现】酒店宽带运营系统RCE

漏洞描述 安美数字 酒店宽带运营系统 server_ping.php 远程命令执行漏洞 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff…

一文了解GC垃圾回收

一文了解GC垃圾回收 1 判断一个对象为垃圾对象的方法 引用计数法(弃用) 可达性分析算法 是否有指向GC root 的引用链&#xff0c;如果有&#xff0c;不是垃圾对象 ---->GC roo:即rt.jar包中内容 2 内存泄漏与内存溢出区别 泄漏&#xff1a;原本需要被回收的对象&#…

C++系列之list的模拟实现

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; list的节点类 template struct list_Node { public: list_Node* _prev; list_…

关于本地项目上传到gitee的详细流程

如何上传本地项目到Gitee的流程&#xff1a; 1.Gitee创建项目 2. 进入所在文件夹&#xff0c;右键点击Git Bash Here 3.配置用户名和邮箱 在gitee的官网找到命令&#xff0c;注意这里的用户名和邮箱一定要和你本地的Git相匹配&#xff0c;否则会出现问题。 解决方法如下&…

linux上java -jar方式运行项目及输出文件nohup.out的清理, linux上定时器的用法

linux上java -jar方式运行项目及输出文件nohup.out的清理&#xff0c; linux上定时器的用法 linux上java -jar方式运行定期自动清理nohup.out文件的内容**验证**定时器crontab使用时注意事项 linux上java -jar方式运行 参考&#xff1a;https://blog.csdn.net/qq_42169450/arti…

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

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

开启CETOS 裸奔了一年的服务器开启firewall防火墙

记录一下关于firewall&#xff0c;博主非运维专家或服务器专家。 背景 客户有一台裸奔运行了一年多的系统有公网但发现没有开防火墙&#xff0c;iptables和firewall均是关闭状态&#xff0c;通过扫描发现很多漏洞。根据客户要求对端口进行重新梳理且关闭不必要或有潜在风险的…

ubuntu安装nps客户端

Ubuntu安装nps客户端 1.什么是nps内网穿透&#xff1f;2.设备情况3.下载客户端3.链接服务端3.1、无配置文件模式3.2、注册到系统服务(启动启动、监控进程) 1.什么是nps内网穿透&#xff1f; nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发…

云端代码编辑器Atheos

什么是 Atheos &#xff1f; Atheos是一个基于 Web 的 IDE 框架&#xff0c;占用空间小且要求最低&#xff0c;构建于 Codiad 之上&#xff0c;不过 Atheos 已从原始 Codiad 项目完全重写&#xff0c;以利用更现代的工具、更简洁的代码和更广泛的功能。 注意事项 群晖内核版本太…

浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍

安科瑞虞佳豪 车桩比降低是完善新能源汽车行业配套的一大重要趋势&#xff0c;目前各国政府都在努力推进政策&#xff0c;通过税收减免、建设补贴等措施提升充电桩建设速度&#xff0c;以满足新能源汽车需求。 近年来&#xff0c;在需求和技术的驱动下&#xff0c;充电桩的平…

Mac怎么删除文件和软件?苹果电脑删除第三方软件方法

Mac删除程序这个话题为什么一直重复说或者太多人讨论呢&#xff1f;因为如果操作不当&#xff0c;可能会导致某些不好的影响。因为Mac电脑如果有太多无用的应用程序&#xff0c;很有可能会拖垮Mac系统的运行速度。或者如果因为删除不干净&#xff0c;导致残留文件积累在Mac电脑…

Jmeter的接口自动化测试

在去年实施了一年的三端&#xff08;PC、无线M站、无线APP【Android、IOS】&#xff09;后&#xff0c;今年7月份开始&#xff0c;我们开始进行接口自动化的实施&#xff0c;目前已完成了整个框架的搭建以及接口的持续测试集成。今天做个简单的分享。 在开始自动化投入前&#…

第14期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

vscode 保存 “index.tsx“失败: 权限不足。选择 “以超级用户身份重试“ 以超级用户身份重试。

vscode 保存 "index.tsx"失败: 权限不足。选择 “以超级用户身份重试” 以超级用户身份重试。 操作&#xff1a;mac在文件夹中创建文件&#xff0c;sudo 创建umiJs项目 解决&#xff1a;修改文件夹权限 右键文件夹

STM32F103单片机内部RTC实时时钟驱动程序

一、STM32f103系列RTC功能 RTC实时时钟功能是嵌入式软件开发中比较常用的功能&#xff0c;一般MCU的RTC功能都带有年月日时间寄存器&#xff0c;比如STM32F4xx系列&#xff0c;RTC描述如下&#xff1a; 可见F4系列的RTC功能比较强大&#xff0c;设置好初始时间后&#xff0c;读…

NodeJS爬取墨刀上的设计图片

背景 设计人员分享了一个墨刀的原型图&#xff0c;但是给的是只读权限&#xff0c;无法下载其中的素材&#xff1b;开发时想下载里面的一张动图&#xff0c;通过浏览器的F12工具在页面结构找到了图片地址。 但是浏览器直接访问后发现没权限&#xff1a; Nginx 的 403 页面。。…

批量编辑 Outlook 联系人

现状 Outlook 自带的联系人编辑功能无法快速、批量编辑联系人字段使用 Excel 等外部编辑器&#xff0c;可批量编辑联系人 导出联系人到文件 在【联系人】界面&#xff0c;点击【文件】在【文件】界面&#xff0c;点击【打开和导出】–>【导入/导出】在弹出的向导窗口中点…