jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
阅读:1301回复:14

有关仿真器与枚举

楼主#
更多 发布于:2003-05-06 16:15
我在2k下进行枚举时,能收到get_descriptor(80 06 00 01 00 00 40 00)、set_address(00 05 02 00 00 00 00 00)请求,但是get_configuration(80 06 00 02 00 00 09 00)却有的时候能收到,有的时候收不到,但是我只要在这个请求的处理函数前设个断点,就大部分时候能收到,不知道这个仿真器有什么关系吗?

另外,我收到这个请求后,返回了要求的数据09 02 00 20 01 01 00 c0 32,而且确定数据已经写到了端点0的fifo中,可是枚举到这里下面的就没有了,正常情况下,下面应该是80 06 00 02 00 00 ff 00。请各位大虾给点建议吧。偶不胜感激呀!

补充一点:我在98下已经枚举通过了,但是在get_config时直接收到的是80 06 00 02 00 00 ff 00,没有收到09 00

[编辑 -  5/6/03 by  jinghuiren]

最新喜欢:

lmhhlmhhlmhhlm...
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-06 19:17
你可能没有处理好get_configration的命令,我发现在win2k下和win98有很多不同的,可能是驱动的写法不同引起的!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-06 21:49
现在问题就集中在get_config请求上,对于80 06 00 02 00 00 09 00请求,我回复的数据准确地说其实是10个字节(我把这10个字节拼成了5个16位的),因为我的数据线是16位的,即使我写了九个字节进去,那最后一个字节的高位自动是0,其实端点fifo中的数据还是10个字节,不知道是不是这里的影响,如果是的话我可真不知道如何做了

但是我象既然usb能用于16位的数据线,那就不应该有这样的问题呀,我也检查了我的发送函数,发送的数据是下面全部配置描述符中的前5个字:
unsigned short  ConfigDescr_H[] =
{

0x0209,  // 09 Length of the configuration Descriptor
………………//  02 Configuration Descriptor              
0x0020, //  002e Total length of the configurations,interface and class/endpoint

0x0101, // 01 No. of interface supported            
………………// 01 Configuration Value                      
0xc000,    //  00 Index of string descriptor        
………………// 80 Configurations Characteristic            
0x0932, //  32 Maximun Power                      
………………// 09 Length of standard interface descriptor
0x0104, //  04 Standard Interface Type            
………………// 01 No of Interface                      
0x0400, //  00 Alternate Setting Selector          
………………// 04 No of Endpoints                      

0x0000, //  00 Interface Class                      
………………// 00 ATAPI Interface Sub Class            
0x0000, //  00 Bulk Only Interface Protocol          
………………// 00 Index of interface string desriptor    
/*BULK ENDPOINT*/

0x0507, //  07 Length of Standard Endpoint Descriptor
………………// 05 Standard Endpoint Type  
0x0281, //  81 Set Bulk endpoint to 1 for ATAPI mode
………………// 02 Endpoint Characteristic              
0x0200, //  0200 Endpoint Max Packet Size              
0x0700,    // 00 Interval for Polling Endpoint for data transfer
………………// 07 Length of Standard Endpoint Descriptor
0x0105, //  05 Standard Endpoint Type  
………………// 01 Set Bulk endpoint to 1 for ATAPI mode
0x0002, //  02 Endpoint Characteristic              
………………// 0200 Endpoint Max Packet Size    
0x0002 //00 Interval for Polling Endpoint for data transfer
};

usb数据的发送规则是按照低字节在前高字节在后,对于结构中的两个8位的元素,应该把前一个放在低字节,对于16位的元素不需改变。

NewTech兄,你觉得98和2k有哪些不同和我的问题有关呢,还往提点小弟一下,不胜感激!不胜感激!!!

NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-07 01:21
1、首先你不能发送多于请求长度的数据
2、不同的mcu对于高低字节的存放的定义是不同的,你要好好检查一下你的硬件关于高低字节的定义。

另外我现在遇到一个大问题,我发到你的信箱里了。谢谢!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-07 14:15
我用的描述符在98下是通过了的,同一个设备拿到2k下就不行,我的发送函数和高低字节都没有问题,要是必须发9个字节那我可真是没办法,我只能发8个或者10个!

对于你的问题我看了,我看我也帮不了你什么,我连read10是什么东西都不知道,让你见笑了。
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-08 02:39
我觉得一个usb的控制器,因该不会设计成这样的,你仔细查看datasheet,是否有这方面的说明,另外你的硬件可否改为8位的总线呢!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-08 02:42
对了,有件事情忘记了,有的编译器要求数据结构以word方式对齐,会在奇数地址时,自动添加一个0(长度就不对了,数据结构也不对了),难道你的也是这样!
token
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2010-04-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-08 13:35
我记得曾经也遇到过这种情况,你查一下驱动程序中的处理发送GET_CONFIG请求的例程处是否在IoCallDriver调用之后,使用了带有超时退出的KeWaitSingleObject函数。如果使用了该函数的话,你就把它的时限设置的长一些,应该就可以了,毛病可能出在这地方;如果没有使用就得视情况而判断了。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-08 20:43
对了,有件事情忘记了,有的编译器要求数据结构以word方式对齐,会在奇数地址时,自动添加一个0(长度就不对了,数据结构也不对了),难道你的也是这样!


我用的是16位的总线,可以用8位的,但是我想芯片既然允许用16为的总线,那就应该没问题才是呀,我的情况和你说的一样,如果是写1个字节到端点fifo中,控制器会自动在高字节添0。真是郁闷,要不我试试发送8个字节过去试试,反正我用的是自供电,config的最后一个字节没有用处。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-08 20:53
我记得曾经也遇到过这种情况,你查一下驱动程序中的处理发送GET_CONFIG请求的例程处是否在IoCallDriver调用之后,使用了带有超时退出的KeWaitSingleObject函数。如果使用了该函数的话,你就把它的时限设置的长一些,应该就可以了,毛病可能出在这地方;如果没有使用就得视情况而判断了。


老哥,我的枚举还没有到载入我自己的驱动的时候呢,应该是等完成了80 06 00 02 00 00 ff 00后才会要求重新载入我自己的驱动,这时候我就可以用软件来调试了,现在问题是没到这里,所以主机收到了什么我也无法知道,除非有协议分析仪,可是这东西太贵了 :(
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-09 02:21
我现在的问题也是最好要有catc,好贵啊。。。
大家一起努力把!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-05-09 13:40
各位老哥,先谢谢各位了,我终于收到FF 00命令了,原来原因真的是我多发了一个字节,现在我只发送8个字节到主机,主机马上就发送FF 00命令给我了,之后的事情就简单了,

哈哈,太好了,放分了!!!!!!!!!!!!!!!!!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-05-09 14:24
恭喜你了!
:D
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-05-09 14:48
可是虽然这样通过了,我用的是自供电,config的最后一个字节无关紧要,要是用总线供电的方式不知道会不会有问题,管它呢,反正现在能用了,到时候有问题再说吧

多谢各位了,感激涕零呀,这个问题困扰了两个星期了! :) :) :)
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-05-10 00:46
希望对你有所帮助,大家共同进步!谢谢你的分数!
游客

返回顶部