您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子元器件>接口定义>

USB主机如何识别USB设备及请求命令 - 全文

2011年07月16日 10:36 电子发烧友 作者:叶子 用户评论(0

 

  USB主机是如何识别USB设备的?

  当USB设备插上主机时,主机就通过一系列的动作来对设备进行枚举配置(配置是属于枚举的一个态,态表示暂时的状态),这这些态如下:

  1、接入态(Attached):设备接入主机后,主机通过检测信号线上的电平变化来发现设备的接入;

  2、供电态(Powered):就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据中要求的最大值,可通过编程设置)

  3、缺省态(Default):USB在被配置之前,通过缺省地址0与主机进行通信;

  4、地址态(Address):经过了配置,USB设备被复位后,就可以按主机分配给它的唯一地址来与主机通信,这种状态就是地址态;

  5、配置态(Configured):通过各种标准的USB请求命令来获取设备的各种信息,并对设备的某此信息进行改变或设置。

  6、挂起态(Suspended):总线供电设备在3ms内没有总线操作,即USB总线处于空闲状态的话,该设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280UA。

  标准的USB设备请求命令究竟是什么?

  标准的USB设备请求命令是用在控制传输中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成)。标准USB设备请求命令共有11个,大小都是8个字节,具有相同的结构,由5个字段构成(字段是标准请求命令的数据部分),结构如下(括号中的数字表示字节数,首字母bm,b,w分别表示位图、字节,双字节):

  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:用于设备设置和报告一个端点的同步帧

  以上的11个命令要说得明白真的有一匹布那么长,请各位去看书吧,这里就不多说了,控制传输是USB的重心,而这11个命令是控制传输的重心,所以这11个命令是重中之重,这个搞明白了,USB就算是入门了。

上一页12全文

非常好我支持^.^

(5) 100%

不好我反对

(0) 0%

( 发表人:叶子 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!