固件框架的追踪研读之描述符1"/>
基本固件框架的追踪研读之描述符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 lengthdb DSCR_DEVICE ;; Decriptor typedw 0002H ;; Specification Version (BCD)db 00H ;; Device classdb 00H ;; Device sub-classdb 00H ;; Device sub-sub-classdb 64 ;; Maximum packet sizedw 0B404H ;; Vendor IDdw 0410H ;; Product ID (Sample Device)dw 0000H ;; Product version IDdb 1 ;; Manufacturer string indexdb 2 ;; Product string indexdb 0 ;; Serial number string indexdb 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 lengthdb DSCR_CONFIG ;; Descriptor typedb (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 ;; Total Length (LSB)db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) / 256 ;; Total Length (MSB)db 1 ;; Number of interfacesdb 1 ;; Configuration numberdb 0 ;; Configuration stringdb 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 lengthdb DSCR_STRINGdb 09H,04H
StringDscr0End:StringDscr1: db StringDscr1End-StringDscr1 ;; String descriptor lengthdb DSCR_STRINGdb 'C',00db 'y',00db 'p',00db 'r',00db 'e',00db 's',00db 's',00
StringDscr1End:StringDscr2: db StringDscr2End-StringDscr2 ;; Descriptor lengthdb DSCR_STRINGdb 'E',00db 'Z',00db '-',00db 'U',00db 'S',00db 'B',00
StringDscr2End:
难道字符串的“索引值”,是字符串书写的自然顺序!
4、接口描述符接口是端点的集合,负责完成该USB设备的特定功能
bNumEndpoints ,是端点0以外的本接口使用的所有端点。
;; Interface Descriptordb DSCR_INTRFC_LEN ;; Descriptor lengthdb DSCR_INTRFC ;; Descriptor typedb 0 ;; Zero-based index of this interfacedb 0 ;; Alternate settingdb 4 ;; Number of end points db 0ffH ;; Interface classdb 00H ;; Interface sub classdb 00H ;; Interface sub sub classdb 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 lengthdb DSCR_DEVQUAL ;; Decriptor typedw 0002H ;; Specification Version (BCD)db 00H ;; Device classdb 00H ;; Device sub-classdb 00H ;; Device sub-sub-classdb 64 ;; Maximum packet sizedb 1 ;; Number of configurationsdb 0 ;; Reserved
更多推荐
基本固件框架的追踪研读之描述符1
发布评论