USB设备的产品信息和设备的能力在USB的描述符中进行了定义。 当USB功能设备连接到USB主机上后,USB主机通过标准的USB请求命令和USB功能设备通信,读取USB描述符,从而获得USB的功能设备的产品信息和功能配置,以便加载相应的USB驱动。

  标准的USB设备请求命令是用在控制传输中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成),标准USB设备请求命令共有11个,大小都是8个字节,具有相同的结构,由5 个字段构成(字段是标准请求命令的数据部分),结构如下(括号中数字表示字节数): bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLength(2)   各字段的意义如下:

1、bmRequestType:D7D6D5D4D3D2D1D0 D7=0主机到设备 =1设备到主机; D6D5=00标准请求命令 =01 类请求命令 =10用户定义的命令 =11保留值 D4D3D2D1D0=00000 接收者为设备 =00001 接收者为接口 =00010 接收者为端点 =00011 接收者为其他接收者 =其他 其他值保留

2、bRequest:请求命令代码,在标准的USB命令中,每一个命令都定义了编号,编号的值就为字段的值,编号与命令名称如下(要注意这里的命令代码要与其他字段结合使用,可以说命令代码是标准请求命令代码的核心,正是因为这些命令代码而决定了11个USB标准请求命令):

 0) 0 GET_STATUS:用来返回特定接收者的状态

 1) 1 CLEAR_FEATURE:用来清除或禁止接收者的某些特性

 2) 3 SET_FEATURE:用来启用或激活命令接收者的某些特性

 3) 5 SET_ADDRESS:用来给设备分配地址

 4) 6 GET_DEscriptOR:用于主机获取设备的特定描述符

 5) 7 SET_DEscriptOR:修改设备中有关的描述符,或者增加新的描述符

 6) 8 GET_CONFIGURATION:用于主机获取设备当前设备的配置值(注同上面的不同)

 7) 9 SET_CONFIGURATION:用于主机指示设备采用的要求的配置

 8) 10 GET_INTERFACE:用于获取当前某个接口描述符编号

 9) 11 SET_INTERFACE:用于主机要求设备用某个描述符来描述接口

10) 12 SYNCH_FRAME:用于设备设置和报告一个端点的同步帧

  USB主机发送SETUPDAT 数据包,USB功能设备将其进行解码,获得USB主机的设备请求。然后USB固件程序调用相应的响应函数对USB主机请求进行响应。典型的USB设备请求响应程序代码使用switch-case语句对不同的请求码(如用SETUPDAT[1]表示)进行分析,分别进行响应。

相关文章:

  • 2021-08-14
  • 2022-12-23
  • 2022-01-21
  • 2021-06-06
  • 2021-06-18
  • 2021-11-30
  • 2022-12-23
  • 2022-01-18
猜你喜欢
  • 2021-05-06
  • 2021-06-25
  • 2021-12-05
  • 2021-10-12
  • 2021-11-22
  • 2021-07-13
  • 2022-12-23
相关资源
相似解决方案