主机对一个USB设备的识别是通过一个枚举的进程来完结的,主机的总线枚举器随时监控必要的设备状况改变。总线枚举的进程如下:
(1)设备衔接。USB设备经USB总线衔接主机。
(2)设备上电。USB设备能够自供电,也能够运用USB总线供电。
(3)主机检测到设备,宣布复位。主机通过检测设备在总线的上拉电阻检测到有新的设备衔接,并获释设备是全速设备仍是低速设备,然后向该端口发送一个复位信号。
(4)设备默许状况。设备从总线上接收到一个复位信号后,才能够对总线的处理操作做出呼应。设备接收到复位信号后,就暂时运用默许地址(00H)来呼应主机的指令。
(5)地址分配。当主机接收到有设备对默许地址(00H)呼应的时分,就分配给设备一个闲暇的地址,今后设备就只对该地址进行呼应。
(6)读取USB设备描绘符。主机读取USB设备描绘符,承认USB设备的特点。
(7)设备装备。主机按照读取的USB设备描绘符来进行装备,假如设备所需的USB资源得以满意,就发送装备指令给USB设备,表明装备完毕。
(s)挂起。假如运用总线供电,为了节约电源,当总线坚持闲暇状况超越3ms今后,设备驱动程序就会进入挂起状况,在挂起状况时,USB设备保留了包含其地址和装备信息在内的一切内部状况,设备的耗费电流不超越500uA。
(2)设备上电。USB设备能够自供电,也能够运用USB总线供电。
(3)主机检测到设备,宣布复位。主机通过检测设备在总线的上拉电阻检测到有新的设备衔接,并获释设备是全速设备仍是低速设备,然后向该端口发送一个复位信号。
(4)设备默许状况。设备从总线上接收到一个复位信号后,才能够对总线的处理操作做出呼应。设备接收到复位信号后,就暂时运用默许地址(00H)来呼应主机的指令。
(5)地址分配。当主机接收到有设备对默许地址(00H)呼应的时分,就分配给设备一个闲暇的地址,今后设备就只对该地址进行呼应。
(6)读取USB设备描绘符。主机读取USB设备描绘符,承认USB设备的特点。
(7)设备装备。主机按照读取的USB设备描绘符来进行装备,假如设备所需的USB资源得以满意,就发送装备指令给USB设备,表明装备完毕。
(s)挂起。假如运用总线供电,为了节约电源,当总线坚持闲暇状况超越3ms今后,设备驱动程序就会进入挂起状况,在挂起状况时,USB设备保留了包含其地址和装备信息在内的一切内部状况,设备的耗费电流不超越500uA。
USB设备的枚举进程的详细阐明如下:
USB总线驱动程序自动检测新刺进的USB设备。然后它读取设备内的设备描绘符以查明刺进的是何种设备,描绘符中的厂商和产品标识以及其它描绘符一起决议详细装置哪一个驱动程序。装备管理器调用驱动程序的AddDvecie函数。AddDvecie做以下作业:创立造备目标,把设备目标衔接到驱动程序仓库上,等等。最终,装备管理器向驱动程序发送一个即插即用恳求IRP_MN_START_DEVICE。它通过调用一个名为StartDevice的辅佐函数并传递一些参数,这些参数描绘了赋予设备的通过转化的和未经转化的I/O资源。实际上它们不必任何I/O资源。 USB运用了许多方法来协助操作系统定位驱动程序,包含设备上的设备描绘符、装备描绘符,以及接口描绘符。关于有厂商和产品标识的设备,装备管理器首先在注册表中查找设备称号,例如名为USB\VID一0471&PID-0666的设备。假如注册表中没有这个表项,装备管理器将触发“新硬件导游” 来寻觅该设备的INF文件。新硬件导游向用户问询INF文件的方位,然后装置驱动程序并填写注册表。一旦装备管理器找到了注册表表项,它就能够动态地装载驱动程序。StartDveiee的履行进程大致如下,首先为设备挑选一个装备。假如你的设备像大多数设备相同,应该仅有一种装备。选定了某个装备后,接着应该挑选装备中的一个或多个接口。选定了一个装备和一组接口后,你应该向总线驱动程序发送装备挑选URB。最终,总线驱动程序向设备宣布指令确定能选定的装备和接口。总线驱动程序担任创立管道和用于拜访管道的句柄,管道供给功用驱动程序与选定接口端点之间的通讯,它一起还创立装备句柄和接口句柄。你能够从完结的URB中提取这些句柄,并保存为今后运用。至此,设备的枚举进程悉数完毕。