windows USB设备驱动开发通用技术

通用串行总线 (USB) 设备通过配置、接口、备用设置和终结点来定义其功能和功能,下面提供这些概念的高级概述。

常见 USB 方案
获取用于通信的设备句柄 ,并使用检索到的句柄或对象发送数据传输。


USB 描述符检索 以获取有关设备配置的信息、接口、设置及其终结点。


配置设备 以选择活动的 USB 配置和每个接口的设置。

发送控制传输 ,以配置设备和执行特定于特定设备的供应商命令

发送批量传输,通常由传输大量数据的大容量存储设备使用。

发送中断传输。 读取数据以检索硬件中断数据。

发送流传输,主要用于媒体流式处理设备。

USB 选择性挂起 ,允许设备进入低功耗状态,并使设备恢复工作状态。

USB 设备布局


通用串行总线 (USB) 设备通过配置、接口、备用设置和终结点定义其功能和特性。 USB 配置定义设备的功能和特性,主要是其电源功能和接口。 设备可以有多个配置,但一次只能有一个处于活动状态。 活动配置不是由 USB 驱动程序堆栈选择的,但可能由应用程序、驱动程序、设备驱动程序启动。 设备驱动程序选择活动配置。

配置可以有一个或多个用于定义设备功能的 USB 接口 。 通常,功能和接口之间存在一对一的关联。 但是,某些设备公开与一个函数相关的多个接口。 在这种情况下,设备可以具有接口关联描述符IAD,IAD 将属于特定函数的接口组合在一起。

每个接口都包含一个或多个终结点,这些 终结点用于向/从设备传输数据。 此外,接口包含定义与接口关联的函数的带宽要求的 备用设置 。 总之,一组终结点构成一个接口,一组接口构成设备中的配置。

那么,选择活动配置意味着什么? 在设备初始化期间,USB 设备的设备驱动程序必须选择配置、该配置中的一个或多个接口以及每个接口的备用设置。 大多数 USB 设备不提供多个接口或多个备用设置。 例如,OSR USB FX2 学习工具包设备具有一个接口,其中包含一个备用设置和三个终结点。

单接口设备

下图显示了具有单个接口的设备配置:

在此示例中,该图显示了终结点 0,称为 默认终结点。 所有 USB 设备都必须具有用于控制传输的默认终结点  。 配置 0 有一个接口:具有一个备用设置的接口 0。 备用设置 0 使用接口中的所有三个终结点。

多接口设备

对于多功能设备,设备具有多个接口。 若要使用特定函数或接口,客户端驱动程序会选择接口和关联的备用设置。 考虑一个多功能 USB 设备,例如网络摄像头。 该设备具有两种功能:视频捕获 (相机) 和音频输入 (麦克风) 。 设备在流式传输视频的视频接口中定义终结点。 设备在单独的接口中具有另一个终结点,该终结点通过麦克风获取音频输入。 设备的配置包括这两个接口。

下图显示了网络摄像头设备的配置:

在此示例中,该图显示了默认终结点。 配置 0 有两个接口:接口 0 和接口 1。 接口 0 有三个备用设置。 在任何给定时间,只有一个备用设置处于活动状态。 请注意,备用设置 0 不使用终结点,而备用设置 1 和 2 使用终结点 1。 通常,摄像机使用 常时等量终结点 进行流式处理。 对于该类型的终结点,使用终结点时,在总线上保留带宽。 当相机未流式传输视频时,客户端驱动程序可以选择备用设置 0 以节省带宽。 当网络摄像头流式传输视频时,客户端驱动程序可以切换到备用设置 1 或备用设置 2,这可提高质量级别并消耗不断增加的总线带宽。 接口 1 有两个备用设置。 与接口 0 类似,备用设置 0 不使用终结点。 备用设置 1 定义为使用终结点 1。

不能在配置中的两个接口之间共享终结点。 设备使用终结点地址来确定数据传输或终结点操作(如管道重置)的目标终结点,所有这些操作都由主机启动。

在开始使用设备之前,请获取有关设备布局的信息。 USBView 是一个应用程序,可用于浏览所有 USB 控制器以及连接到它们的 USB 设备。 对于每个连接的设备,可以查看设备、配置、接口和终结点描述符,以了解设备的功能。

标准 USB 描述符
映射到设备布局的 USB 描述符

主机软件通过将各种标准控制请求发送到默认终结点,获取描述符请求,从附加设备获取描述符,请参阅 USB 规范第 9.4.3 节。 这些请求指定要检索的描述符的类型。 为了响应此类请求,设备发送描述符,其中包含有关设备、其配置、接口和相关终结点的信息。 设备描述符 包含有关整个设备的信息。 配置描述符 包含有关每个设备配置的信息。 字符串描述符 包含 Unicode 文本字符串。

