flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1367回复:10

各位帮我看看,哪儿出了问题?

楼主#
更多 发布于:2003-05-29 10:56
我的usb device和usb host进行setup通信时如下(作为mass storage,bulk-only,SCSI-2)
0:80 06 00 01 00 00 40 00
1:80 06 00 01 00 00 12 00
2:80 06 00 02 00 00 09 00
3:80 06 00 02 00 00 FF 00
4:80 06 00 01 00 00 12 00
5:80 06 00 02 00 00 09 00
6:80 06 00 02 00 00 20 00
7:00 09 01 00 00 00 00 00//set configuration
8:A1 FE 00 00 00 00 01 00//得到Max LUN

9: 80 06 00 01 00 00 40 00
10:80 06 00 01 00 00 12 00
11:80 06 00 02 00 00 09 00
12:00 09 01 00 00 00 00 00

13:80 06 00 01 00 00 40 00
14:80 06 00 01 00 00 12 00
15:80 06 00 02 00 00 09 00
16:00 09 01 00 00 00 00 00

17:80 06 00 01 00 00 40 00
18:80 06 00 01 00 00 12 00
19:80 06 00 02 00 00 09 00
20:00 09 01 00 00 00 00 00

在第8之后为什么又向我发送要device descriptor呢?最后三组的出现应该是我有什么东西没有发给host吧?请大侠帮我仔细看看这个命令流程,我觉得有很多问题。
第3、4、5处好像不应该再发了吧?
第8处,我已经向host发送了一个一字节的数据:0(我只有一个逻辑设备),为什么在这之后没有发送CBW命令给我?而是出现9-12的命令呢?并且还重复发了三组这个几个命令?

请大侠多多指教,我一定多多给分的(再开新帖给分)
我思,故我在
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-29 11:25
你能否把你回送的descriptor也贴出来?
如果描述符没问题,按经验连8主机都不该发的。
8之后主机又get_descriptor可能是因超时等原因总线重新复位。
3是因为2主机只读了9字节的配置描述符,把描述符中的长度读上去了,所以得再多读一次。这里我见过两种情形,一是如你的读FF,另外就是FF换成描述符里面实际长度(如6中所示)。
3,4之间应该有个Set Address,4,5,6是在Set Address之后主机重发的
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-05-29 12:06
在这儿没有出现set address,是因为我的芯片自动处理这个命令,对于固件来说可以不用考虑
下面是我的device descriptor:
0x12,
0x01,
0x00,0x01,
0x00,
0x00,
0x00,
0x40,
0x51,0x04,
0xc4,0x81,
0x01,0x00,
0x00,
0x00,
0x00,
0x01
configuration:
0x09,
0x02,
0x20,0x00,
0x01,
0x01,
0x00,
0x60,
0x32,
interface:
0x09,
0x04,
0x00,
0x00,
0x02,
0x08,
0x06,
0x50,
0x00,
我思,故我在
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-05-29 12:13
8好像是必须的,CBW中会出现他的值
并且,如果我不回送数据的话,host会连发3次
我思,故我在
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-29 12:16
Config Descriptor中的倒数第二个0x60->0xe0。bit7必须为1
其他没啥问题,还有回送config descriptor时有没有把endpoint描述符也回送?你没贴出来
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-05-29 12:29
回送的时候,2和5处因为只要9字节的数据,所以这地方回送了9字节

3和6回送了所有的descriptor,包括endpoint
/*EP1 BULK OUT,0xf009*/
0x07,
0x05,
0x01,
0x02,
0x40,0x00,
0x01,//这个地方也可以是0,对bulk无所谓

/*EP2 BULK IN,0xf019*/
0x07,
0x05,
0x82,
0x02,
0x40,0x00,
0x01,
我思,故我在
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-29 12:55
我做的过程中好像没出现过8,在Set config之后就是CBW了,且第一个SCSI命令是inquiry。不知你的为何会有?也许和pid,vid有关?纯粹猜测。
端点描述符没有什么问题
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-05-29 15:12
那么pid和vid可以设置成一个比较通用的吗?
比如,你的设置是怎样的?
我思,故我在
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-05-29 15:58
我用bus hound在pc机端查看了一下
发现在8(得到了我回送的数据)之后又发送了一个控制传输命令:
48 00 09 00 - 00 00 01 00  BULK/INT XFER
但是我的设备却没有收到(一连发了3次)
请问这个命令是作什么用的?我怎么没有找到它?
还有一个问题,用bus hound看见的命令和在device端得到的命令怎么不一样啊?
下面是我从bus hound得到的结果:


[编辑 -  5/29/03 by  flycat0101]
我思,故我在
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-05-29 16:04
有一些乱,重贴:
Device  Phase     Data                         Description
7.0     CTL    80 06 00 01 - 00 00 12 00          GET DESCRIPTOR  
7.0     LEN    12 00 00 00                     18
7.0     DI      12 01 00 01 - 00 00 00 40          .......@
7      URB    50 00 08 00 - 00 00 00 00          CONTROL TRANSFER
7.0     CTL    80 06 00 02 - 00 00 09 00          GET DESCRIPTOR
7.0     LEN    09 00 00 00                     9
7.0     DI      09 02 20 00 - 01 01 00 e0          .. .....  
7      URB    50 00 08 00 - 00 00 00 00          CONTROL TRANSFER
7.0     CTL    80 06 00 02 - 00 00 20 00          GET DESCRIPTOR
7.0     LEN    20 00 00 00                     32
7.0     DI      09 02 20 00 - 01 01 00 e0          .. .....  
7      URB    50 00 08 00 - 00 00 00 00          CONTROL TRANSFER
7.0     CTL    00 09 01 00 - 00 00 00 00          SET CONFIG
7      URB    50 00 00 00 - 00 00 00 00          SELECT CONFIG
7.0     CTL    01 0b 00 00 - 00 00 00 00          SET INTERFACE
7      URB    4c 00 01 00 - 00 00 00 00          SELECT INTERFACE
7.0     CTL    a1 fe 00 00 - 00 00 01 00          GET MAX LUN
7.0     LEN    01 00 00 00                     1
7.0     DI      01                        .
7      URB    50 00 08 00 - 00 00 00 00          CONTROL TRANSFER
7      URB    48 00 09 00 - 00 00 01 00          BULK/INT XFER


[编辑 -  5/29/03 by  flycat0101]
我思,故我在
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-29 16:25
USB1.1的pid,vid简单,找个U盘即可用Bushound获得
我用的是:0ed1h,6620h
由于设备7是usb root hub,它获取的数据有些只是HUB自身使用,而不下发到device。
游客

返回顶部