我正在使用OHCI实现USB作为主机。并使用SCSI读取大容量存储设备。 我的所有控件传输都成功运行。我已经使用Control Transfers完成了所有初始化,但是我遇到了数据传输问题。
我在SCSI中成功实现READ命令时遇到麻烦,无论是READ(6),READ(10)等。
以下是Command Block Wrapper(CBW)的快照 -
突出显示的部分是SCSI命令。
正如您所看到的,我已经请求了512个字节 - 这是我的大容量存储设备的1 LBA大小。
FYI-缓冲区初始化为0xff 这些512字节不存在于我的大容量存储设备上。我在HXD上打开了大容量存储设备并检查了字节,看到我收到的块在我的海量存储器中不存在!
CSW中的最后一个字节是0x01,这意味着命令失败。 我有3个问题 1-这个READ失败的原因是什么?我是否应该出于任何原因在此之前运行任何其他SCSI命令? 2-我请求512字节,我甚至得到了,但CSW中显示残差的字节8-11仍显示某个值a恰好大于512(因为这是小端格式)。这怎么可能? 3-我从设备收到的512字节可能是什么?
对此有任何帮助我已经被困在这里一段时间了,而且我没有USB分析仪。
数据传输的伪代码 - 设置端点描述符(ED)1(指示OUT端点) 设置传输描述符(TD)1(发送SCSI命令)
将BulkHead ED设置为ED 1 开始描述符处理 然后 停止它
设置端点描述符(ED)1(指示IN端点) 设置传输描述符(TD)1(读取512字节) 设置传输描述符(TD)2(读取13个CSW字节)
将BulkHead ED设置为ED 1 开始描述符处理 然后 停止它
答案 0 :(得分:1)
我的大容量存储设备上的任何地方都没有这512个字节。
不,这对我来说非常像一个有效的部门0
。
您可能会错过的是Windows不允许非管理员用户查看此扇区。因此,HXD显示分区的第一个扇区,即不扇区256*512
。您只会在管理员权限和打开相应的物理磁盘时看到此信息。
我请求512字节,我甚至得到了,但CSW中显示残差的字节8-11仍显示某个值a恰好大于512
不,您请求override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
个字节。这些SCSI长度字段的字节顺序是AFAIK big endian。