当前位置: 首页 > news >正文

windows USB 设备驱动开发-USB带宽

本文讨论如何仔细管理 USB 带宽的指导。 每个 USB 客户端驱动程序都有责任最大程度地减少其使用的 USB 带宽,并尽快将未使用的带宽返回到可用带宽池。

在这里,我们认为USB 2.0 的速度是480Mbps、12Mbps、1.5Mbps,这分别对应高速、全速、低速三种,但实际上USB 2.0 的带宽非常紧张,这也是本文的前提之一,USB 3.0看起来缓解了带宽的问题,但是带宽的问题并不是上限不够而是调度芙蓉问题。

为什么我的 USB 驱动程序出现带宽不足错误?

USB 总线上带宽的竞争来自多个来源,包括硬件和软件。 很难准确预测 USB 客户端驱动程序的可用带宽量。 USB 主控制器需要一定数量的带宽来运行。 所需的量取决于控制器是否高速。 它因系统而异。 高速运行的 USB 集线器有时必须转换高速上游端口与下游低速设备之间的事务,并且此转换过程会消耗带宽。 但是,事务转换是否需要带宽取决于连接的设备类型和设备树的拓扑。

带宽资源最严重的压力通常来自垄断带宽的 USB 客户端驱动程序。 系统按先到先得的原则分配带宽。 如果加载的第一个 USB 驱动程序请求所有可用带宽,则以后加载的 USB 驱动程序不允许其设备的任何带宽。 系统无法配置设备,也无法枚举该设备。 由于枚举失败的原因不明显,因此用户体验不佳。

有时,客户端驱动程序会通过高速中断传输耗尽可用带宽。 但到目前为止,最常见的情况是客户端驱动程序为常量传输分配过多带宽,但无法及时释放带宽。 系统保留分配的带宽,直到请求它的驱动程序通过打开另一个端点关闭其端点,或者删除为其分配带宽的设备。 系统不为批量传输分配有保证的带宽,因此批量传输绝不是枚举失败的原因。 但是,大容量传输设备的性能取决于为定期 (常时等时等和中断) 传输的设备分配的带宽量。

USB 2.0 规范要求常量设备在其默认接口设置上具有零带宽端点。 这可确保在函数驱动程序打开非默认接口之前不会为设备保留任何带宽,这有助于防止在设备配置期间因带宽请求过多而导致的枚举失败。 它不会阻止客户端驱动程序在配置其设备后分配过多的带宽,从而阻止其他设备正常运行。

正确带宽管理的关键是,系统中执行常量传输的每个 USB 设备都必须为包含常量端点的每个接口提供多个备用 (Alt) 设置,并且客户端驱动程序必须明智地使用这些 Alt 设置。 客户端驱动程序应首先请求具有最高带宽的接口设置。 如果请求失败,客户端驱动程序应以越来越小的带宽请求接口设置,直到请求成功。

例如,假设网络摄像头设备具有以下接口:

接口 0 (默认接口设置:默认设置中没有具有非零常时等量带宽的端点)

常量端点 1:最大数据包大小 = 0 字节

常量端点 2:最大数据包大小 = 0 字节

接口 0 Alt 设置 1

常量端点 1:最大数据包大小 = 256 字节

常量端点2:最大数据包大小 = 256 字节

接口 0 Alt 设置 2

常量端点 1:最大数据包大小 = 512 字节

常量端点 2:最大数据包大小 = 512 字节

网络摄像头的驱动程序将网络摄像头配置为在初始化时使用默认接口设置。 默认设置没有常时常量带宽,因此在初始化期间使用默认设置可以避免网络摄像头由于常量带宽请求失败而无法枚举的危险。

当客户端驱动程序准备好执行常时等量传输时,它应尝试使用 Alt 设置 2,因为 Alt 设置 2 具有最大的数据包大小。 如果请求失败,驱动程序可以使用 Alt 设置 1 进行第二次尝试。 由于 Alt 设置 1 需要的带宽较少,因此即使第一个请求失败,此请求也可能成功。 多个 Alt 设置允许驱动程序在放弃之前进行多次尝试。

