Windows识别USB设备过程

摘要:
请注意,主机一次只能列出一个USB设备,因此一次只能有一个USB装置使用默认地址0。主机循环发送Get to The device_ device_ Configuration命令,要求USB设备应答以读取所有配置信息。但是,Win98不能,因此此时将弹出一个对话框,询问USB驱动程序。如果配置成功,USB设备将进入“配置”状态,并可以与客户软件传输数据。此时,常规USB已完成必要的配置和连接。

集线器检测新设备

主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此会被主机集线器检测到)

主机知道了新设备连接后

每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。返回的消息告诉主机一个设备是什么时候连接的。

集线器重新设置这个新设备

当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重新设置端口。集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。

集线器在设备和主机之间建立一个信号通路

主机发送一个Get_Status请求来验证设备是否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备就处于默认状态了,即设备已经准备好通过 Endpoint 0 的默认流程响应控制传输。即设备现在使用默认地址0x0与主机通信。

集线器检测设备速度     

集线器通过测定那根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。以下,需要USB的firmware进行干预

获取最大数据包长度

PC向address 0发送USB协议规定的Get_Device_Descriptor命令,以取得却缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应,该长度包含在设备描述符的 bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能列举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。     以下操作雷同,不同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发送一次命令,重复三次。

主机分配一个新的地址给设备    

主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。

(8)主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。

(9)主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。

(10) 主机发送Get_Device_String命令,获得字符集描述(unicode),比如产商、产品描述、型号等等。

(11) 此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。

(12) 根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的Driver,一般win2k能提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等,操作就在后台运行。  但是Win98却不可以,所以在此时将会弹出对话框,索要USB的Driver。

(13) 加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进 行数据传输。此时,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一些用户可选 的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。

免责声明:文章转载自《Windows识别USB设备过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js实现移动端图片预览:手势缩放, 手势拖动,双击放大...解决vue axios跨域请求发送两次问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

openwrt 编译常用 luci 插件到固件中

先更新安装packagesluci ./scripts/feeds update packages ./scripts/feeds install -a -p packages ./scripts/feeds update luci ./scripts/feeds install -a -p luci 设置想要装的包,目前只需要最基本的包,usb samb...

USB中CDC-ECM的了解和配置

USB中典型类及子类: 类别 解释 子类 典型应用 IC芯片 备注 UVC 视频类 免驱USB摄像头 CDC 通讯类 RNDIS ECM(p24) 免驱USB网卡 RTL8152B EEM ......         曾经接触过UVC。今天接触了CDC-ECM原理上是一样的,定义一套标准协议主从机都...

MicroPython基础知识总汇

MicroPython的系统结构 MicroPython系统的经典结构由三部分组成,分别是微控制器硬件、MicroPython固件、用户程序。 MicroPython支持的其它类型开发板,需要自己编译源代码,产生固件,并将固件下载到微控制器中才能运行MicroPython。(此内容我们后面会讲解到,千万别好高骛远!) MicroPython连接电脑 STM...

USB HID介绍【转】

本文转载自:http://blog.csdn.net/leo_wonty/article/details/6721214 HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容。 USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备。那什么是设备描述符呢? Descriptor即...

STM32 USB HID BarCodeReader不兼容问题的解决

STM32USB HID class的一部分 BarCodeScanner(条码枪)不兼容的解决 硬件构成 STM32F479-EVAL 评价板型号为FFTAA10AP条码枪 现象 最近用CubeMX生成的USB库做条形码枪的USB驱动,用的是HID协议。有的条形码枪,用标准的USB库一次就能成功。但是有的型号的条码枪貌似和标准USB库流程有所出入,执行后...

国产USB2.0转UART/FIFO芯片DP2232H替代FT2232H

DP2232H是一个USB2.0高速(每秒480兆位)至UART/FIFO芯片。 具有在多种工业标准串行或并行接口配置的能力。有两个多协议同步串行引擎(MPSSE)允许使用JTAG,I2C和SPI两个通道同时进行通信。 DP2232H芯片特性**替代FT2232H,软硬件兼容**∞ 单芯片USB双串行/并行端口具有多种配置。∞ 整个USB协议都在该芯片上处...