这可能是一个愚蠢的问题,
我在运行嵌入式 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)秒,这可能是拇指驱动器在我的电脑上没有出现故障的原因。
谢谢!我期待着任何答复。