网络摄像头变为空闲后,可以通过再次选择默认设置,将分配的带宽返回到可用带宽池。

用户可以通过在 Windows 设备管理器 中检查控制器的属性来查看 USB 控制器分配了多少带宽。 选择控制器的属性,然后在“高级”选项卡下查看。此读数并不指示 USB 集线器为事务转换分配了多少带宽。

报告 USB 控制器带宽使用情况的设备管理器功能在 Windows XP 中无法正常工作。

USB 传输和数据包大小
最大传输大小

最大传输大小指定 USB 驱动程序堆栈中的硬编码限制。 低于这些限制的传输大小可能会因为系统资源限制而失败。 若要避免这些类型的故障并确保所有 Windows 版本的兼容性,请避免使用大型传输大小进行 USB 传输。

USBD_PIPE_INFORMATION 结构的 MaximumTransferSize 成员已过时。 USB 驱动程序堆栈忽略复合和非复合设备的 MaximumTransferSize 中的值。

在 Windows 2000 中,USB 驱动程序堆栈将 MaximumTransferSize 初始化为 USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE。 客户端驱动程序可以在配置设备时设置较小的值。 对于复合设备,每个函数的客户端驱动程序只能更改非默认接口设置中管道的 MaximumTransferSize 。

USB 传输大小受以下限制:

使用 MaximumTransferSize 限制传输大小不会直接影响设备消耗的带宽。 客户端驱动程序必须更改接口设置或限制USBD_PIPE_INFORMATION的 MaximumPacketSize 成员中设置的最大数据包大小。

最大数据包大小

最大数据包大小由端点描述符的 wMaxPacketSize 字段定义。 客户端驱动程序可以在对设备的选择接口请求中调节 USB 数据包大小。 更改此值不会更改设备上的 wMaxPacketSize 。

在请求的 URB 中是管道 的USBD_PIPE_INFORMATION 结构。 在该结构中,

  • 修改 USBD_PIPE_INFORMATION 结构的 MaximumPacketSize 成员。 将其设置为小于或等于设备固件中为当前接口设置定义的 wMaxPacketSize 的值。
  • 在 PipeFlags 成员USBD_PIPE_INFORMATION结构中设置 USBD_PF_CHANGE_MAX_PACKET 标志。
读取传输缓冲区的最大数据包大小限制

当客户端驱动程序发出读取请求时,传输缓冲区必须是最大数据包大小的倍数。 即使驱动程序所需的数据小于最大数据包大小,它仍必须请求整个数据包。 当设备发送的数据包小于最大大小 (短数据包) 时,表示传输已完成。

在较旧的控制器上,客户端驱动程序可以重写该行为。 在数据传输 URB 的 TransferFlags 成员中,客户端驱动程序必须设置 USBD_SHORT_TRANSFER_OK 标志。 该标志允许设备发送小于 wMaxPacketSize 的数据包。

在 xHCI 主控制器上,USBD_SHORT_TRANSFER_OK忽略批量端点和中断端点。 在 EHCI 控制器上传输短数据包不会导致错误情况。

在 EHCI 主控制器上,对于批量端点和中断端点,将忽略USBD_SHORT_TRANSFER_OK。

在 UHCI 和 OHCI 主机控制器上,如果未为批量传输或中断传输设置USBD_SHORT_TRANSFER_OK,则短数据包传输将停止端点,并返回传输的错误代码。

使用短数据包分隔写入传输

USB 驱动程序堆栈驱动程序在写入设备时对数据包大小施加的限制与从设备读取时施加的限制不同。 某些客户端驱动程序必须频繁传输少量的控制数据,以管理其设备。 在这种情况下,将数据传输限制为统一大小的数据包是不切实际的。 因此,在数据写入期间,驱动程序堆栈不会为大小小于端点最大大小的数据包分配任何特殊意义。 这允许客户端驱动程序将设备的大型传输分解为多个大小小于或等于最大值的多个 URB。

