我正在实现USB作为主机使用人权高专办。并使用SCSI读取大容量存储设备。我所有的控制传输都成功运行了。我已经完成了所有的初始化使用控制传输,但我面临的问题,数据传输。
在SCSI中成功地实现READ命令,无论是读(6),读(10),等等,我都遇到了麻烦。
以下是命令块包装器(CBW)的快照-

突出显示的部分是SCSI命令。
正如您所看到的,我已经请求了512字节--对于我的海量存储设备来说,这相当于1LBA的大小。
以下是设备中512字节缓冲区中的内容-

FYI-缓冲区被初始化为0 0xff,这512字节在我的海量存储设备上没有出现。我打开了HXD上的大容量存储设备,并检查了字节,以确定我收到的块在我的大容量存储上不存在!
我得到的命令状态包装器如下-

CSW中的最后一个字节是0x01,这意味着命令失败。我有三个问题1- -为什么这篇文章会失败?出于任何原因,我应该在此之前运行任何其他SCSI命令吗? 2-我请求512字节,甚至得到它,但是CSW中显示残留的字节8-11仍然显示某个值a,它恰好大于512 (因为这是小endian格式)。这怎么可能? 3-我从设备接收到的512字节可能是什么?
任何帮助,我已经被困在这里很长时间了,我没有USB分析仪。
数据传输伪代码-设置端点描述符(ED) 1(指示出端点)设置传输描述符(TD) 1(发送SCSI命令)
将BulkHead ED设置为ED 1,启动描述符处理,然后停止它
设置端点描述符(ED) 1(指示IN端点)设置传输描述符(TD) 1(读取512字节)设置传输描述符(TD) 2(读取13个CSW字节)
将BulkHead ED设置为ED 1,启动描述符处理,然后停止它
发布于 2016-03-26 23:46:54
在我的海量存储设备中,这512字节不在任何地方。
不,在我看来,这很像一个有效的扇区0。
您可能错过的是,Windows根本不允许非管理员用户查看这个扇区。因此,HXD将显示分区的第一个扇区,而不是扇区0。您只会在管理私密性和打开相应的物理磁盘时看到这一点。
我请求512字节,甚至得到它,但是CSW中的字节8-11 (显示残差)仍然显示某个值a,该值恰好大于512。
不,您请求256*512字节。这些SCSI长度字段的字节顺序是AFAIK大端。
https://stackoverflow.com/questions/36241201
复制相似问题