USB枚举过程

USB枚举过程详解 阅读详情
从驱动开发网看到一篇《USB枚举详细过程分析》,依据自己的理解和经验对原文稍加改动。本文仅供参考,一些顺序并不是固定的。 
     本文描述的是Windows系统的USB枚举过程,但对嵌入式系统自行开发的USB主机驱动程序也有参考价值。 

USB枚举详细过程剖析 

1.主机集线器检测到新设备 
主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。) 
 
2.主机发送Get_Status请求 
每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。返回的消息告诉主机一个设备是什么时候连接的。 
 
3.主机发送Set_Feature请求,集线器重启端口 
当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重启端口。集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。 
 
4.集线器在设备和主机之间建立一个信号通路 
主机发送一个Get_Status请求来验证设备是否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备就处于默认状态了,设备已经准备好通过Endpoint 0 的默认流程响应控制传输,即设备现在使用默认地址0x0与主机通信。 
 
5.集线器检测设备速度 
集线器通过测定哪根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备。(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。 

以下需要USB的firmware进行干预 。 

6.获取最大数据包长度 
PC 向address 0发送USB协议规定的Get_Device_Descriptor命令,以取得缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应。该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能枚举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。 

以下操作雷同,不同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发送一次命令,重复三次。 

7.主机分配一个新的地址给设备 
主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。 
 
8.主机重新发送Get_Device_Descriptor命令,读取完整设备描述符 
主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。 
 
9.主机发送Get_Device_Configuration命令,获取完整配置信息 
主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。 
 
10.主机发送Get_Device_String命令,获得描述字符集(unicode) 
描述字符集包括了产商、产品描述、型号等信息。 
 
11.主机展示新设备信息 
此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。 
 
12.PC判断能否提供该类USB的驱动 
根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的Driver,一般win2k能提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等,操作就在后台运行。但是Win98却不可以,所以在此时将会弹出对话框,索要USB的 Driver。 
 
13.主机发送Set_Configuration(x)命令,请求为设备选择一个配置 
加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。 

此时,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。
usb枚举过程总结 USB枚举的主要目的是让主机识别并配置连接的USB设备。通过这个过程,主机可以确定设备的类型、功能和所需的资源,从而为设备加载合适的驱动程序,确保设备能够正常工作。如果枚举失败,设备可能无法被主机识别或正确配置,导致无法正常使用。黄毛入厂打螺丝——枚举:进厂-——插入检测人事面试——枚举过程给她自己的身份证明,五道口毕业证之类的,基本信息了解后,开始安排工位——给定新地址,一切都安排好了,就可以正常的打螺丝了——设备与主机正常通信。 阅读详情

相关推荐

USB具体通讯过程(含枚举过程)

前言    现在刚开始接触USB的开发,零零散散学习了一些USB基础知识,但是却得不到连贯。在这个学习过程中首先困惑的就是USB通讯过程究竟是什么样子的,我觉得做一下简单的了解后记录下来,首先从USB整体结构基础来入手直到整个通讯过程。可能有理解不到位的地方,望各位能够指正,我会及时改正。一、USB系统的结构    USB系统是由三个逻辑层组成:功能层、USB设备层和USB总线接口层。并且每一层都...

go_str的博客 4万+

USB协议学习:5、USB的枚举过程

地址偏移量字段名长度说明0bLength1描述符长度(字节):12H11描述符类型:设备=01H2bcdUSB2USB 规范版本号(BCD 码)41类代码51子类代码61协议代码71端点 0 支持最大数据包长度8idVender2供应商 ID10idProduct2产品 ID12bcdDevice2设备版本号(BCD 码)141供应商字符串描述符索引值15iProduct1产品字符串描述符索引值161。

嵌入山脊的博客 8932

USB学习笔记——USB通信过程与枚举过程

在网上看到一篇文章就是讲这个的,仔细阅读后获得了很多感触,整理总结如下。 一、USB接口 在USB的集线器端D-,D+都接了下拉电阻,而USB设备端的D-,D+接了上拉电阻,所以当USB设备插入时可以根据集线器端D-,D+上的电压变化来判断是否有USB设备接入。 检测到有设备接入后,可以根据D-,D+来判断USB设备的工作模式,是低速还是全速或者高速。所以D-,D+这两根线很重要。 二、 USB数据传输过程 主机与USB设备相互传输数据具体过程如下: 1、客户软件首先将传输的数据放入缓冲

weixin_46199479的博客 5263

浅谈USB的枚举过程

USB枚举

weixin_46721287的博客 3759

USB HID设备枚举过程

USB HID设备枚举过程一. 枚举过程二. 设备状态图三. USB Data Flow四. 枚举失败分析--USB无法识别、无反应 一. 枚举过程 USB设备插入检测,硬件上全速设备D+线上有1.5K上拉电阻,可便于USB主机检测到有设备连上。 等待稳定供电后,USB主机会对设备复位,即BusReset,复位后,主机将使用地址0与设备通信。 USB主机将向地址0设备的Endpoint 0 发送获取设备描述符的标准请求,设备收到该请求后,会按照主机请求的参数,在数据过程将设备描述符返回给主机,主机在成功获

ab123的专栏 2594

第五篇 USB设备枚举过程(1)

总述 设备枚举的整个过程 USB设备枚举过程,可大致分为下面的几个阶段: 一、获取设备描述符 二、复位总线 三、设置地址阶段 四、再次获取设备描述符 五、获取配置描述符集合请求(第一次) 六、语言ID描述符和字符串描述符的请求 七、又获取了一次设备描述符 八、又再一次获取配置描述符 九、设置配置请求 十、设置接口请求 十一、重复两次请求产品字符串描述符 十二、Set_Idle请求 十三、获取报...

渣渣小码农的博客 1万+

usb驱动开发之USB协议枚举过程详解

本文把usb的枚举过程通过文字、程序和图形三种形式描述出来,并形成对照。 一  枚举过程之文字描述          •主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。)    • 连接

