USB枚举过程详解

news2024/10/6 12:20:50

1 USB枚举流程
1.1 USB枚举流程
USB SETUP command的状态阶段的状态包是个ZLP。

Anchor chips -> Netchip -> PLX -> Avago -> Broadcom
The USB3380 is EOL and the kits that were by Taiwan Bplus.

PLX USB3380设备控制器使用2个32bit寄存器存放setup的8个字节,第一个32bit寄存器SETUPDW0的b7...0存放bmRequestType,b15...8存放bRequest,b31...16存放wValue;第二个32bit寄存器SETUPDW1的b15...0存放wIndex,b31...16存放wLength。
USB Endpoint FIFO = PCI Cache Line Size x N
PCIe switch forwards TLP packet.
Figure 1-1 Windows枚举USB设备的流程

1.2 github NT5.1
Windows2000               Windows XP
usbhub.sys                   usbhub.sys
usbd.sys                       usbport.sys
openhci.sys, uhcd.sys  usbuhci.sys, usbohci.sys, usbehci.sys
一个设备有两个GUID,一个是设备接口类GUID,另一个是安装类GUID。
https://www.anquanke.com/post/id/83167

IoConnectInterrupt()
base/ntos/io/pnpmgr
drivers/wdm/usb/driver/hub.pnp/usbhub.c
USBH_SubmitInterruptTransfer()
当port连接改变时,usbhub调用USBH_IoInvalidateDeviceRelations()通知PNP管理器,接下来PNP管理器通知usbccgp驱动去读取设备和配置描述符,并创建PDO。
drivers/wdm/usb/usbccgp/parent.c
TryGetConfigDescriptor()
PNP: IoInvalidateDeviceRelations()
创建类PDO并通知PNP管理器加载USB类驱动。

2 描述符配置
2.1 Android
Android是支持多USB配置描述符的,但是我们平时见到的手机都是一个配置的,接口数按照你在Android状态栏上选择的功能而定。QCOM数据卡设备为了兼容Windows和MacOS,使用了多配置描述符。
- 设备描述符的bNumConfigurations=1
- 配置描述符的bNumInterfaces=x,根据用户选择的功能而定

2.2 iOS
iOS支持4个USB配置,也即是有4个配置描述符,配置描述符中的bConfigurationValue分别是1、2、3、4,然后每个配置描述符都有自己的接口和端点描述符。
- 设备描述符的bNumConfigurations=4
- 配置描述符的bNumInterfaces=x,根据Windows选择哪个配置而定
- 当我们的电脑上没有安装iTunes时,Windows选择的是配置3,电脑上显示的是PTP Camera,当我们电脑上安装了iTunes时,Windows选择的是配置4
Figure 2-1 连接iTunes时bushound抓包

2.3 Windows Phone 8
WP8的USB功能只支持一个配置,三个接口。WinUSB驱动安装可以使用工具Zadig。
- 设备描述符的bNumConfigurations=1
- 配置描述符的bNumInterfaces=3
- 主要有3个接口:PTP、WinUSB、WinUSB

3 USB驱动安装工具Zadig
Akeo Consulting is a small Software Development company, established in the North-West of Ireland, in the breathtaking wilderness of County Donegal.
Zadig - USB driver installation made easy, based on Windows Driver Installer library (libwdi).
https://zadig.akeo.ie/

4 Abbreviations
ARC:Argonant RISC Core
AT91SAM9260:SAM means Smart ARM-based Microcontroller
ATMEL SAMBA:ATMEL Smart ARM-based Microcontroller Boot Assistant
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
Quirks:the attributes of a device that are considered to be noncompliant with expected operation
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)

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

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

相关文章

数据库-表的增删改查

这里写目录标题 新增(Create)查询条件查询运算符逻辑运算符分页查询 修改(Update)删除(Delete) 注释:在SQL中可以使用“–空格描述”来表示注释说明 新增(Create) 语法…

spark3新特性之动态分区裁剪

Spark3.0为我们带来了许多令人期待的特性。Spark中的静态分区裁剪在介绍动态分区裁剪之前,有必要对Spark中的静态分区裁剪进行介绍。因此,在这种情况下,我们不能再应用静态分区裁剪,因为filter条件在join表的一侧,而对…

【小米的技术分享】拯救程序员的“救命稻草”:Git回滚命令大揭秘!

大家好,我是小米。作为一名热爱技术的程序员,经常使用Git进行版本控制是我们的家常便饭。但是,难免会遇到一些意外,比如不小心提交了错误的代码或者合并了错误的分支,这时候就需要用到Git回滚命令了。今天,…

chrome谷歌浏览器书签不同步的解决办法

背景:多台电脑使用时,发现浏览器书签并没有及时同步,找到最终的解决办法: 第1步:chrome地址栏中输入: chrome://sync-internals/ 第2步:点击 Disable Sync (Clear Data) 点击Request Start 第3…

