USB枚举过程(Enumeration)
来源:互联网 发布:淘宝类目搜索什么意思 编辑:程序博客网 时间:2024/05/22 08:26
原文地址:http://blog.sina.com.cn/s/blog_47145b6601018uxs.html
USB架构中,hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt INEndpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(RootHub)的状态看是否有设备(包括子hub和子hub上的设备)连接。USB总线拓扑结构见下图(最顶端为主机的RootHub):
(USB Bus Topology)
一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有的USB设备必须支持标准请求(StandardRequests),控制传输方式(ControlTransfer)和端点0(Endpoint0)。
从用户角度来看,枚举过程是自动完成并不可见的。但很多初次使用的设备连接时,系统会弹出说新硬件检测到,设备安装成功,可以使用之类的消息提示框,而且有时还需要用户配合选择安装相关的驱动。
当枚举完成后,这个新添加的设备可在Windows的设备管理器里面看到,当用户删除这个设备/硬件时,系统把这个设备从设备管理器里删除。
对于一般的设备,固件(Firmware)内包含主机所要请求的信息,而有些设备则是完全由硬件来负责响应主机的请求。在主机方面则是由操作系统而非应用程序负责处理相关枚举操作。
枚举步骤
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。
下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。设备必须在任何时候都能正确处理所有的主机请求。
1.用户把USB设备插入USB端口或给系统启动时设备上电
2.Hub监测它各个端口数据线上(D+/D-)的电压
USB全速/高速设备上电连接
(Full-speed Device Cable and ResistorConnections)
3.Host了解连接的设备
4.Hub检测所插入的设备是高速还是低速设备
5.hub复位设备
6.Host检测所连接的全速设备是否是支持高速模式
7.Hub建立设备和主机之间的信息通道
8.主机发送Get_Descriptor请求获取默认管道的最大包长度
9.主机给设备分配一个地址
10.主机获取设备的信息
标准Get_Descriptor请求
(Get_DescriptorRequest)
11.主机给设备挂载驱动(复合设备除外)
主机通过解析描述符后对设备有了足够的了解,会选择一个最合适的驱动给设备。在驱动的选择过程中,Windows系统会和系统inf文件里的厂商ID,产品ID,有时甚至用到设备返回来的产品版本号进行匹配。如果没有匹配的选项,Windows会根据设备返回来的类,子类,协议值信息选择。如果该设备以前在系统上成功枚举过,操作系统会根据以前记录的登记信息而非inf文件挂载驱动。当操作系统给设备指定了驱动之后,就由驱动来负责对设备的访问。
(Device Configuration)
12. 设备驱动选择一个配置
- USB枚举过程(Enumeration)
- USB枚举过程 USB Enumeration
- USB枚举过程 USB Enumeration
- USB枚举过程 USB Enumeration
- USB枚举过程 USB Enumeration
- USB枚举过程 USB Enumeration
- [Enumeration]USB总线枚举过程
- USB枚举过程 USB Enumeration
- usb枚举过程 enumeration 流程说明
- USB Bus Enumeration(总线枚举)
- USB Bus Enumeration(总线枚举)
- usb enumeration
- USB枚举过程详述
- USB总线枚举过程
- usb枚举过程
- USB枚举过程
- USB枚举过程
- usb枚举过程分析
- 外观模式
- linux定时任务cron配置
- perl函数说明(getc)
- ocr技术原理
- Coreseek/sphinx全文检索的了解
- USB枚举过程(Enumeration)
- 调用图片上传http接口,利用httpClient模拟请求
- Convention plugin都有那些有约定
- 高性能的通讯库-zeroMQ的几个高性能特征
- 商业智能的新目标:业务分析
- 初学python之练习将输入的数字进行排序的方法
- 终止进程
- [LeetCode]Remove Element
- linux下操作mysql,支持重连