亚亚图雷的专栏 5736

USB 枚举过程

枚举过程的详细介绍 1、USB主机检测到 USB设备插入后,就会先对设备复位。USB设备在总线复位后其地址为 0 ,这样主机就可以通过地址 0和那些刚刚插入的设备通信。 2、USB主机往地址为 0的设备的端点 0发送获取设备描述符的标准请求(这是一个控制传输的建立过程)。设备收到该请求后,会按照主机请求的参数,在数据过程将设备描述符返回给主机。主机在成功获取到一个数据包的设备描述......

tyustli 3926

【USB枚举过程】

USB 枚举过程是 USB 设备连接到主机后,主机识别设备、获取设备信息并为其分配资源的关键步骤。

weixin_40146547的博客 954

大疆 DJI Mobile SDK实战指南——从零构建Android示例开发环境

本文提供了一份详尽的DJI Mobile SDK Android开发环境搭建实战指南。文章手把手教你从注册开发者账号、获取App Key,到配置Android Studio、下载官方示例代码,最终成功运行DJI官方Android示例程序,帮助开发者快速入门无人机应用开发,避开常见编译与依赖问题。

weixin_29188043的博客 273

射频指纹识别技术:原理、应用与深度学习实现

射频指纹识别(RFFI)是一种基于硬件特征的设备身份认证技术,通过分析无线设备发射信号中的独特硬件特征实现设备识别。其核心原理源于发射器硬件电路的非线性特性,如功率放大器的相位噪声和混频器的非线性失真,这些特征具有难以伪造的特点。在物联网和边缘计算场景中,RFFI技术展现出独特优势,尤其在智能家居和工业物联网中,能有效防止非法接入和设备伪造。深度学习方法的引入进一步提升了RFFI的性能,通过自动特征提取和端到端优化,显著提高了识别准确率。本文详细探讨了RFFI的技术原理、应用场景及实现方法,为相关领域的研究

weixin_30457465的博客 889

linux usb枚举过程分析

当守护程序第一次运行或usb port上状态发生变化,守护进程被唤醒都会运行hub_events函数,这个函数在usb系统中处理核心位置,usb的枚举过程就是由它完成,usb枚举过程流程图如图1所示; 图1 usb枚举流程图 由于hub_events函数比较长这里分几个部分进行讲解: [html]view plaincopy

hhcs 1万+

TX 的 LOL(Local Oscillator Leakage,本振泄露)

项目内容LOL 是什么本振残留在 TX 输出中心频率上的杂散主要原因IQ 失衡、硬件不完美、零中频架构影响杂散、干扰、性能劣化、安全问题解决方法初始化校准 + 跟踪校准(AD9371 支持)检测手段频谱仪、回环检测、ADC ILA 抓取。

weixin_41230430的博客 2045

USB host枚举设备的过程

USB host枚举设备的过程 整理自网络     USB主机在检测到USB设备插入以后,就会对USB设备进行枚举了。枚举就是从设备中读到一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息加载合适的驱动程序。      首先说说USB的一种传输方式----控制传输。这种传输方式在USB中非常重要。他要保证数据的正确性,在设备的枚举过程中都是使用控制

SDU的专栏 4146

UE5.4像素流送实战:GPU驱动、WebRTC与系统级调优全解析

像素流送是将实时3D渲染画面通过WebRTC编码推流至浏览器的关键技术,其本质是GPU硬件编码(如NVENC)与低延迟网络传输(UDP+BBR)的深度协同。理解其原理需跨越图形API(Vulkan/DX12)、实时音视频(H.264/H.265)、WebRTC信令与NAT穿透四大技术层。技术价值在于突破终端算力限制,支撑远程工业仿真、云VR看房等高交互场景;但落地难点集中于基础设施层——如NVIDIA驱动与UE5.4.3的CUDA Toolkit 12.2兼容性、Linux内核TCP/UDP参数调优、GPU

weixin_32943857的博客 615

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1992

USB 之枚举过程概述

来源:公众号【鱼鹰谈单片机】作者:鱼鹰OspreyID :emOsprey上篇笔记我们大概了解了一下 USB 设备插入主机后经历了什么阶段,本篇笔记和接下来的笔记将详细介绍整个流程。...

EmbeddedOsprey 5299

利用VS2019编写安卓APP的步骤和所遇问题的解决办法

遇到了代码错误,这个可以将鼠标箭头置于错误代码处,这样VS2019给你解决办法,给的方法不能解决,并且读了程序都没有问题,那么你应该重启软件,这样还是不能解决,你尝试重新生成解决方案,还是不能解决有可能是运用的代码与当前版本不相符和、过时了,这个时候应当运用相应版本的代码。注:VS2019编写APP的空间不是很稳定,当你写的代码没有问题,但是出现了报错,可能是空间崩溃了,这个时候可以重启软件。点击“+”号,创建密钥存储,输入“别名”、“密码”、以及下面中的任意一项,直至红色框消失后。

youbestcando的博客 7812
上一篇: 变量内存分配
下一篇: 深入理解linux内核v4l2框架之videobuf
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值