每个 USB 设备都会公开一个设备描述符,该描述符指示设备的类信息、供应商和产品标识符以及配置数。 每个配置都会公开其配置描述符,用于指示接口数和电源特征。 每个接口都为其每个备用设置公开一个接口描述符,其中包含有关 类和终结点数的信息。 每个接口中的每个终结点都会公开终结点描述符,这些描述符指示终结点类型和最大数据包大小。

例如,让我们考虑 OSR FX2 板设备布局 (请参阅 USB 设备布局) 。 在设备级别,设备公开默认终结点的设备描述符和终结点描述符。 在配置级别,设备公开配置 0 的配置描述符。 在接口级别,它公开了备用设置 0 的一个接口描述符。 在终结点级别,它公开了三个终结点描述符。


USB 设备描述符

每个通用串行总线 (USB) 设备都必须能够提供包含设备相关信息的单个设备描述符。 Windows 使用该信息来派生各种信息集。 例如, idVendor 和 idProduct 字段分别指定供应商和产品标识符。 Windows 使用这些字段值来构造设备的硬件 ID。 若要查看特定设备的硬件 ID,请打开设备管理器并查看设备属性。 在“ 详细信息 ”选项卡中, “硬件 ID” 属性值指示 Windows 生成的硬件 ID (“USB\XXX”) 。 bcdUSB 字段指示设备符合的 USB 规范的版本。 例如,0x0200指示设备按照 USB 2.0 规范设计。 bcdDevice 值指示设备定义的修订号。 USB 驱动程序堆栈使用 bcdDevice 以及 idVendor 和 idProduct 为设备生成硬件和兼容 ID。 可以在 设备管理器 中查看这些标识符。 设备描述符还指示设备支持的配置总数。

主机通过控件传输获取设备描述符。 Microsoft 提供编程接口来获取描述符。

USB 配置描述符

USB 配置包含一系列接口。 每个接口由一个或多个备用设置组成,每个备用设置由一组终结点组成, (查看 USB 设备布局) 。 配置描述符描述整个配置包括其接口、备用设置及其终结点。 其中每个实体也都以描述符格式进行描述。 配置描述符还可以包含由设备制造商定义的自定义描述符。

因此,只有配置描述符的初始部分是固定的,即 9 个字节。 其余部分是可变的,具体取决于接口的数量及其备用设置,以及设备支持的终结点。 在此文档集中,初始 9 个字节称为配置描述符。 描述符的前两个字节指示总长度。

下表显示了 USB 网络摄像头设备的配置描述符:

