阅读:1367回复:10
各位帮我看看,哪儿出了问题?
我的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的命令呢?并且还重复发了三组这个几个命令? 请大侠多多指教,我一定多多给分的(再开新帖给分) |
|
|
沙发#
发布于: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之后主机重发的 |
|
板凳#
发布于: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, |
|
|
地板#
发布于:2003-05-29 12:13
8好像是必须的,CBW中会出现他的值
并且,如果我不回送数据的话,host会连发3次 |
|
|
地下室#
发布于:2003-05-29 12:16
Config Descriptor中的倒数第二个0x60->0xe0。bit7必须为1
其他没啥问题,还有回送config descriptor时有没有把endpoint描述符也回送?你没贴出来 |
|
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, |
|
|
6楼#
发布于:2003-05-29 12:55
我做的过程中好像没出现过8,在Set config之后就是CBW了,且第一个SCSI命令是inquiry。不知你的为何会有?也许和pid,vid有关?纯粹猜测。
端点描述符没有什么问题 |
|
7楼#
发布于:2003-05-29 15:12
那么pid和vid可以设置成一个比较通用的吗?
比如,你的设置是怎样的? |
|
|
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] |
|
|
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] |
|
|
10楼#
发布于:2003-05-29 16:25
USB1.1的pid,vid简单,找个U盘即可用Bushound获得
我用的是:0ed1h,6620h 由于设备7是usb root hub,它获取的数据有些只是HUB自身使用,而不下发到device。 |
|