首页 文章

USB作为主机SCSI READ命令的数据传输问题

提问于
浏览
1

我正在使用OHCI实现USB作为主机 . 并使用SCSI读取大容量存储设备 . 我的所有控件传输都成功运行 . 我已经使用Control Transfers完成了所有初始化,但是我遇到了数据传输问题 .

我在SCSI中成功实现READ命令时遇到了麻烦,无论是READ(6),READ(10)等 .

以下是命令块包装器(CBW)的快照 -
enter image description here

突出显示的部分是SCSI命令 .

正如您所看到的,我已经请求了512个字节 - 这是我的大容量存储设备的1 LBA大小 .

以下是来自设备的512字节缓冲区的内容 -
enter image description here

FYI-缓冲区初始化为0xff这些512字节在我的大容量存储设备上不存在 . 我在HXD上打开了大容量存储设备并检查了字节,看到我收到的块在我的海量存储器中不存在!

我得到的Command Status Wrapper(CSW)如下 -
enter image description here

CSW中的最后一个字节是0x01,这意味着命令失败 . 我有3个问题1-这个READ失败的原因是什么?我是否应该出于任何原因在此之前运行任何其他SCSI命令? 2-我请求512字节,我甚至得到了,但CSW中显示残差的字节8-11仍显示某个值a恰好大于512(因为这是小端格式) . 这怎么可能? 3-我从设备收到的512字节可能是什么?

对此有任何帮助我已经被困在这里一段时间了,而且我没有USB分析仪 .

数据传输的伪代码 - 设置 endpoints 描述符(ED)1(指示OUT endpoints )设置传输描述符(TD)1(发送SCSI命令)

将BulkHead ED设置为ED 1启动描述符处理,然后将其停止

设置 endpoints 描述符(ED)1(指示IN endpoints )设置传输描述符(TD)1(读取512字节)设置传输描述符(TD)2(读取13个CSW字节)

将BulkHead ED设置为ED 1启动描述符处理,然后将其停止

1 回答

  • 1

    我的大容量存储设备上的任何地方都没有这512个字节 .

    不,这对我来说非常像一个有效的部门 0 .

    您可能会错过的是Windows不允许非管理员用户查看此扇区 . 因此,HXD显示分区的第一个扇区,而不是扇区 0 . 您只能在管理员权限和打开相应的物理磁盘时看到此信息 .

    我请求512字节,我甚至得到了,但CSW中显示残差的字节8-11仍显示某个值a恰好大于512

    不,您要求 256*512 个字节 . 这些SCSI长度字段的字节顺序是AFAIK big endian .

相关问题