USB枚举过程

转载 2018年04月16日 08:47:36
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 枚举过程

HS/FS connection detect(注意,这里的connection指的是检测到attach/termination等开始的connection,从软件层面看来是link statu...
  • zifeiyu1988
  • zifeiyu1988
  • 2017年02月22日 19:44
  • 469

USB 枚举过程详解

USB 枚举过程详解
  • zoosenpin
  • zoosenpin
  • 2014年06月10日 08:51
  • 2438

实例讲解USB的枚举(配置)过程

所需要工具 USB Monitor2.26优盘一个   网上大量介绍用bus hound作监控软件,我们为什么不选bus hound而选USB Monitor呢,因为bus hound在Win...
  • michaelcao1980
  • michaelcao1980
  • 2016年09月30日 10:31
  • 1588

网友USB枚举过程分析

USB设备检测的一般过程 USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/p...
  • darennet
  • darennet
  • 2015年07月03日 18:07
  • 1422

USB枚举过程分析

1. 枚举是什么?        枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过...
  • skyflying2012
  • skyflying2012
  • 2014年12月13日 22:31
  • 4105

usb鼠标枚举过程深度解析(上)

转载自: http://blog.csdn.net/woshixingaaa/archive/2011/05/02/6384419.aspx 设备枚举过程: 1.         获取设备描...
  • sun_x_t
  • sun_x_t
  • 2012年03月22日 10:21
  • 2297

STM32USB的枚举过程简介

STM32的USB枚举过程介绍     之前的说明:     文中大量引用网上资料,在文后已给出资料的引用说明。文件涉及到的USB各种传输包各个位的含义以及USB标准设备请求的含义都没有做说明,推荐看...
  • a827415225
  • a827415225
  • 2016年06月11日 21:32
  • 5090

USB枚举过程详细分析

一、USB枚举过程分析 1、USB的插入检测 结合智林STM32板上的USB设备接口,分析一下插入检测控制:     当12脚短接,Q1截止,Q2导通,D+上...
  • u013916997
  • u013916997
  • 2014年07月18日 08:44
  • 1353

linux usb枚举过程分析【host】

当守护程序第一次运行或usb port上状态发生变化,守护进程被唤醒都会运行hub_events函数,这个函数在usb系统中处理核心位置,usb的枚举过程就是由它完成,usb枚举过程流程图如图1所示;...
  • u011279649
  • u011279649
  • 2014年12月01日 22:25
  • 1643

基于STM32的USB枚举过程学习笔记(一)

之前使用ST官方的库以及网络的资料,完成了使用USB HID类进行STM32和PC机的通讯。由于其他原因并没有深入的分析,虽然实现了功能,但是关于USB设备的枚举,以及具体的通讯方式都没有清晰的概念,...
  • qq236106303
  • qq236106303
  • 2012年11月13日 10:44
  • 6464
收藏助手
不良信息举报
您举报文章:USB枚举过程
举报原因:
原因补充:

(最多只允许输入30个字)