USB规范解析:命令结构与标准请求

需积分: 5 2 下载量 65 浏览量 更新于2024-08-03 收藏 409KB PDF 举报
"USB学习笔记-命令与描述符.pdf" USB(通用串行总线)是一种广泛应用于电子设备中的接口标准,它允许设备与主机之间进行数据交换,并提供电源管理。USB规范定义了一系列命令(Request),用于控制USB设备的行为。在USB通信中,主机(Host)扮演主动角色,向设备发送命令,而设备则负责响应。 一、USB命令结构 每个USB命令都由一个固定的结构组成,包括以下字段: 1. bmRequestType(1字节):这个字段决定了命令的传输方向、种类和接收者。其中D7位表示传输方向,0表示主机到设备,1表示设备到主机;D6到D5位确定命令种类,如标准、类、厂商;D4到D0位定义命令接收者,可以是设备、接口、端点或其他。 2. bRequest(1字节):这个字段编码了具体的命令类型,如Clear_Feature、Get_Configuration等。 3. wValue(2字节):命令相关的值,含义因命令而异,可能是设置的特性、选择的配置或索引等。 4. wIndex(2字节):通常用于传递索引或偏移,例如接口号或端点号。 5. wLength(2字节):如果存在数据传输阶段,这个字段指示了数据的字节数。 二、USB的11种标准命令 1. Clear_Feature:清除设备或端点的特定特性,bmRequestType为00000000B,bRequest为00000001B,wValue为特性选择符,wIndex为接口号或端点号,无数据传输。 2. Get_Configuration:获取设备当前的配置,bmRequestType为10000000B,bRequest为GET_CONFIGURATION,wValue为零,wIndex为零,返回配置值。 3. Get_Descriptor:获取设备的描述符,如设备描述符、配置描述符等,bmRequestType同样为10000000B,bRequest为GET_DESCRIPTOR,wValue包含描述符种类和索引,wIndex为零或语言标志,返回描述符内容。 4. Get_Interface:获取当前接口设置,bmRequestType为10000000B,bRequest为GET_INTERFACE,wValue为零,wIndex为接口号,返回接口设置。 5. Get_Status:获取设备、接口或端点的状态,bmRequestType为10000000B,bRequest为GET_STATUS,wValue和wIndex根据需求设置,无数据传输。 6. Set_Address:设置设备的地址,bmRequestType为00000000B,bRequest为SET_ADDRESS,wValue为新设备地址,wIndex为零,无数据传输。 7. Set_Configuration:设置设备的配置,bmRequestType为00010000B,bRequest为SET_CONFIGURATION,wValue为所选配置的值,wIndex为零,无数据传输。 8. Set_Descriptor:更新设备的描述符,不常用,bmRequestType为00100000B,bRequest为SET_DESCRIPTOR,wValue和wIndex根据描述符类型和索引设置,有数据传输。 9. Set_Interface:设置接口的替代设置,bmRequestType为00010000B,bRequest为SET_INTERFACE,wValue为接口设置,wIndex为接口号,无数据传输。 10. Set_Feature:设置设备或端点的特性,bmRequestType为00010000B,bRequest为SET_FEATURE,wValue为特性选择符,wIndex为接口号或端点号,无数据传输。 11. Synch_Frame:同步帧,用于同步设备,bmRequestType为00110000B,bRequest为SYNCH_FRAME,wValue和wIndex根据需要设置,无数据传输。 三、描述符 描述符是USB设备用来描述自身属性的结构,如设备描述符、配置描述符、接口描述符、端点描述符等。主机通过Get_Descriptor命令来获取这些信息,以了解设备的功能和如何与其交互。 总结来说,USB命令和描述符是USB通信的基础,通过它们,主机能够控制和查询USB设备,而设备则能正确地响应并提供必要的信息。理解这些命令和描述符的工作方式对于理解和开发USB设备或驱动程序至关重要。