kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1777回复:11

困扰了几天的问题,谁能帮我看一下?

楼主#
更多 发布于:2004-06-11 08:54
我现在想做一个U盘,用的是D12,已经能在设备管理器里面发现D12,用USBdebug传输数据也正常,但在windows的浏览器里面看不到U盘。用usb hound抓了一下数据如下:
 CTL    80 06 00 01 - 00 00 12 00                              
 DI     12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00    
 CTL    80 06 00 02 - 00 00 09 00
 DI     09 02 2e 00 - 01 01 00 c0 -
 CTL    80 06 00 02 - 00 00 2e 00  
 DI     09 02 2e 00 - 01 01 00 c0 - 32 09 04 00 - 00 04 08 06        
        50 00 07 05 - 81 03 40 00 - 0a 07 05 01 - 03 40 00 0a   07 05 82 02 -         40 00 00 07 - 05 02 02 40 - 00 00    
CTL    00 09 01 00 - 00 00 00 00 //set-configuration
到这就停止了 主机不再发送请求了.,这是怎么回事啊?
我用bus hound抓了一下爱国者的u盘,它接下去是set-interface请求,然后就用INQURY命令了,就可以在windows浏览器中看到u盘符了。

前天我也发贴问了,flyhye也热心解答了,但我发现我的问题是主机发完set-configuration请求后。就不发set-interface请求了。我猜问题可能是主机发完set-configuration后usb device没有返回正确的握手包,所以host就不发set-interface请求了,也就发不了inqury请求。  如果问题真是这样,我就不知道usb device为什么没有正确的返回。
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-06-11 16:25
U盘不是用SISC指令的吗
D12、可以做U盘啊,关注中
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-11 16:19
哪位能不能帮我看一下,很急啊!
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-11 13:55
谢谢恢复!

我的代码里确实是发空包了,代码如下:
这是set-configuration请求发出后进入这个if语句里面
else if (ControlData.DeviceRequest.wValue == 1)
{
   UsbSingleTransmit(0, 0);// 发送应答
   UsbInitUnconfig(); // 进入地址状态,禁止0除外的所有端点
   UsbInitConfig();// 配置处理,允许端点收发
   if(bUSBFlags.bits.bIn_ISR == 0) USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bConfiguration = 1;// 标记已配置
   if(bUSBFlags.bits.bIn_ISR == 0) USB_ENABLE_INTERRUPT;
}

执行过这个后。全局变量bUSBFlags.bits.bConfiguration为1,进入main程序的循环中,就一直循环。如果用usbdebug通过端点1或端点2向它发数据,它能收到。但主机就是不发请求!


