1

这可能是一个愚蠢的问题,

我在运行嵌入式 Linux 的 ARM-CortexM4 平台(STM32F4 系列)上调试 USB 存储设备。ARM 作为 USB 主机工作,并尝试以 USB 全速 (12Mb/s) 与拇指驱动器通信。

现在问题来了。在成功枚举和通过 BULK 传输的几个 SCSI 命令后,容量和所有内容都可以正确读取。但是,大约 15 秒后,当我再次尝试发送这些 SCSI 命令(在相同条件下)时,USB 主机控制器只返回“事务错误”,看起来设备不再响应 BULK 传输(不是 ACKing),并且主机控制器超时。问题是,对于 USB 大容量存储类或 SCSI 系统是否有任何超时机制,这样,在超时后系统必须重新枚举或重新探测,否则它将不再响应?

我知道这可能是由于我的程序中的一个愚蠢的错误,或者是由于特定硬件的一些限制。但是,当我在 PC 上使用 Linux 中的 usbmon 模块来捕获同一个拇指驱动器上的传输时,我可以看到操作系统实际上每 5 次发送一个序列探测命令(Read-max-Lun 后跟 Test-unit-ready)秒,这可能是拇指驱动器在我的电脑上没有出现故障的原因。

谢谢!我期待着任何答复。

4

1 回答 1

0

我认为您使用 Test Unit Ready 命令走在正确的轨道上。我正在为嵌入式设备编写大容量存储设备驱动程序,并且在 OS X 上进行测试时,在初始 SCSI 查询之后,我的设备接收到 Test当没有其他活动发生时,大约每秒一次的 Unit Ready 命令。由于您的帖子很旧,如果您已经解决了问题,我建议您发布自己的解决方案。

否则,当没有其他活动时,请尝试从主机端添加定期测试单元就绪命令。您可以在 USB 活动发生时设置并激活计时器。如果计时器触发,您可以发送测试单元就绪命令。重复冲洗。

于 2015-03-28T04:04:15.700 回答