基本固件框架的追踪研读之描述符1

在USB协议中,将USB作为一个配置、端点和接口的集合。USB设备的描述符包括标准描述符、HID描述符和Hub描述符。这里主要介绍USB标准设备描述符。

这里写图片描述

1、设备描述符DeviceDscr

  用于表示USB设备的总体信息,一个USB设备只能有一个设备描述符。
这里写图片描述
这里写图片描述

  bcdUSB,的格式是0xAABC,其中AA是主版本号,B是次版本号,C是子次版本号(注意USB数据传输过程中,是先传低字节再传高字节),例如USB2.0,应设置成0200H,而在描述符的数据结构中就应该写成0002H;高字节表示整数,低字节的高四位代表十分位,低字节的低四位代表百分位,例如USB1.1,应该设置成0110H,而不是0101H,而在描述符的数据结构中就应该写成1001H。

  bDeviceClass,该字段值为0时,表示USB设备的各个接口相互独立,分别属于不同的设备类,在USB固件接口描述符中将进一步定义;该字段在1~FEH之间时,表示USB协议中定义的某个设备类;该字段为FFH时,表示是供应商自定义的设备类:
这里写图片描述

  可以看出,除非特殊需要(09H、EFH、FFH),都可以将其设置成00H,然后再在接口描述符中设定设备类型:
这里写图片描述
这里写图片描述

  bDeviceSubClass,如果bDeviceClass是0,该字段也必须是0;该字段是FFH时,表示由供应商自定义子类。
  bMaxPacketSize0 ,对于低速设备端点0所支持最大数据包长度是8;全速设备是8、16、32、64;高速设备是64。
  idVendor 、idProduct,是主机为其加载合适的驱动程序;

看一下设备描述符的源代码:
DeviceDscr:   
      db   DSCR_DEVICE_LEN      ;; Descriptor length
      db   DSCR_DEVICE          ;; Decriptor type
      dw   0002H      ;; Specification Version (BCD)
      db   00H        ;; Device class
      db   00H         ;; Device sub-class
      db   00H         ;; Device sub-sub-class
      db   64         ;; Maximum packet size
      dw   0B404H      ;; Vendor ID
      dw   0410H      ;; Product ID (Sample Device)
      dw   0000H      ;; Product version ID
      db   1         ;; Manufacturer string index
      db   2         ;; Product string index
      db   0         ;; Serial number string index
      db   1         ;; Number of configurations


2、配置描述符 ConfigDscr

这里写图片描述

  wTotalLength ,用于表示配置信息的总长度,包括配置描述符、接口描述符和端点描述符长度的总和。

  bConfigurationValue ,表明 Get Configuration and Set Configuration requests的配置,必须≥1 。

不懂啊

  iConfiguration ,指出用于描述该配置的字符串描述符的索引值,如果没有配置字符串,可以置为0 。

  bmAttributes ,(按位寻址)用于表示USB设备的配置特性,BIT6 = 1表示使用总线电源,BIT5 = 1表示支持远程唤醒;其他位保留,一般来说,BIT4~BIT0置0即可,BIT7置1即可。

HighSpeedConfigDscr:   
      db   DSCR_CONFIG_LEN               ;; Descriptor length
      db   DSCR_CONFIG                  ;; Descriptor type
      db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 ;; Total Length (LSB)
      db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr)  /  256 ;; Total Length (MSB)
      db   1      ;; Number of interfaces
      db   1      ;; Configuration number
      db   0      ;; Configuration string
      db   10000000b   ;; Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu)
      db   50      ;; Power requirement (div 2 ma)


3、字符串描述符 StringDscr

字符串描述符是可选的,用于保存一些供应商名称、产品序列号等文本信息。

这里写图片描述

这里的bString,实际上是由两种情况构成:bSTRING 或者wLANGID。

  对于字符串0,是一个或多个语言标识码(16BIT),比如U.S. English (0409h) ;对于其他字符串描述符则是一个Unicode UTF-16 LE字符串,这种编码格式下,大部分字符被编成16BIT,这种编码的低字节是字符的ASCII吗

StringDscr:

StringDscr0:   
      db   StringDscr0End-StringDscr0      ;; String descriptor length
      db   DSCR_STRING
      db   09H,04H
StringDscr0End:

StringDscr1:   
      db   StringDscr1End-StringDscr1      ;; String descriptor length
      db   DSCR_STRING
      db   'C',00
      db   'y',00
      db   'p',00
      db   'r',00
      db   'e',00
      db   's',00
      db   's',00
StringDscr1End:

StringDscr2:   
      db   StringDscr2End-StringDscr2      ;; Descriptor length
      db   DSCR_STRING
      db   'E',00
      db   'Z',00
      db   '-',00
      db   'U',00
      db   'S',00
      db   'B',00
StringDscr2End:

难道字符串的“索引值”,是字符串书写的自然顺序!



4、接口描述符

接口是端点的集合,负责完成该USB设备的特定功能

这里写图片描述

bNumEndpoints ,是端点0以外的本接口使用的所有端点。
;; Interface Descriptor
      db   DSCR_INTRFC_LEN      ;; Descriptor length
      db   DSCR_INTRFC         ;; Descriptor type
      db   0               ;; Zero-based index of this interface
      db   0               ;; Alternate setting
      db   4               ;; Number of end points 
      db   0ffH            ;; Interface class
      db   00H               ;; Interface sub class
      db   00H               ;; Interface sub sub class
      db   0               ;; Interface descriptor string index


5、端点描述符 Endpoint Descriptor

用于指出设备端点的特性,包括所支持的传输类型、传输方向等信息。

这里写图片描述

bEndpointAddress ,BIT7表示端点的传输方向,BIT7 = 1:IN;
BIT7 = 0 :OUT。BIT3~BIT0表示端点号。其余位均保留,必须置0.

这里写图片描述

这里写图片描述

这里写图片描述

上面的这段代码的所设置的端点如下:

这里写图片描述



6、设备限定描述符

这里写图片描述

这里写图片描述

DeviceQualDscr:
      db   DSCR_DEVQUAL_LEN   ;; Descriptor length
      db   DSCR_DEVQUAL   ;; Decriptor type
      dw   0002H      ;; Specification Version (BCD)
      db   00H        ;; Device class
      db   00H         ;; Device sub-class
      db   00H         ;; Device sub-sub-class
      db   64         ;; Maximum packet size
      db   1         ;; Number of configurations
      db   0         ;; Reserved
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值