天天看点

[Enumeration]USB总线枚举过程

简述

USB总线的枚举大体过程

过程

主机向USB设备发出GetDescriptor(Device)请求,以取得其缺省控制管道所支持的最大数据包长度,该长度包包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8字节。

主机向USB设备发出SetAddress请求,为其分配一个惟一的设备地址,USB设备必须在50ms内完成对该请求的处理,并结束其控制传输的状态阶段。之后再经过2ms的恢复时间,USB设备将进入地址状态,这时它不再使用缺省设备地址,而将使用这个新的地址和主机进行通信,该地址只有在USB设备断开或系统断电时才会丢失。

主机使用新地址向USB设备发出GetDescriptor(Device)请求,并读取其设备描述符的全部字段,以了解该设备的总体信息。

主机向USB设备循环发出GetDescriptor(Configuration)请求,以读取其全部配置信息(其个数由设备描述符的bNumConfigurations字段指出),该过程需要花费几毫秒。在读取某一配置信息时,主机首先请求其配置描述符(9字节),并得到该配置信息的总长度(包含在配置描述符的wTotalLength字段中),然后主机再次发出该GetDescriptor(Configuration)请求,并得到完整的配置信息,包括配置描述符、接口描述符、端点描述符以及各种设备类定义描述符和供应商自定义描述符等。

继续阅读