本帖最后由 nicnac 于 2012-5-31 16:49 编辑
最近开发CCID设备,本以为枚举会很顺利,谁知搞了两天都没搞定,疯了~我用的芯片有USB device的demo的,demo是将其枚举成了cd-rom.
我就在原demo上改了“设备描述符”和“配置描述符”,而且两个描述符绝对没问题,我同事做的另一款CCID读卡器就是用的两个描述符,没有问题。我就把端点号,和端点的包尺寸改了下,好与我的单片机相符。
可就是枚举不过啊,每次PC让我发送完“配置描述符之后”,PC就让我的USB复位了,然后重新枚举,同样的步骤,再重复一两次。PC(win_xp)就就会弹出“无法识别的USB设备”,导致我无法安装驱动。因为驱动在枚举完成之后才回安装,如果已安装,也需要先枚举才能加载。
描述符就不贴了,很标准的,下面贴上枚举过程的log:
系统初始化开始!
>>>>>进入挂起中断-----退出挂起中断<<<<<
>>>>>进入复位中断-----退出复位中断<<<<<
***** SETUP OUT包字节数 = 8
USB标准请求:0x80, 0x06, 0x00, 0x01, 0x00, 0x00,0x40, 0x00,//请求设备描述符
GetDescriptor 开始 >>>>>>>>>>
设备描述符
0x12, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00,
0x40, 0xc3, 0x1b, 0x03,
0x02, 0x00, 0x01, 0x01, 0x02, 0x00, 0x01,
GetDescriptor 结束 <<<<<<<<<<
>>>>>进入复位中断-----退出复位中断<<<<<
***** SETUP OUT包字节数 = 8
USB标准请求:0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00,0x00,//设置地址
SetAddress 开始 >>>>>>>>>>
SetAddress 结束 <<<<<<<<<<
***** SETUP OUT包字节数 = 0
***** SETUP OUT包字节数 = 8
USB标准请求: 0x80, 0x06, 0x00, 0x01,0x00, 0x00, 0x12, 0x00,//获得设备描述符
GetDescriptor 开始 >>>>>>>>>>
设备描述符
0x12, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0xc3, 0x1b,
0x03, 0x02, 0x00, 0x01, 0x01, 0x02, 0x00, 0x01,
GetDescriptor 结束 <<<<<<<<<<
***** SETUP OUT包字节数 = 8
USB标准请求:0x80,0x06,0x00,0x02,0x00,0x00,0x09,0x00,//获得配置描述符
GetDescriptor 开始 >>>>>>>>>>
配置描述符
0x09,0x02,0x5d,0x00,0x01,0x01,0x00,0x80,0x32,
GetDescriptor 结束 <<<<<<<<<<
***** SETUP OUT包字节数 = 8
USB标准请求:0x80,0x06,0x00,0x02,0x00,0x00,0xff,0x00,//获取配置描述符其他内容
GetDescriptor 开始 >>>>>>>>>>
配置描述符
0x09,0x02,0x5d,0x00,0x01,0x01,0x00,0x80,0x32,//配置描述符0x09,0x04,0x00,0x00,0x03,0x0b,0x00,0x00,0x00,//接口描述符
0x36,0x21,0x10,0x01,0x00,0x07,0x01,0x00,0x00,0x00,0xa0,0x0f,0x00,0x00,0xa0,0x0f,0x00,0x00,//54字节的CCID类配置描述符
0x00,0x00,0x2a,0x00,0x00,0x08,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x01,0x01,0x00,0x0f,0x01,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x01,
0x07,0x05,0x01,0x02,0x40,0x00,0x00,//端点1 BULK OUT
0x07,0x05,0x81,0x02,0x40,0x00,0x00,//端点1 BULK IN
0x07,0x05,0x82,0x03,0x40,0x00,0x18,//端点2 INT IN
GetDescriptor 结束 <<<<<<<<<<
***** SETUP OUT包字节数 = 0
>>>>>进入复位中断-----退出复位中断<<<<< //:'(PC咋就让我复位了呢,我了个擦~
就是到这里,刚发完完整的“配置描述符”,PC就让我的USB CCID 设备复位,然后如上同样的过程再完全相同地重复一两次,PC就会弹出“无法识别的USB设备”,导致我无法安装驱动。因为驱动在枚举完成之后才回安装,如果已安装,也需要先枚举才能加载。
各位大神,求解释,求方案啊~
问题很简单,但我真心没有眉目,请各位大神帮助~ |