阅读:1472回复:10
为什么Inquiry返回的数据缺少几位
做到了Bulk Only协议层,但是好多命令都不能执行。
仅有的Inquiry命令还会在后面28位后丢失3Byte的数据。 哪位老大知道这是为什么? 我底层用的是Cypress提供的代码,没有做过修改,看见前面的帖子里说源代码有问题需要改。哪位老大知道怎么改。 拜谢 |
|
沙发#
发布于:2004-03-04 12:47
注意一下InquiryData中AdditionalLength返回的数值,看是不是0x1F
|
|
板凳#
发布于:2004-03-04 14:56
谢谢楼上的大虾.
你说的是Inquiry返回的数据吧。我拿Bus Hound截取的数据进行的比较.在PC上收到的就是AdditionalLength位为0的。 我也试着将CBW中的数据长度加长,还有In更多的数据。但是那样就把CSW提前In进来。 十分奇怪的是In了36字节的Inquiry数据(标准长度),然后读入的CSW就正确,真是不知道丢失的三个字节被什么数据填充了。 |
|
地板#
发布于:2004-03-04 15:15
这是用51读取的
00 80 02 02 00 00 00 00 47 45 4E 45 52 49 43 20 55 53 42 20 4D 61 73 73 20 53 74 6F 65 31 2E 30 30 33 53 44 这是用Bus Hound截取的 00 80 02 02 00 00 00 00 47 45 4e 45 52 49 43 20 55 53 42 20 4d 61 73 73 20 53 74 6f 72 61 67 65 31 2e 30 30 最后两行有区别。十分奇怪 |
|
地下室#
发布于:2004-03-04 16:48
呃...你附的例子是Inquiry包的数据吗?
收到的addition length为0不太正常,但是你要读入的数据长度是你在CBW里设定的,你设定为36,In的时候就读进36,然后接下来就是收CSW了,这样就不会错了 InquiryData数据的addition length参数要填对 附上一个正常的Inquiry包的所有数据 Bulk out(CBW): 0: 55 53 42 43 00 00 00 04 24 00 00 00 80 00 0C 12 16: 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 Bulk in(Data): 0: 00 80 00 02 20 00 00 00 53 4D 53 43 20 20 20 20 16: 55 53 42 20 32 20 48 53 2D 43 46 00 00 00 00 00 32: 31 2E 36 33 Bulk in(CSW): 0: 55 53 42 53 00 00 00 04 00 00 00 00 00 注意CBW里的08h的位置是0x24,In的时候读了0x24即36个byte的数据。 |
|
5楼#
发布于:2004-03-04 20:34
我发送的CBW是正确的。我做的是MCU+USB Host。
但是每次Data In的都会在最后缺少一些。而CSW却是正常的。 谢谢楼上的帮助,我先分析一下。 :D |
|
6楼#
发布于:2004-03-06 16:59
偶发现换了一款优盘就能够得到和PC端截取的数据相同的数据了。但是还是没有楼上大虾说的那个数据位。
换用的是OTi的(从Inquiry读取的),原有的是GENERIC USB Mass Storage(同样读取的),还有一个其他牌子的。可是为什么会这样呢?:o 不知道这样算不算解决了。 算了,这个问题算解决了,准备给分了。:D不过还有好多SCSI命令没有调通,还是希望大家帮助。 |
|
7楼#
发布于:2004-03-06 17:18
既然做的是HOST,
为什么还能用BUS HOUND截取数据呢? BUS 是怎么连到PC上的? 教教我这个菜鸟吧! |
|
8楼#
发布于:2004-03-07 13:25
我没有说明白。
其实是811读取的数据应该和windows读取的数据一样吧。 因此我就用Bus Hound截取优盘在windows下的数据,和mcu+811读取的比较。。 其实偶也是个大大的菜鸟。很菜很菜的说 |
|
9楼#
发布于:2004-03-08 08:57
我没用过bus hounder,一般都是用总线分析仪获取数据,快捷又方便,呵呵。它应该是一个filter driver吧
关于scsi命令,我用过的也不多,多交流:) |
|
10楼#
发布于:2004-03-08 11:16
你说的是串接在主控端和USB设备之间的一个设备用来截取通讯数据的是么?
偶没有钱,用不起总线分析器呀。 |
|