ashun
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2003-11-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1723回复:5

D12的设备描述符问题(30分)

楼主#
更多 发布于:2003-08-04 16:31
  D12的设备描述符问题,按大家的意思我是这样理解的,设备描述符有18个字节,而一次性只能发16个字节,然后主机会使D12产生中断(ep0tx),在此中断中发送最后两个字节,实际上是不是这样?是PC机总线使D12产生中断才传上最后两个字节吗?
          枚举成功了,可以正确地载入驱动程序,也可以正确运行应用程序。但我测试在中断中发送两个字节不是描述符中的最后两个字节(测试方法就是用变量记下发送的这两个字节,然后从主输入端点将它传到PC机来看),测试出的两个字节是9和2。但实际上是0和25,为什么呢,难道测试方法不对吗?但用同样的方法测出发送的
前16个字节却是相同的,怎么回事啊?
      另,busHound是不是并不能完全捕获数据啊?看我得到的数据,就没有SetAdress啊,但我能测试出D12
是产生了SetAdress中断,而且GET DESCRIPTR好象也不只这么几次。如何来解释呢
附:
用busHound捕获得
 12  CTL    80 06 00 01 - 00 00 12 00  GET DESCRIPTR    0us         1.1.0        
 12  DI     12 01 00 01 - dc 00 00 10  ........       4.7ms         1.2.0        
            71 04 66 06 - 00 01 00 00  q.f.....                     1.2.8        
            00 19                      ..                           1.2.16      
 12  CTL    80 06 00 02 - 00 00 09 01  GET DESCRIPTR  131us         2.1.0        
 12  DI     09 02 2e 00 - 01 01 00 60  .......`       6.8ms         2.2.0        
            f0 09 04 00 - 00 04 dc a0  ........                     2.2.8        
            b0 00 07 05 - 81 03 04 00  ........                     2.2.16      
            0a 07 05 01 - 03 04 00 0a  ........                     2.2.24      
            07 05 82 02 - 40 00 0a 07  ....@...                     2.2.32      
            05 02 02 40 - 00 0a        ...@..                       2.2.40      
 12  CTL    00 09 01 00 - 00 00 00 00  SET CONFIG      26us         3.1.0        
 12  CTL    80 08 00 00 - 00 00 01 00  GET CONFIG     3.2ms         4.1.0        
 12  DI     01                         .              3.7ms         4.2.0        
 12  CTL    81 0a 00 00 - 00 00 01 00  GET INTERFACE   22us         5.1.0        
 12  DI     00                         .              3.9ms         5.2.0  

最新喜欢:

crazyqpcrazyq...
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-05 08:48
控制端口一定要有中断才能工作!所以,最后2byte你的描述是对的。set address是一定有的,busbound经常抓不到。GET DESCRIPTR里:80 06 00 01 - 00 00 12 00 是获取设备描述符。80 06 00 02 - 00 00 09 01 是读取配置描述符,80 06 00 02 - 00 00 ff 00是读取描述符集合。
bjzps
驱动小牛
驱动小牛
  • 注册日期2003-03-06
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望22点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-05 09:48
我用的不是d12,所以不知道说的对不对
1。你说的描述符的问题,会不会你传回来的CRC,而不是描述符的后2位?
2。我用busband就很好啊,基本都能抓到
   你可以试试把usb mass storage control也选上
3。还有你的SET CONFIG 后,怎么还有GET CONFIG ?
   这会就应该发6字节的inquiry了啊
szzwm
驱动牛犊
驱动牛犊
  • 注册日期2003-06-12
  • 最后登录2005-05-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-05 12:23
楼上:操作次序与驱动程序有关,不同的驱动有不同的操作次序。

楼主:请检查一下第一次返回16字节数据之后,到下一次中断返回剩下的两字节数据之间,是否改变了设备描述符的指针。
shashaxz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2004-08-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-05 15:17
买只usb bus analyzer吧,bushound总是不太好用的。
catc公司出的,买只支持high speed transfer的。
stanleyhe
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2006-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-06 00:05
我对这两Bytes的数据是这样认为的:

PC是一次性将描述符的18Bytes全传至设备端(因为从Bus Hound capture到设备端的数据没有发两次)。是USB芯片产生了两次中断。
所以,在中断程序中要作好接收数据超过一个包大小的准备.

不知我的认为是对是错,请各位大侠指正。
游客

返回顶部