I want to be a complete engineer - technical genius and sensitive humanist all in one!

Thursday, March 12, 2009

USB设备配置-based CY7C68013

在USB协议中,将USB设备作为一个配置、端点和接口的集合。一般采用USB描述符对该USB设备的功能进行描述。USB主机通过读取这些描述符来使该USB 功能设备执行相应的功能,以及产品信息。本文主要描述USB标准设备描述符,包含以下内容【所有示例代码均基于Cypress CY7C68013平台】:
USB 的描述符
设备描述符(Device)
配置描述符(Configuration)
字符串描述符(String)
接口描述符(Interface)
端点描述符(Endpoint)
设备限定描述符(Device_Qualifier)
其他速率配置描述符(Other_Speed_Configuration)


1 USB的描述符
在USB 协议中,USB设备采用标准的USB描述符来说明。这些描述符包括设备描述符、
配置描述符、接口描述符、端点描述符、字符串描述符、设备限定描述符和其他速率配置描
述符,其中设备限定描述符和其他速率配置描述符用于高速USB 设备。标准USB描述符的
类型值,如表1 所示。
表1 标准USB 描述符的类型值
描述符的类型 值
设备描述符 1
配置描述符 2
字符串描述符 3
接口描述符 4
端点描述符 5
设备限定描述符 6
其他速率配置描述符 7
这些标准的描述符表示了USB 设备的特性。这些描述符中的字段均有固定的排列顺序,一般来说bLength 为第一个字段,bDescriptorType 为第二个字段。这些字段名称的前缀指出了该字段值的长度,有如下几类:
•b 表示一个字节(8byte);
•w表示一个字(16byte);
•bm表示按位寻址;
•bcd表示采用二进制编码的10 进制数;
•i表示索引值;
•id 表示标识码。
2 设备描述符
USB 的设备描述符用于表示USB 设备的总体信息,一个USB 设备只能有一个设备描述符(Device)。设备描述符中的设置值对该设备中同一传输模式下的所有配置都有效。
2.1 设备描述符定义
USB 设备描述符由14 个字段组成,总长度固定为18个字节,其格式如表2所示。

