完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
dscr51里放的是USB描述符表,EZ-USB在重枚举阶段会读取或设置相应的描述符:
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[url=][/url] 【1】db DSCR_DEVICE_LEN――bLength段 指明整个设备描述符的长度,单位字节。 【2】db DSCR_DEVICE――bDescriporType段 描述符类型值。DSCR_DEVICE=04H--设备描述符。 【3】dw 0002H――bcdUSB 表明该USB设备所遵循的USB协议版本,用bcd码表示,2字节。例如2.0版本,值为0200H,用bcd码表示,低字节在前,高字节在后,表示为0002H;同理,1.1版本,则表示为1001H。 【4】db 00H――bDeviceClass段 指明USB设备所属的设备类。 =0,表示USB各接口相互独立工作,分属不通的设备类,具体信息在接口描述符中说明; =1~FEH,表明该USB设备属于某个明确的设备类,例如04H代表显示设备; =FFH,厂商自定义的设备类。 |
|
|
相关推荐
|
|
|
5】db 00H――bDeviceSubClass段
指明USB设备所述的设备子类。其值依赖bDeviceClass。 =0,此时bDeviceClass必须首先为0; =1~FEH,详细的设备子类; 例如如果bDeviceClass=04H,是显示设备,则bDeviceSubClass=01H,表示CRT显示器; =FFH,厂家自定义。 【6】db 00H――bDevicePortcol段 指明USB所使用的设备类协议。其值依赖bDeviceClass和bDeviceSubClass。 =0,表示该设备不使用任何设备类协议; =1~FEH,则该USB必须属于某个明确的设备类和子设备类。如视频类协议(UVC),音频类协议(UAC)等; =FFH,厂家自定义。 |
|
|
|
|
|
|
|
|
【7】db 64――bMaxPacketSize0段
指明该USB设备端点0控制传输所支持的最大数据包长度,单位字节。 【8】dw 0B404H――VID 【9】dw 0410H――PID 【10】dw 0000H――bcdDevice段 指明USB设备版本号。 【11】db 1――iManuFacture段 厂商信息字符串索引值,没有时为0。这里为1,即下面的“Cypress”字符串。 |
|
|
|
|
|
|
|
|
【12】db 2――iProduct段
产品信息字符串索引值,没有时为0。后面的“EZ-USB”字符串。 【13】db 0――iSerial段 USB设备序列号信息字符串索引值,没有时为0。 【14】db 1――bNumConfigurations段 指明USB设备所支持的配置数。如果USB设备支持两种传输速率,则该字段指出的是该速率下的配置数,而不是两种速率下的配置数和。 |
|
|
|
|
|
|
|
|
设备限定描述符:DeviceQualDscr
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 1 2 3 4 5 6 7 8 9 10 设备限定描述符,9个字段,共10字节。仅当该USB为高速USB设备,且设备既需支持高速(High Speed)又需支持全速(Full)时,就需要用到设备限定描述符。例如该高速USB设备目前工作于全速模式,则该描述符中包含高速模式的总体信息。 |
|
|
|
|
|
|
|
|
在设备请求处理函数SetupCommand(void)中,当收到读设备限定描述符请求时,会首先判断是否为高速USB设备。
【1】db DSCR_DEVQUAL_LEN――bLength段 整个设备限定描述符的长度,单位字节,共10个字节。 【2】dbDSCR_DEVQUAL――bDescriptorType段 指出该描述符类型。06H->设备限定描述符。 【3】dw 0002H ――bcdUSB段 USB协议版本号。 |
|
|
|
|
|
|
|
|
【4】db 00H――bDeviceClass段
该USB设备所属的USB设备类。 【5】db 00H――bDeviceSubClass段 所属子类。对bDeviceClass的进一步细化分类说明。 【6】db 00H――bDeviceProtocol段 该设备所使用的设备类协议。 |
|
|
|
|
|
|
|
|
【7】db 64――bMaxPacketSize0段
端点0控制传输所支持的最大数据包长度,单位字节。 【8】db 1――bNumConfigurations段 另一速率所支持的配置数。 【9】db 0――bReserved段 保留,必须为0。 |
|
|
|
|
|
|
|
|
配置描述符:HighSpeedConfigDscr/FullSpeedConfigDscr
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 100 ;; Power requirement (div 2 ma) 配置描述符包含8个字段,共9字节。所有的USB设备至少包含一个配置描述符,例如这里包含两个配置描述符高速HighSpeedConfigDscr和全速FullSpeedConfigDscr。 |
|
|
|
|
|
|
|
|
【1】db DSCR_CONFIG_LEN――bLength段
描述符长度,9字节。 【2】db DSCR_CONFIG――bDescriptorType段 描述符类型。 【3】db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) / 256――wTotalLength段 指明配置信息总长度,2字节表示。为配置描述符,接口描述符,端点描述符,设备类定义描述符,供应商自定义描述符长度的和。在这里只有配置、接口和端点描述符。 |
|
|
|
|
|
|
|
|
【4】db 1――bNumInterface段
指明该配置所支持的接口数,最小为1。 【5】db 1――bConfigurationValue段 指明该配置的配置值。例如这里值为1,在重枚举时,主机发送Setconfiguration(x),当x=1时,就调用该配置。 【6】db 00――iConfiguration段 该配置的字符串索引值,没有时为0。 |
|
|
|
|
|
|
|
|
【7】db 10000000b――bmAttributes段
指明该配置的特性,8位。 b0~b4,保留,必须为0; b5:远程唤醒选择。=1,支持远程唤醒;=0,不支持远程唤醒; b6:是否总线电源选择。如果该USB设备外加了电源,=1,使用总线电源;=0,使用自供的电源; b7:必须为1。 在主机设备请求case SC_GET_STATUS,case GS_DEVICE中获得该信息。 【8】db 100――bMaxPower段 总线供电时,该USB设备可获得的最大电流。单位2mA,所以最大值为250。如果该电流得不到满足,USB将不能使用这个配置。 |
|
|
|
|
|
|
|
|
接口描述符有9个字段,共9字节。注意,主机不能用SetDescription和GetDescription来设置和读取接口描述符,它只能作为配置描述符的一部分信息返回,在主机发送case SC_GET_DESCRIPTOR,且case GD_CONFIGURATION时一并读取。所以我们看到,在fw.c文件中并没有对接口描述符的判断。
【1】db DSCR_INTRFC_LEN――bLength段 描述符长度。 【2】db DSCR_INTRFC――bDescriptorType段 描述符类型。 【3】db 0――bInterfaceNumber段 指明该接口的接口号。 |
|
|
|
|
|
|
|
|
【4】db 0――bAlternateSetting段
指明接口的可替换设置值。 【5】db 6――bNumberEndpoints段 指明接口所使用的端点数,不包括端点0。 【6】db 0ffH――bInterfaceClass段 指明接口所使用的设备类。 =0,保留; =1~FEH,表明该接口属于某个明确的USB设备类; =FFH,厂家自定义的设备类。 |
|
|
|
|
|
|
|
|
【7】db 00H――bInterfaceSubClass段
该接口所属的USB设备子类。 【8】db 00H――bInterfaceProtocol段 该接口所使用的设备类协议。 【9】db 0――iInterface段 接口字符串描述符的索引值,没有时为0。 |
|
|
|
|
|
|
|
|
;; Endpoint Descriptor
db DSCR_ENDPNT_LEN ;; Descriptor length db DSCR_ENDPNT ;; Descriptor type db 02H ;; Endpoint number, and direction db ET_BULK ;; Endpoint type db 00H ;; Maximun packet size (LSB) db 02H ;; Max packect size (MSB) db 00H ;; Polling interval |
|
|
|
|
|
|
|
|
端点描述符有6个字段,共7字节。和接口描述符一样,也不能由主机通过发送GetDedcription()请求读取,只能作为配置信息case GD_CONFIGURATION的一部分返回给主机。
【1】db DSCR_ENDPNT_LEN――bLength段 该描述符长度,单位字节。 【2】db DSCR_ENDPNT――bDescriptorType段 该描述符类型。 【3】db 02H――bEndpointAddress段 指明端点的端点号及传输方向。 b0~b3:该端点的端点号。如0001端点1,0010端点2; b4~b6:保留,必须为0; b7:端点传输方向。1-IN传输;0-OUT传输。 |
|
|
|
|
|
|
|
|
【4】db ET_BULK――bmAttributes段
指明端点的一些特性。 b0~b1:端点的传输类型。00-控制传输,01-同步传输,10-块传输,11-中断传输。 b2~b3:当该端点为同步端点时,这两位指出同步类型。00-非同步,01-异步,10-自适应,11-同步。 b4~b5:端点用法类型。00-数据端点,01-显示反馈端点,10-隐式反馈端点,11-保留。 b6~b7:保留,必须为0。 【5】db 00H――wMaxpacketSize段(LSB) 指明端点所支持的最大数据包长度,共16位。 b0~b10:端点所支持的最大数据包长度。 b11~b12:当该端点为高速中断端点或同步端点时,这两位指出每小帧中最多传输的事务数。00-每小帧1次(默认),01-每小帧2次(附加一次),10-每小帧3次(附加2次),11-保留。 b13~b15:保留,必须为0。 |
|
|
|
|
|
|
|
|
【5】db 02H――wMaxpacketSize段(MSB)
高8位。数据包大小为:0000 0010 0000 0000,取0~10位,还是0200,512字节。 【6】db 00H――bInterval段 指明端点数据传输的访问间隔。 低速中断端点:=10~255ms; 全速中断端点:=1~255ms; 高速中断端点:=1~16,访问间隔为2(bInterval-1)(幂)×1us; 全速/高速同步端点:=1~16,访问间隔为2(bInterval-1)(幂)×1ms 和2(bInterval-1)(幂)×1us; 高速块/控制out端点:指明其最大NAK握手包发送速率。=0,表示该端点永远不会发出NAK握手包;=其他值,表示每个bInterval时间内,该端点最多只能发送一次NAK握手包。 其他类型端点:该字段无效。 字符串描述符:StringDscr1: |
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
|
|
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17060 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 16:59 , Processed in 0.968886 second(s), Total 102, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