驱动程序必须使用小于最大大小的数据包结束传输,或使用零长度的数据包分隔传输结束。 在驱动程序发送小于 wMaxPacketSize 的数据包之前,传输才完成。 如果传输大小正好是最大值的倍数,驱动程序必须发送零长度分隔数据包才能显式终止传输。

根据 USB 规范的要求,客户端驱动程序负责使用零长度数据包分隔数据传输。 USB 驱动程序堆栈不会自动生成这些数据包。

使用小于 wMaxPacketSize 的数据包分隔 USB 数据传输

合规的 USB 2.0 和 USB 1.1 驱动程序必须传输最大大小的数据包 (wMaxPacketSize) ,然后以小于最大大小的数据包结束传输,或使用零长度数据包分隔传输结束。 在驱动程序发送小于 wMaxPacketSize 的数据包之前,传输才完成。 如果传输大小正好是最大值的倍数,驱动程序必须发送零长度分隔数据包才能显式终止传输

设备驱动程序负责根据 USB 规范的要求使用零长度数据包分隔数据传输。 系统 USB 堆栈不会自动生成这些数据包。

相关文章:

windows USB 设备驱动开发-USB带宽

本文讨论如何仔细管理 USB 带宽的指导。 每个 USB 客户端驱动程序都有责任最大程度地减少其使用的 USB 带宽,并尽快将未使用的带宽返回到可用带宽池。 在这里,我们认为USB 2.0 的速度是480Mbps、12Mbps、1.5Mbps,这分别对应高速、全速、低速…...

哪有什么「历史的垃圾时间」,有的只是你对自己的不诚实

时间不会服从任何人的管理,它只会自顾自地流逝。— 李笑来《把时间当作朋友》 hi,欢迎来到我的杂货铺。 最近有个概念火了,叫做「历史的垃圾时间」。 看了下相关的文章,大概是在宣扬奥地利派经济学家米赛斯关于历史的一段论述&a…...

全志A527 T527 android13支持usb摄像头

1.前言 我们发现usb摄像头在A527 android13上面并不能正常使用,需要支持相关的摄像头。 2.系统节点查看 我们查看系统是否有相关的节点生成,发现/dev/video相关的节点已经生成了。并没有问题,拔插正常。 3.这里我们需要查看系统层是否支持相关的相机, 我们使用命令进行…...

邦芒贴士:做到这8点工作生活中才能少犯错

我们之所以需要重点关注这些问题,就是为了确保自身利益能够最大化。如果大家在平日活动里能避免犯下这些错误,就会发现自己的工作效率将会大幅提升,更不用提生活也会变得愉快了很多。 大家如果曾经从建立待办事项列表中获得了很多好处的话&a…...

代码随想录算法训练营第7天

454.四数相加 题目链接:454. 四数相加 II - 力扣(LeetCode) 视频/文档链接:代码随想录 (programmercarl.com) 第一想法 遍历数组num1,num2,计算其和出现的数量,放入map集合中,键为和&#xff0…...

苹果开发者取消自动续费

文档:https://support.apple.com/zh-cn/118428 如果没有找到订阅,那就是账号不对 取消订阅后,就不会自动续费了,如果不放心,可以把付款绑定的方式也取消...

Phospho:LLM应用的文本分析利器

今天向大家介绍phospho文本分析平台,专门为大型语言模型(LLM)应用程序设计。它可以帮助开发者从用户或应用程序的文本消息中检测问题、提取洞见、收集用户反馈,并衡量成功。作为一个开源项目,phospho允许开发者查看和修…...

微深节能 料场堆取料无人操作系统 格雷母线

随着工业自动化的快速发展,料场堆取料作业正逐步向无人化、智能化转型。格雷母线高精度位移检测系统在料场堆取料无人操作系统中的应用,成为这一转型过程中的重要技术突破。本文将详细介绍格雷母线及其在料场堆取料无人操作系统中的应用,并探…...

Invoice OCR

Invoice OCR 发票识别 其他类型ORC: DIPS_YTPC OCR-CSDN博客...

无菌隔离器内操作规范性的验证之气流流型验证-北京中邦兴业

