每个USB设备必须响应默认管道上的设置包。设置包用于设备的检测和配置,并执行诸如设置USB设备的地址、请求设备描述符或检查端点状态等常见功能。兼容USB的主机要求所有请求在最长5秒钟内得到处理。它还为特定请求规定了更严格的时间安排:
没有数据阶段的标准设备请求必须在50ms内完成。
带有数据阶段的标准设备请求必须在请求500毫秒后开始返回数据。
每个数据包必须在前一个数据包成功传输后500毫秒内发送。
状态阶段必须在最后一个数据包传输后50ms内完成。
SetAddress命令(包含数据阶段)必须处理该命令并在50ms内返回状态。在发送下一个请求之前,设备有2ms的时间更改地址。
即使是最慢的设备也可以接受这些超时时间,但在调试期间可能会受到限制。50mS不允许在异步串行端口上以9600bps的速度发送许多调试字符,也不允许在线调试器/仿真器单步执行或中断执行以检查内部寄存器。因此,USB接口的调试方法与其它单片机项目不同。
随便读一下XP-DDK,你可能会注意到主机控制器驱动程序现在有一个USBUSER_OP_SEND_one_PACKET命令,注释为“此API用于实现‘单步’USB事务开发工具”。虽然这样的工具还没有发布,但我们只能希望很快看到一个。
每个请求以一个8字节长的设置包开始,其格式如下:,抵消场大小价值说明zeroBM请求类型one位图D7数据相转移方向
0 = Host to Device1 = Device to HostD6..5型
0 = Standard1 = Class2 = Vendor3 = ReservedD4..0收件人
0 = Device1 = Interface2 = Endpoint3 = Other4..31 = Reservedone布雷奎斯特one价值请求twoWValuetwo价值价值four温得克斯two索引或偏移量索引sixW长度two计数如果存在数据阶段,要传输的字节数这个 BM请求类型字段将确定请求的方向、请求的类型和指定的收件人 布雷奎斯特字段确定正在发出的请求。bmRequestType通常被解析,执行被分支到许多处理程序,例如标准设备请求处理程序、标准接口请求处理程序、标准端点请求处理程序、类设备请求处理程序等。如何解析安装程序包完全取决于您的喜好。其他人可以选择先解析bRequest,然后根据每个请求确定类型和接收者。所有USB设备的标准请求都是通用的,下一页将详细介绍。类请求对于驱动程序类是通用的。例如,所有符合HID类的设备都将有一组通用的类特定请求。这些将不同于符合通信类的设备,也不同于转换为大容量存储类的设备。最后是供应商定义的请求。这些是你作为USB设备设计者可以分配的请求。这些通常因设备而异,但这完全取决于您的实现和想象。一个共同的请求可以被定向到不同的接收者,并根据接收者执行不同的功能。例如,GetStatus标准请求可以定向到设备、接口或端点。当定向到某个设备时,它将返回指示远程唤醒状态以及设备是否自供电的标志。但是,如果同一个请求被定向到接口,它总是返回零,或者如果它被定向到一个端点,它将返回该端点的halt标志。这个WValue和 温得克斯字段允许参数随请求一起传递。 W长度如果存在数据阶段,则指定要传输的字节数。
USB规范第9.4节详细说明了每个USB设备需要实现的“标准设备”请求。该标准提供了按请求对项目分组的单个表。考虑到大多数固件将按接收者解析设置包,我们将选择按接收者分解请求,以便于检查和实现。
目前有8个标准设备请求,下表详细说明了这些请求。BM请求类型布雷奎斯特WValue温得克斯W长度数据1000万B获取状态(0x00)零零二设备状态0000万B清除功能(0x01)功能选择器零零没有0000万B设置功能(0x03)功能选择器零零没有0000万B设置地址(0x05)设备地址零零没有1000万B获取描述符(0x06)描述符类型和索引零或语言ID描述符长度描述符0000万B集合描述符(0x07)描述符类型和索引零或语言ID描述符长度描述符1000万B获取配置(0x08)零零one配置值0000万B设置配置(0x09)配置值零零没有
这个获取状态针对设备的请求将在数据阶段返回两个字节,格式如下:,15号公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4号D3D2号D1D0号保留远程唤醒自供电如果设置了D0,则表示设备为自供电。如果清除,则设备为总线供电。如果设置了D1,则设备已启用远程唤醒,并且可以在挂起期间唤醒主机。远程唤醒位可以通过SetFeature和ClearFeature请求,并使用DEVICE_remote_wakeup(0x01)的功能选择器进行
清除特征和设置功能请求可用于设置布尔特征。当指定的接收者是设备时,只有两个可用的功能选择器是device_REMOTE_WAKEUP和TEST_MODE。测试模式允许设备显示各种条件。这些在USB规范修订版2.0中有进一步的记录。
设置地址在枚举期间用于为USB设备分配唯一地址。地址是用wValue指定的,最大只能是127。此请求的唯一性在于设备在完成状态阶段之后才设置其地址。(参见控制权转让)所有其他请求必须在状态阶段之前完成。
设置描述符/获取描述符用于返回wValue中的指定描述符。对配置描述符的请求将在一个请求中返回设备描述符以及所有接口和端点描述符。终结点描述符无法由GetDescriptor/SetDescriptor请求直接访问。接口描述符无法由GetDescriptor/SetDescriptor请求直接访问。字符串描述符在wIndex中包含一个语言ID,以支持多种语言。
获取配置/设置配置用于请求或设置当前设备配置。在Get配置请求的情况下,将在数据阶段返回一个字节,指示设备状态。零值表示设备未配置,非零值表示设备已配置。设置配置用于启用设备。它应该包含所需的bConfigurationValue的值配置描述符在wValue的低字节中选择要启用的配置。
该规范目前定义了五个标准接口请求,详细信息见下表。有趣的是,只有两个请求可以做任何可以理解的事情。
温得克斯通常用于为指向接口的请求指定引用接口。其格式如下所示。15号公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4号D3D2号D1D0号保留接口编号
获取状态用于返回接口的状态。对接口的这种请求应该返回两个字节0x00、0x00。两个字节都保留供将来使用
清除特征和设置功能请求可用于设置布尔特征。当指定的接收者是接口时,当前的USB规范修订版2没有指定接口特性。
获取接口和设置接口设置替代接口设置,在接口描述符 .
标准端点请求有以下四种类型。BM请求类型布雷奎斯特WValue温得克斯W长度数据1000 0010b获取状态(0x00)零终结点二终结点状态0000 0010b清除功能(0x01)功能选择器终结点零没有0000 0010b设置功能(0x03)功能选择器终结点零没有1000 0010b同步帧(0x12)零终结点二框架
这个 温得克斯字段通常用于指定指向端点的请求的引用端点和方向。其格式如下所示。15号公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4号D3D2号D1D0号保留去吧保留终结点编号
获取状态返回两个字节,指示终结点的状态(暂停/暂停)。返回的两个字节的格式如下所示。15号公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4号D3D2号D1D0号保留停止
清除特征和设置功能用于设置端点特征。该标准目前定义了一个端点特性选择器endpoint_HALT(0x00),它允许主机暂停和清除一个端点。建议只有默认端点以外的端点具有此功能。
A 同步帧请求用于报告端点同步帧。