天嵌 ARM开发社区

 找回密码
 注册
查看: 2931|回复: 1

usb 枚举中配置描述符为什么二次长度不一样

[复制链接]
summersunboy 发表于 2012-8-2 11:36:14 | 显示全部楼层 |阅读模式
1. 在usb枚举过程中,发送完设备描述符后,并设置地址完成后,会收到主机发送的获取配置描述符的命令 GET_DESCRIPTOR : CONFIGURATION_TYPE, 如下所示:
Ep0 recv: 0x80  0x6  0x0  0x2  0x0  0x0  0x9  0x0    ;usb 设备接收到主机发送的命令, 需要返回长度为0x09BYTE
send: GC_ONLY_D                                                    ;usb设备向主机发送9个字节的descriptor_desc
Ep0 recv: 0x80  0x6  0x0  0x2  0x0  0x0  0xff  0x0   ;usb 设备接收到主机发送的命令, 需要返回长度为0xFFByte
send: GC_D                                                              ;usb设备向主机发送9个字节的descriptor_desc + 9个字节的interface + 2*7endp
0x80 -- usb 主机输出
0x06 --- GET_DESCRIPTOR
0x02 --- CONFIGURATION_TYPE
wLength -- 0x09 0x00                ;第一次需要返回的长度是0x09
wLength -- 0xFF 0x00                ;第二次需要返回的长度是0xFF
usb1.1 的spec上也没有讲说要返回长度不一样的情况。我对为什么两次descriptor 描述符中需要返回的长度不一样,这一点很不理解?
还望大家不吝指教,非常感谢!

 楼主| summersunboy 发表于 2012-8-2 13:43:17 | 显示全部楼层
有点明白了,是不是第一次usb主机要descriptor_desc 正好是9个字节。
第二次usb主机要interface&&endpoint 描述符,因为这两个描述符是不能单独发送给usb主机的,只能通过descriptor_desc发送,所以这一次的长度就变成了0xFF.
但是我看到网上s3c2440枚举部分:
                    case CONFIGURATION_TYPE:
                        //                    DbgPrintf("[GDC]");
                        CLR_EP0_OUT_PKT_RDY();
                        if((descSetup.bLengthL+(descSetup.bLengthH<<8))>0x9)
                            //bLengthH should be used for bLength=0x209 at WIN2K.
                            ep0State=EP0_STATE_GD_CFG_0; //for WIN98,WIN2K
                        else
                            ep0State=EP0_STATE_GD_CFG_ONLY_0; //for WIN2K
                        break;
没有这样装98或2k的系统,难道在win98或win2k下不是这个机制吗?我的系统是XP。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-17 05:06 , Processed in 2.044998 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表