表2 设备描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(12H字节)
bDescriptorType 1 1 描述符的类型:设备描述符=01H
bcdUSB 2 2 USB 规范版本号(采用BCD码)
bDeviceClass 1 4 类代码
bDeviceSubClass 1 5 子类代码
bDeviceProtocol 1 6 协议代码
bMaxPackerSize0 1 7 端点0 支持最大数据包的长度
idVendor 2 8 供应商ID
idProduct 2 10 产品ID
bcdDevice 2 12 设备版本号(采用BCD 码)
iManufacturer 1 14 供应商字符串描述符的索引值
iProduct 1 15 产品字符串描述符的索引值
iSerialNumber 1 16 设备序列号字符串描述符的索引值
bNumConfigurations 1 17 所支持的配置数
下面详细说明各个字段的含义。
•bLength:用于表示设备描述符的长度,固定为18 个字节,即12H。
•bDescriptorType:用于表示设备描述符的类型值,固定为01H。
•bcdUSB:用于表示该USB 设备所遵循的USB 规范版本号,以BCD码的形式表示。格式为0xAABC,其中AA 为主版本号,B 为次版本号,C为子次版本号。例如高速USB 版本为USB2.0,即设置为0200H。
•bDeviceClass:用于表示该USB 设备所属的标准设备类。该字段值在1~FEH之间的时候,表示USB协议中定义的某个设备类,如03H表示HID 设备类;当为0时,表示USB设备的各个接口互相独立,分别属于不同的设备类,在USB 固件接口描述符中将进一步定义;
当为FFH 时,表示由供应商自定义该设备类。
•bDeviceSubClass:用于表示USB 设备所属的标准设备子类,主要用于对USB 设备类进行了更加细致的定义。例如对于前面的HID设备类,只有一个子类代码01H。而对于显示设备类(04H),子类代码01H表示CRT 显示器、02H表示平面显示器、03H 表示3D 显示器。当bDeviceClass=0 时,该字段也必须为0;当该字段为FFH 时,表示由供应商自定义设备子类。
•bDeviceProtocol:用于表示USB 设备所采用的设备类协议,其值和bDeviceClass 及
bDeviceSubClass 的值有关。当该字段为0 时,表示不使用任何设备类协议。如果该USB 设备属于某个设备类和设备子类,则应该继续指明所采用的设备类协议。当该字段为FFH 时,表示设备类协议由供应商自定义。
•bMaxPackerSize0:用于表示在USB设备中,端点0 所支持最大数据包的长度,它以
字节为单位。对于低速USB设备,bMaxPackerSize0为8;对于全速USB设备,bMaxPackerSize0
为8、16、32或64;对于高速USB 设备bMaxPackerSize0为64。
•idVendor:用于表示USB 设备供应商的ID。USB组织中规定每种产品都必须包含一个供应商ID,这样可以使主机为其加载合适的驱动程序。
•idProduct:用于表示USB设备产品的ID,由设备供应商提供。idProduct用于表示特定的USB 设备,在USB设备上电的时候可以帮助USB 主机选择合适的驱动程序。
•bcdDevice:用于表示USB设备的版本号,它以BCD码的形式表示。一般来说bcdDevice由设备供应商指定,在USB设备上电的时候可以帮助USB主机加载合适的驱动程序。
•iManufacturer:用于表示供应商字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有供应商字符串,可以置为0。
•iProduct:用于表示产品字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有产品字符串,可以置为0。
•iSerialNumber:用于表示设备序列号字符串描述符的索引值,如果没有,可以置为0。
•bNumConfigurations:用于表示该USB设备所支持的配置数。
2.2 设备描述符示例
典型的USB设备描述符的定义示例如下,采用汇编语言进行描述:
DeviceDscr:
db DSCR_DEVICE_LEN ;描述符长度
db DSCR_DEVICE ;描述符类型
dw 0002H ;规范(BCD)
db 00H ;设备类
db 00H ;设备子类
db 00H ;设备协议子类
db 64 ;最大数据包长度
dw 0B404H ;供应商ID
dw 0410H ;产品ID
dw 0000H ;设备版本号
db 1 ;供应商字符串索引
db 2 ;产品字符串索引
db 0 ;序列号字符串索引
db 1 ;所支持的配置数
3 配置描述符
在USB 协议中,USB 设备可以有一个或多个配置,每个配置都必须有一个配置描述符
(Configuration)。配置描述符用于表示USB设备的配置信息。
3.1 配置描述符定义
配置描述符由8个字段组成,长度固定为9 个字节,其格式见表3。
表3 配置描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(09H字节)
bDescriptorType 1 1 描述符的类型:配置描述符=02H
wTotalLength 2 2 配置信息的总长度
bNumInterfaces 1 4 该配置所支持的接口数
bConfigurationValue 1 5 配置值
iConfiguration 1 6 字符串描述符的索引值
bmAttributes 1 7 配置特性
bMaxPower 1 8 所需要的最大总线电流(2mA 为单位)
下面详细说明各个字段的含义。
•bLength:用于表示配置描述符的长度,固定为9 个字节,即09H。
•bDescriptorType:用于表示配置描述符的类型值,固定为02H。
•wTotalLength:用于表示配置信息的总长度,包括配置描述符、接口描述符和端点描述符长度的总和。
•bNumInterfaces:用于表示配置所支持的接口数。一般来说,USB 设备的接口至少有一个,因此其最小值为1。
•bConfigurationValue:用于表示USB 设备的配置值。
•iConfiguration:用于指出配置字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有配置字符串,可以置为0。
•bmAttributes:用于表示USB 设备的配置特性。bmAttributes 是按位寻址的,第6 位
置1 表示使用总线电源;第5 位置1表示支持远程唤醒功能;该字段的其他位均保留,一般来说,第0~4位置0 即可,第7位置1 即可。
•bMaxPower:用于表示USB 设备运行时所需要消耗的总线电流,单位以2mA 为基准。
USB 设备可以从USB总线上获得最大的电流为500mA,因此bMaxPower字段的最大值可以
设置为250。