bConfigurationValue 字段指示设备固件中定义的配置编号。 USB 配置还指示某些电源特征。 bmAttributes 包含一个位掩码,该掩码指示配置是否支持远程唤醒功能,以及设备是总线供电还是自供电。 MaxPower 字段指定设备采用总线供电时,设备可从主机提取的最大功率) ((以毫安单位为单位)。 配置描述符还指示设备支持的 (bNumInterfaces) 接口总数。

USB 接口描述符

接口描述符包含有关 USB 接口的备用设置的信息。

下表显示了网络摄像头设备的接口 0 的备用设置 0 的接口描述符:

在前面的示例中,请注意 bInterfaceNumber 和 bAlternateSetting 字段值。 这些字段包含主机用于激活接口及其备用设置之一的索引值。 对于激活,应用程序或驱动程序在函数调用中指定索引值。 然后,USB 驱动程序堆栈根据该信息生成一个标准控制请求 (SET INTERFACE) 并将其发送到设备。 请注意 bInterfaceClass 字段。 接口描述符或其任何备用设置的描述符指定类代码、子类和协议。 0x0E 的值指示接口适用于视频设备类。 另请注意 iInterface 字段。 该值指示在接口描述符后面追加了两个字符串描述符。 字符串描述符包含 Unicode 说明,这些说明在设备枚举期间用于标识功能。

USB 终结点描述符

接口中的每个终结点描述设备的单个输入或输出流。 支持不同类型函数流的设备具有多个接口。 支持与一个函数相关的多个流的设备可以支持单个接口上的多个终结点。

除默认终结点之外,所有类型的终结点必须提供终结点描述符,以便主机可以获取有关终结点的信息。 终结点描述符包括其地址、类型、方向和终结点可以处理的数据量等信息。 到终结点的数据传输基于该信息。

下表显示了网络摄像头设备的终结点描述符:


bEndpointAddress 字段指定包含终结点编号 (位 3.0) 的唯一终结点地址,以及终结点方向 (位 7) 。 通过读取上述示例中的这些值,我们可以确定描述符描述了终结点编号为 2 的 IN 终结点。 bmAttributes 属性指示终结点类型为常时等量。 wMaxPacketSizefield 指示终结点在单个事务中可以发送或接收的最大字节数。 位 12..11 指示每个微帧可以发送的事务总数。 bInterval 指示终结点发送或接收数据的频率。

USB 终结点及其管道

USB 设备具有用于数据传输的终结点。 在主机端,终结点由管道表示, 本文区分这两个术语。
终结点是 USB 设备上的缓冲区。 终结点是一个与硬件本身相关的术语,独立于主机操作系统。 主机可以向该缓冲区发送和接收数据。 终结点可分为控制和数据终结点。

每个 USB 设备必须在地址 0 处提供至少一个控制终结点,称为默认终结点或 Endpoint0。 此终结点是双向的。 也就是说,主机可以将数据发送到终结点,并在一次传输中从终结点接收数据。 控制传输的目的是使主机能够获取设备信息、配置设备或执行特定于设备的控制操作。

数据终结点是可选的,用于传输数据。 它们是单向的,具有类型 (控制、中断、批量、常时等量) 和其他属性。 所有这些属性均在终结点描述符中介绍 (请参阅 USB 描述符标准) 。

在 USB 术语中,终结点的方向 ( 和传输) 基于主机。 因此,IN 始终是指从设备传输到主机,OUT 始终是指从主机传输到设备。 USB 设备还可以支持控制数据的双向传输。

设备上的终结点分组为功能接口,一组接口构成设备配置。

主机软件可以在配置设备之前或在选择备用设置期间查看终结点信息。 你将循环访问所有接口,然后循环访问设置的每个接口列表,并查看设置中每个终结点或整个终结点集的属性。 查看终结点信息不会影响设备的配置状态。

USB 管道

数据通过称为 管道的抽象在 USB 设备和 USB 主机之间传输。 管道纯粹是一个软件术语。 管道与设备上的终结点通信,并且该终结点具有地址。 管道的另一端始终是主控制器。

通过选择配置和接口的备用设置来配置设备时,将打开终结点的管道。 因此,它们成为 I/O 操作的目标。 管道具有终结点的所有属性,但它处于活动状态,并用于与主机通信。

未配置的终结点称为终结点,而配置的终结点称为管道。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础语法 003-3 数据类型元组

1 元组 1.1 元组含义 1.1.1 元组的表示 #元组的表示方法:() names ("xiaoyun", "xiaoming") print(names)--结果------- (xiaoyun, xiaoming) 1.1.2 空元组 #空元组 names () print(type(names)) print(len(names))----------------结果--------- &l…

Profibus DP主站转Modbus模块连接马达保护器案例

一、概述 在工业自动化控制系统中,Profibus DP和Modbus是常见的通信协议,在同一现场还有可能遇到Modbus协议,ModbusTCP协议,Profinet协议,Profibus协议,Profibus DP协议,EtherCAT协议&#xff…

vant组件 顶部下拉刷新和页面底部下拉获取数据+顶部搜索框

1.html部分&#xff08;顶部tab切换无&#xff0c;只有主体list部分&#xff09; <div class"yd" ><!-- yd端 --><!-- 搜索框 --><van-searchv-model"ydsearchvalue"show-actionplaceholder"请输入搜索关键词"search"…

【ARM】Ulink不同的系列对于芯片的支持和可以支持keil软件

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解不同版本的ULINK可以支持的芯片架构&#xff0c;和ULINK可以和哪个系列的keil软件进行在线调试 2、 问题场景 用于了解不同ULINK仿真器对于芯片的支持是不一样的&#xff0c;并不是ULINK可以支持所有的keil软件…

qmt量化交易策略小白学习笔记第44期【qmt编程之期货行情数据】

qmt编程之获取期货行情数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 获取行情数据 提示 使用该接口时&#xff0c;需要先订阅实时行情(subscribe_quote)或下载过历史行情(download_hi…

贪心算法——加工木棍(C++)

上大学&#xff0c;一天是一天&#xff0c;两天也是一天。 ——2024年6月27日 之前考试周断更了&#xff0c;今天重新开始&#xff01; 题目描述 有n根木棍&#xff0c;已知每根木棍的长度和重量。这些木棍在木工机器上加工&#xff0c;机器准备加工木棍需要一些时间&#xf…

YOLOv8数据集标注

1 简介 数据集是必不可少的部分&#xff0c;数据集的优劣直接影响训练效果。一般来说&#xff0c;一个完整的数据集应该包括训练集、测试集和验证集。通常&#xff0c;数据集会被划分为训练集和测试集&#xff0c;比如将数据集的70%用作训练集&#xff0c;30%用作测试集。在进行…

深度学习在蛋白质结构预测的新突破:AlphaFold、RoseTTAFold与ESMFold

在蛋白质结构预测和功能预测领域&#xff0c;基于机器学习的方法最近取得了显著的进展。特别是深度学习技术在这个领域中展现出了强大的能力&#xff0c;代表性的技术有 DeepMind 的 AlphaFold 和 RoseTTAFold。这些技术利用了大量的生物数据和先进的神经网络架构&#xff0c;极…

【科学计算与可视化】3. Matplotlib 绘图基础

安装 pip install matplotlib 官方文档 https://matplotlib.org/stable/api/pyplot_summary.html 主要介绍一些图片绘制的简要使用&#xff0c;更加详细和进阶需要可参考 以上官方文档。 1 绘制基础 方法名说明title()设置图表的名称xlabel()设置 x 轴名称ylabel()设置 y 轴…

在vscode 中ssh连接虚拟ubuntu,不能使用code打开文件

这是参考别人的文章&#xff1a;https://blog.csdn.net/weixin_44465434/article/details/130035032找到vscode的版本信息&#xff0c;提交后面是需要的打开home/(用户)/.bashrc&#xff0c;添加环境变量 export PATH"~/.vscode-server/bin/5437499feb04f7a586f677b155b03…

6.22套题

B. Dark 题意&#xff1a;每次能在数列中能使相邻两个数-1&#xff0c;求当数列没有连续非0值的最小贡献 解法:设表示前i个数中前i-1个数是否为0&#xff0c;当前数是j的最小贡献。表示i1以后减掉d的最小贡献。 C. 幸运值 D. 凤凰院真凶

Docker 日志

日志记录是任何生产应用程序中至关重要的一部分。当出现问题时&#xff0c;日志可以是恢复服务的关键工具&#xff0c;所以它们需要做好。在 Linux 系统上&#xff0c;我们期望通过一些常见方式与应用程序日志交互&#xff0c;有些方式更好。如果您在一台计算机上运行应用程序进…

文华财经盘立方均线-支撑压力自动画线多空声音预警指标公式源码

文华财经盘立方多空均线-支撑压力自动画线指标公式源码&#xff1a; //MA5:MA(C,5); //MA10:MA(C,10); MA20:MA(C,20),COLORRED; MA60:MA(C,60),COLORGREEN; TY:CLOSE; HD:FILTER(BACKSET(FILTER(REF(TY,10)HHV(TY,2*101),10),101),10); LD:FILTER(BACKSET(FILTER(REF(T…

openlayer 图层绘制成多种颜色的一个图层

技术栈&#xff1a; 因为是旧项目的优化功能&#xff0c;这里主要介绍实现思路。技术栈&#xff1a;openlayer 6.5^、jquery、layui组件。 背景&#xff1a; 在创建一个地图对象后&#xff0c;如何创建此处省略。这里主要讲解如何根据接口的数据来把水深测量时间的图层根据不同…

vue2的待办事项案例

头部组件 <template><div class"todo-header"><input type"text" placeholder"请输入你的任务名称&#xff0c;按回车键确认" keyup.enter"add"/></div> </template><script>import {nanoid} fro…

智能语音抽油烟机:置入WTK6900L离线语音识别芯片 掌控厨房新风尚

一、抽油烟机语音识别芯片开发背景 在繁忙的现代生活中&#xff0c;人们对于家居生活的便捷性和舒适性要求越来越高。传统的抽油烟机操作方式往往需要用户手动调节风速、开关等功能&#xff0c;不仅操作繁琐&#xff0c;而且在烹饪过程中容易分散注意力&#xff0c;增加安全隐…

【5G射频基本架构】

平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC

Java登录管理功能的自我理解(尚庭公寓)

登录管理 背景知识 1. 认证方案概述 有两种常见的认证方案&#xff0c;分别是基于Session的认证和基于Token的认证&#xff0c;下面逐一进行介绍 基于Session 基于Session的认证流程如下图所示 该方案的特点 登录用户信息保存在服务端内存&#xff08;Session对象&#xff…

安全技术和防火墙(iptables)

安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督&#xff0c;不主动介入&#xff0c;类似于监控。 入侵防御系统&#xff1a;透明模式工作&#xff0c;对数据包&#xff0c;网络监控&#xff0c;服务攻击&#xff0c;木马&#…

【数据结构】(C语言):栈

栈&#xff1a; 线性的集合。后进先出&#xff08;LIFO&#xff0c;last in first out&#xff09;。两个指针&#xff1a;指向栈顶和栈底。栈顶指向最后进入且第一个出去的元素。栈底指向第一个进入且最后一个出去的元素。两个操作&#xff1a;入栈&#xff08;往栈尾添加元素…