flyhye你说的“不是上层不发,而是你给的东东让它认为无需发命令给你!!” 我发送的哪个包,host认为无需再发命令啊?
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-11 11:42
不是上层不发,而是你给的东东让它认为无需发命令给你!!
上层下来的命令如果你真的无法处理就cancel掉,回空包就可以了,如setconfig、setinterface等,关键是你有没看到你的代码发了空包没??
比如D12就用single_transmit(0,0)
具体到自己的就应该自己好好看代码了:)
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-11 11:35
那为什么host不发送set-interface请求啊?!
搞了几天了,没进展 :(

我用过几个都没抓到set-interface,确定你的set config后有发送响应。下面就是get max lun了.
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-11 11:24
还在啊,同乐同乐。。。
新手上路,请多关照.
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-11 10:41
我用usbview抓的数据如下:
usbview中端点的能传输的最大长度两次显示的不一样?
Device Descriptor:
bcdUSB:             0x0110
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x10 (16)
idVendor:           0x0471 (Philips)
idProduct:          0x0888
bcdDevice:          0x0100
iManufacturer:        0x00
iProduct:             0x00
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x02
Open Pipes:              4

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:   Interrupt
wMaxPacketSize:     0x0040 (64)
bInterval:            0x0A

Endpoint Descriptor:
bEndpointAddress:     0x00
Transfer Type:     Control
wMaxPacketSize:     0x0507 (1287)  //???长度怎么是怎样,我设
wInterval:          0x0301         //的是64B下面有
bSyncAddress:         0x40

Endpoint Descriptor:
bEndpointAddress:     0x00
Transfer Type:        Bulk
wMaxPacketSize:     0x0001 (1)   //??长度怎么这样?
wInterval:          0x0000
bSyncAddress:         0x07

Endpoint Descriptor:
bEndpointAddress:     0x05
Transfer Type:        Bulk
wMaxPacketSize:     0x4002 (16386) //??
wInterval:          0x0000
bSyncAddress:         0x00

Configuration Descriptor:
wTotalLength:       0x002E
bNumInterfaces:       0x01
bConfigurationValue:  0x01
iConfiguration:       0x00
bmAttributes:         0xC0 (Bus Powered Self Powered )
MaxPower:             0x32 (100 Ma)

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x00
bNumEndpoints:        0x04
bInterfaceClass:      0x08
bInterfaceSubClass:   0x06
bInterfaceProtocol:   0x50
iInterface:           0x00

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:   Interrupt
wMaxPacketSize:     0x0040 (64)
bInterval:            0x0A

Endpoint Descriptor:
bEndpointAddress:     0x01
Transfer Type:   Interrupt
wMaxPacketSize:     0x0040 (64)
bInterval:            0x0A

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x02
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

[编辑 -  6/11/04 by  kevin_yin]
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-11 10:38
那为什么host不发送set-interface请求啊?!
搞了几天了,没进展 :(
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-06-11 10:08
0包是看不到的
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-11 09:23
从bus hound上看是没有发0包
但我用bus hound抓了爱国者的它的数据如下:
CTL    80 06 00 01 - 00 00 12 00
DI     12 01 10 01 - 00 00 00 08 - d1 0e 80 66 - 00 01 01 02
       00 01
CTL    80 06 00 02 - 00 00 09 00
DI     09 02 20 00 - 01 01 00 80 - 32
CTL    80 06 00 02 - 00 00 20 00
DI     09 02 20 00 - 01 01 00 80 - 32 09 04 00 - 00 02 08 06
       50 00 07 05 - 01 02 40 00 - 00 07 05 82 - 02 40 00 00
CTL    00 09 01 00 - 00 00 00 00  //它这也没有发0包就直接发
CTL    01 0b 00 00 - 00 00 00 00  //set-interface了
CTL    a1 fe 00 00 - 00 00 01 00
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
USTS   04 00 00 80
.........

爱国者的也没法0包啊?
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-06-11 09:13
我现在想做一个U盘,用的是D12,已经能在设备管理器里面发现D12,用USBdebug传输数据也正常,但在windows的浏览器里面看不到U盘。用usb hound抓了一下数据如下:
 CTL    80 06 00 01 - 00 00 12 00                              
 DI     12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00    
 CTL    80 06 00 02 - 00 00 09 00
 DI     09 02 2e 00 - 01 01 00 c0 -
 CTL    80 06 00 02 - 00 00 2e 00  
 DI     09 02 2e 00 - 01 01 00 c0 - 32 09 04 00 - 00 04 08 06        
        50 00 07 05 - 81 03 40 00 - 0a 07 05 01 - 03 40 00 0a   07 05 82 02 -         40 00 00 07 - 05 02 02 40 - 00 00    
CTL    00 09 01 00 - 00 00 00 00 //set-configuration
到这就停止了 主机不再发送请求了.,这是怎么回事啊?
我用bus hound抓了一下爱国者的u盘,它接下去是set-interface请求,然后就用INQURY命令了,就可以在windows浏览器中看到u盘符了。

前天我也发贴问了,flyhye也热心解答了,但我发现我的问题是主机发完set-configuration请求后。就不发set-interface请求了。我猜问题可能是主机发完set-configuration后usb device没有返回正确的握手包,所以host就不发set-interface请求了,也就发不了inqury请求。  如果问题真是这样,我就不知道usb device为什么没有正确的返回。

set-configuration请求后有没有发0包?
游客

返回顶部