马上掌握的LayUI树形权限菜单,助力你的权限管理!

目录 一、树形菜单的介绍 1、什么是树形菜单? 二、实现思路流程 三、实现步骤 1、查看数据 1)表数据 2) 最终效果 2、编程 1)实体类编写 2)PermissionDao编写(难点) 第一 在线转json…

vue+springboot基于Web的电子产品销售系统设计与实现 gqon2a

随着人们生活水平的高速发展,电子产品销售方面在近年来呈直线上升,人们也了解到电子产品的实用性,因此电子产品的销售数量也逐年递增,电子产品销售的增加加大了在管理上的工作难度。为了能更好的维护电子产品销售管理秩序&#xf…

Grafana 图形面板定制方案

Grafana 在一个 Panel 中添加多数据源同时展示以及修改通过 transform 修改图表图例的方式。 多个数据在一个折线图中 在 Grafana 中我们可能会希望多个数据在一个Panel 中展示,比如: 通过编辑 Panel 增加 Query 数据我们即可做到:像上面中…

SQL数据库连接类型与常用函数

目录 1. 创建表插入数据 2. 连接类型 2.1 内连接 2.2 外连接 2.2.1 左外连接 2.2.2 右外连接 2.3 交叉连接 2.4 子查询&公用表达式 2.5 UNION连接 3. SQL常用函数 3.1 CASE WHEN函数 3.2 COALESCE函数 3.3 NULLIF函数 3.4 LEAST 和 GREATEST函数 3.5 DISTINCT…

LayUi之树形结构的详解(附有全案例代码)

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. 什么是树形结构 二.树形结构在什么时…

表格编程之争:Python VS VBA?Excel用户:新编程语言才真香

Python和VBA哪个更好用? Python和VBA是两种不同的编程语言,它们都有自己的特点和优缺点。在表格编程方面,VBA在Excel中的应用非常广泛,可以通过宏来实现自动化操作和数据处理,也可以通过VBA代码来实现自定义函数和界面…

python qt安装软件包

安装 opencv pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装pyqt5 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装pyqt5-tools pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

RLHF-基于人类反馈的强化学习

RLHF 文章目录 RLHF强化学习基础回顾为什么要使用基于人类反馈的强化学习大纲RLHF的起源大预言模型中的RLHF案例 ChatGPT RLHF中的技术细节预训练语言模型训练奖励模型基于RL进行微调 RLHF 的未来 强化学习基础回顾 智能体通过采取行动与环境进行交互,并返回状态和奖…

【C语言督学营 第十八天】考研408排序大题初探(将排序思想融入题目)

文章目录 题目一分析代码实战 题目二分析代码实战 补充(快排与归并)数据结构大题注意点!!!(评分标准) 题目一 分析 (1)算法的基本设计思想 由题意知,将最小的nl2个元素放在Ai中,其余的元素放在A2中&#x…

FreeRTOS实时操作系统(十三)任务通知

系列文章目录 文章目录 系列文章目录任务通知任务通知值和通知状态任务通知值通知状态 任务通知API函数发送通知函数接收通知函数 实验测试模拟二值信号量实验模拟计数型信号量模拟事件标志组实验模拟消息邮箱实验 任务通知 任务通知:用来通知任务的,任…

ATMEGA16 Proteus仿真自动人体感应电风扇DS18B20温度 -0069

ATMEGA16 Proteus仿真自动人体感应电风扇DS18B20温度 -0069 Proteus仿真小实验: ATMEGA16 Proteus仿真自动人体感应电风扇DS18B20温度 -0069 功能: Protues版本:7.8 程序编写:ICCAVR:7.12 硬件组成:ATMEGA16单片机…

嵌入式开发之编码器速度采集

光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是应用最多的传感器,光电编码器是由光源、光码盘和光敏元件组成。光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,…

spark和zeppelin认证不一致:Only one of --proxy-user or --principal can be provided

spark和zeppelin认证不一致:Only one of --proxy-user or --principal can be provided 如果配置principal认证方式,zeppelin走的是hadoop权限,如果配置proxy-user认证方式,zeppelin走的是当前登录用户的权限(ranger控…

GitHub上cambel的ur3项目调试经验

按照https://github.com/cambel/ur3/wiki/Compile-from-source配置环境时,遇到以下问题: catkin clean时报错 [clean] Error: The current or desired workspace could not be determined. Please run catkin clean from within a catkin workspace or…

【学会动态规划】第 N 个泰波那契数(1)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 4. 空间优化 写在最后 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟…

MySQL 中索引是如何实现的,有哪些类型的索引,如何进行优化索引

MySQL 中的索引 前言 上篇文章聊完了 MySQL 中的锁,这里接着来看下 MySQL 中的索引。 一般当我们数据库中的某些查询比较慢的时候,正常情况下,一顿分析下来,大多数我们会考虑对这个查询加个索引,那么索引是如何工作的呢…