3.2 配置描述符示例
典型的USB配置描述符的定义示例如下,采用汇编语言进行描述:
ConfigDscr:
db DSCR_CONFIG_LEN ;描述符长度
db DSCR_CONFIG ;描述符类型
db (ConfigDscrEnd-ConfigDscr) mod 256;长度(LSB)
db (ConfigDscrEnd-ConfigDscr) / 256;长度(MSB)
db 1 ;接口数
db 1 ;配置数
db 0 ;配置字符串
db 10000000b ;特性(b7 - buspwr, b6 - selfpwr, b5 - rwu)
db 100 ;功率需求
ConfigDscrEnd: ;结束
4 字符串描述符
在USB 协议中,字符串描述符(String)是可选的。字符串描述符用于保存一些供应商名称、产品序列号等文本信息。
4.1 字符串描述符定义
字符串描述符由3 个字段组成,其长度随字符串的数量和信息的长度而变化。字符串描述符的格式见表5.4。
表4 字符串描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(N+2 字节)
bDescriptorType 1 1 描述符的类型:字符串描述符=03H
bString N 2 字符串
下面详细说明各个字段的含义:
•bLength:用于表示字符串描述符的长度,如果字符串长度为N,则其值为N+2;
•bDescriptorType:用于表示字符串描述符的类型值,固定为03H;
•bString:UNICODE编码的字符串。
4.2 字符串描述符示例
典型的USB字符串描述符的定义示例如下,其中定义了两个字符串,采用汇编语言进行描述:
StringDscr:
StringDscr0:
db StringDscr0End-StringDscr0 ;字符串描述符长度
db DSCR_STRING
db 09H,04H
StringDscr0End:
StringDscr1:
db StringDscr1End-StringDscr1 ;字符串描述符长度
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:
5 接口描述符
在USB 协议中,USB设备的接口是一个端点的集合,负责完成该USB 设备的特定功能,例如数据输入和输出。USB 设备的每一个接口都必须有一个接口描述符(Interface),接口描述符用来表示USB 设备中各个接口的特性,包括接口的端点个数、所属的设备类和子类等。
5.1 接口描述符定义
接口描述符由9个字段组成,长度固定为9 个字节,其格式见表5。
表5 接口描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(09H字节)
bDescriptorType 1 1 描述符的类型:接口描述符=04H
bInterfaceNumber 1 2 接口号
bAlterateSetting 1 3 可替换设置值
bNumEndpoints 1 4 端点0 以外的端点数
bInterfaceClass 1 5 类代码
bInterfaceSubClass 1 6 子类代码
bInterfaceProtocol 1 7 协议代码
iInterface 1 8 字符串描述符的索引值
下面详细说明各个字段的含义。
•bLength:用于表示接口描述符的长度,固定为9 个字节,即09H。
•bDescriptorType:用于表示接口描述符的类型值,固定为04H。
•bInterfaceNumber:用于表示接口的接口号。
•bAlterateSetting:用于表示接口的可替换设置值。
•bNumEndpoints:用于表示接口所使用的端口数,除端点0以外的所有端点。
•bInterfaceClass:用于表示接口所属的设备类。当bInterfaceClass在1~FEH 范围内时,表示该接口属于USB 定义的某个设备类;当该字段指为FFH 时,它表示该设备类是供应商自定义的。
•bInterfaceSubClass:用于表示接口所属的USB 设备子类。当bInterfaceClass=0时,该字段必须为0;如果bInterfaceClass字段在1~FEH之间,则该字段需进一步表示设备子类;当该字段为FFH 时,表示由供应商自定义设备子类。
•bInterfaceProtocol:用于表示接口所采用的USB 设备类协议,其值和bInterfaceClass及bInterfaceSubClass的值有关。当该字段为0 时,表示不使用任何设备类协议。如果该USB设备属于某个设备类和设备子类,则应该继续指明所采用的设备类协议。当该字段为FFH 时,表示由供应商自定义设备类协议。
•iInterface:用于指出接口字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有配置字符串,可以置为0。
5.2 接口描述符示例
典型的USB接口描述符的定义示例如下,采用汇编语言进行描述:
;接口描述符
db DSCR_INTRFC_LEN ;描述符长度
db DSCR_INTRFC ;描述符类型
db 0 ;接口号
db 0 ;可替换设置值
db 6 ;端点数
db 0ffH ;类代码
db 00H ;子类代码
db 00H ;协议代码
db 0 ;接口描述字符串索引
6 端点描述符
在USB 协议中,端点描述符(Endpoint)用于指出USB 设备端点的特性,包括其所支持的传输类型、传输方向等信息。USB 中规定,端点0 没有端点描述符,其余端点必须包含端点描述符。
6.1 端点描述符定义
端点描述符由6个字段组成,其长度固定为7个字节。端点描述符格式见表6。
表6 端点描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(07H字节)
bDescriptorType 1 1 描述符的类型:端点描述符=05H
bEndpointAddress 1 2 端点号、传输方向
bmAttributes 1 3 端点特性
wMaxPacketSize 2 4 最大数据包长度
bInterval 1 6 访问间隔
下面详细说明各个字段的含义。
•bLength;用于表示端点描述符的长度,固定为7 个字节,即07H。
•bDescriptorType:用于表示接口描述符的类型值,固定为05H。
•bEndpointAddress:用于表示端点的端点号以及端点的数据传输方向。第7 位表示端点的数据传输方向,0 表示OUT 数据传输,1 表示IN 数据传输;第0~3 位表示端点号,例如001B表示端点1、010B 表示端点2等;其余位均保留,必须置0。
•bmAttributes:用于表示端点的特性。其中第0 位和第1位表示端点的数据传输类型,00B 表示控制传输、01B 表示同步传输、10B 表示块传输、11B 表示中断传输;如果是同步传输,第2 位和第3 位表示同步类型,00B 表示非同步、01B 表示异步、10B 表示自适应、
11B 表示同步;第4 位和第5 位表示端点的用法类型,00B 表示数据端点、01B 表示显示反馈端点、10B表示隐式反馈端点、11B保留。其余位保留。
•wMaxPacketSize:用于表示端点所支持最大数据包的长度。其中第0~10位表示数据包长度,第11位和第12位指出每小帧最多传输的事务处理数,其余位均保留,必须置0。
•bInterval:用于指定端点数据传输的访问间隔。低速中断端点,取值范围为10~255,对应的访问间隔为10~255ms;对于全速中断端点,取值范围为1~255,对应的访问间隔为1~255ms;对于其他的端点,可以参阅USB 相关协议。
6.2 端点描述符示例
典型的USB端点描述符的定义示例如下,采用汇编语言进行描述:
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 02H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 04H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 86H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 88H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
其中定义了4 个端点,下面分别介绍这4个端点的属性。
•端点02,块传输输出端点,最大数据包长度512 个字节。
•端点04,块传输输出端点,最大数据包长度512 个字节。
•端点86,块传输输入端点,最大数据包长度512 个字节。
•端点88,块传输输入端点,最大数据包长度512 个字节。
7 设备限定描述符
在高速USB 系统中,如果USB 设备既需要采用高速传输又需要全速传输,则它必须支持设备限定描述符(Device_Qualifier),设备限定描述符用以指出另一传输速率下该设备的总体信息。
7.1 设备限定描述符定义
设备限定符由9个字段组成,长度固定为10个字节。设备限定描述符格式见表7。
表7 设备限定描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(0AH 字节)
bDescriptorType 1 1 描述符的类型:设备限定描述符=06H
bcdUSB 2 2 USB 规范版本号(采用BCD码)
bDeviceClass 1 4 类代码
bDeviceSubClass 1 5 子类代码
bDeviceProtocol 1 6 协议代码
bMaxPackerSize0 1 7 端点0 所支持最大数据包的长度
bNumConfigurations 1 8 所支持的配置数
bReserved 1 9 保留
下面详细说明各个字段的含义。
•bLength:用于表示设备限定描述符的长度,固定为10 个字节,即0AH。
•bDescriptorType:用于表示设备限定描述符的类型值,固定为06H。
•bcdUSB:用于表示USB 设备及其描述符所遵循的USB 规范版本号,以BCD 码的形式表示,其值必须在版本2.0 以上。
•bDeviceClass:用于表示USB 设备所属的设备类。该字段值在1~FEH 之间的时候,表示为USB定义的某个设备类,如03H表示HID设备类。当为0 时,表示USB 设备的各个接口互相独立,分别属于不同的设备类,在接口描述符中会进一步说明。当为FFH 时,表示该设备为供应商自定义的。
•bDeviceSubClass:用于表示USB 设备所属的设备子类,其对USB设备类进行了更详细的定义。例如对于前面的HID设备类,只有一个子类代码01H。而对于显示设备类(04H),子类代码01H表示CRT显示器、02H表示平面显示器、03H表示3D显示器。当bDeviceClass=0时,该字段也必须为0;当该字段为FFH 时,表示由供应商自定义设备子类。
•bDeviceProtocol:用于表示USB 设备所采用的设备类协议,其值和bDeviceClass 及
bDeviceSubClass 的值有关。当该字段为0 时,表示不使用任何设备类协议。如果该USB 设备属于某个设备类和设备子类,则应该继续指明所采用的设备类协议。当该字段为FFH 时,表示由供应商自定义设备类协议。
•bMaxPackerSize0:用于表示USB 设备端点0所支持最大数据包的长度,它以字节为单位。对于低速USB 设备,bMaxPackerSize0 为8;对于全速USB 设备,bMaxPackerSize0为8、16、32或64;对于高速USB 设备bMaxPackerSize0为64。
•bNumConfigurations:用于表示USB 设备另一个速率所支持的配置数。
•bReserved:保留项,必须置0。
7.2 设备限定描述符示例
典型的USB设备限定描述符的定义示例如下,采用汇编语言进行描述:
DeviceQualDscr:
db DSCR_DEVQUAL_LEN ;描述符长度
db DSCR_DEVQUA ;描述符类型
dw 0002H ;规范(BCD)
db 00H ;设备类
db 00H ;设备子类
db 00H ;设备协议子类
db 64 ;最大数据包长度
db 1 ;配置数
db 0 ;保留
8 其他速率配置描述符
在高速USB 系统中,如果USB 设备既需要采用高速传输又需要全速传输,则必须支持其他速率配置描述符(Other_Speed_Configuration)。其他速率配置描述符指出了另一个传输速率下该设备的配置信息。
8.1 其他速率配置描述符定义
其他速率配置描述符由8个字段组成,长度固定为9字节。其他速率配置描述符各个字段的格式及含义见表8。
表8 其他速率配置描述符格式
字 段 名 长度/字节 地址偏移量说明
bLength 1 0 描述符的长度(09H字节)
bDescriptorType 1 1 描述符的类型:其他速率配置描述为07H
wTotalLength 2 2 配置信息的总长度
bNumInterfaces 1 4 所支持的接口数
bConfigurationValue 1 5 配置值
iConfiguration 1 6 字符串描述符的索引值
bmAttributes 1 7 配置特性
bMaxPower 1 8 所需要的最大USB总线电流(2mA为单位)
下面详细说明各个字段的含义。
•bLength:用于表示其他速率配置描述符的长度,固定为9个字节,即09H。
•bDescriptorType:用于表示其他速率配置描述符的类型值,固定为07H。
•wTotalLength:用于表示其他速率配置信息的总长度,包括配置描述符、接口描述符、端点描述符、设备类定义描述符和供应商自定义描述符的总和。
•bNumInterfaces:用于表示其他速率配置所支持的接口数。
•bConfigurationValue:用于表示其他速率配置值。
•iConfiguration:用于指出配置字符串描述符的索引值,具体字符串的内容在后面字符串描述符中定义。如果没有配置字符串,可以置为0。
•bmAttributes:用于表示配置特性。它是按位寻址的,第6 位置1 表示使用总线电源;
第5 位置1表示支持远程唤醒功能;该字段的其他位均保留,一般来说,第0~4 位应该置0,第7 位应该置1。
•bMaxPower:用于表示USB 设备运行时所需要消耗的总线电流,单位以2mA 为基准。USB 设备可以从USB总线上获得最大的电流为500mA,因此该字段的最大值为250。
8.2 其他速率配置描述符示例
典型的USB配置描述符的定义示例如下,采用汇编语言进行描述:
OtherSpeedConfigDscr:
db DSCR_CONFIG_LEN ;描述符长度
db DSCR_CONFIG ;描述符类型
db (OtherSpeedConfigDscrEnd-OtherSpeedConfigDscr) mod 256;长度(LSB)
db (OtherSpeedConfigDscrEnd-OtherSpeedConfigDscr) / 256;长度(MSB)
db 1 ;接口数
db 1 ;配置数
db 0 ;配置字符串
db 10000000b ;特性(b7 - buspwr, b6 - selfpwr, b5 - rwu)
db 50 ;功率需求
OtherSpeedConfigDscrEnd: ;结束
9 小结
本文主要讲解了USB设备各种描述符的结构及配置,包括设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符和其他速率配置描述符。USB设备描述符是USB功能设备设计的基础,每个USB设备都需要有完善的描述符。

No comments:

Labels

Followers