无菌隔离器在制药行业的使用愈加广泛,但已有的研究更多地聚焦于设计布局、物料状态等方面,对人员操作因素的影响方面关注较少。以冻干制剂生产车间为例,设计了一系列合理的无菌隔离器内干预操作,并在操作人员实行干预操作的基础上…...

【YOLOv8系列】(一)YOLOv8介绍:实时目标检测的最新突破

目录 引言 背景与发展历程 YOLOv8架构设计 1. 改进的特征提取网络 2. 多尺度特征融合 3. 新的激活函数 4. Attention机制 模型训练与优化 性能评估 应用案例 目标检测 图像分割 图像分类 姿势估计 旋转框检测(OBB) 优势与挑战 优势&…...

如何视频提取字幕?推荐5款视频字幕提取软件

#7月份我的同事一个个消失了#,这不仅是一个话题标签,更是许多公司面临的现实写照。 在人手紧缺的夏日,如何提高工作效率成为当务之急。特别是对于需要处理视频内容的团队,一款能够快速提取字幕的软件显得尤为重要。 下面&#x…...

独孤思维:副业项目实操3天出单了

01 不要吐槽项目不行,带队老师不行。 有的人能从项目赚到钱,有的人能够跑通项目。 就意味着项目本身没错。 而推卸责任的你,不行。 远的不说,就拿图书项目为例。 为什么做得好的学员,三天就能出单。 有的为什么…...

包装器 std::function

使用前&#xff0c;包头文件&#xff1a;#include <functional> std::function 是 C标准库 中的一个通用函数包装器&#xff1b; 它可以储存、复制、调用任何可调用的对象&#xff0c;包括&#xff1a;函数指针、成员函数、绑定的成员函数、lambda表达式、仿函数等。 1…...

Java | Leetcode Java题解之第219题存在重复元素II

题目&#xff1a; 题解&#xff1a; class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Set<Integer> set new HashSet<Integer>();int length nums.length;for (int i 0; i < length; i) {if (i > k) {set.remove(nums[i - …...

800 元打造家庭版 SOC 安全运营中心

今天,我们开始一系列新的文章,将从独特而全面的角度探索网络安全世界,结合安全双方:红队和蓝队。 这种方法通常称为“紫队”,集成了进攻和防御技术,以提供对威胁和安全解决方案的全面了解。 在本系列的第一篇文章中,我们将指导您完成以 100 欧元约800元左右的预算创建…...

vite项目使用qiankun构建hash路由微前端

文章目录 前言一、主应用使用react18 react-router-dom61、项目安装2、主应用中注册微应用3、主应用中设置路由和挂载子应用的组件 二、创建react18 react-router-dom6子应用1、项目安装2、修改子应用 vite.config.ts3、修改子应用 main.tsx,区分qiankun环境和独立部署环境4、…...

通过rpmbuild构建Elasticsearch-7.14.2-search-guard的RPM包

系列文章目录 rpmbuild从入门到放弃 search-guard插件使用入门手册 文章目录 系列文章目录前言一、资源准备二、spec文件1.基础信息2.%prep3.%Install4.%file5.%post6.%postun 三、成果演示1.执行构建过程图示例2.执行安装RPM包示例3.进程检查4.访问esApi 总结 前言 不管是源…...

js 图片放大镜

写购物项目的时候&#xff0c;需要放大图片&#xff0c;这里用js写了一个方法&#xff0c;鼠标悬浮的时候放大当前图片 这个是class写法 <!--* Descripttion: * Author: 苍狼一啸八荒惊* LastEditTime: 2024-07-10 09:41:34* LastEditors: 夜空苍狼啸 --><!DOCTYPE …...

数据模型-ER图在数据模型设计中的应用

ER图在数据模型设计中的应用 1. ER图概述&#xff1a;起源与发展​ 实体-关系图&#xff08;Entity Relationship Diagram&#xff0c;简称ER图&#xff09;起源于1970年代&#xff0c;由Peter Chen首次提出&#xff0c;作为描述数据和信息间关系的图形化语言。随着数据库技术…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...