这可能是一个愚蠢的问题,
我正在运行嵌入式Linux的ARM-CortexM4平台(STM32F4系列)上调试USB存储设备。 ARM正在作为USB主机工作,并试图以USB全速(12Mb / s)与拇指驱动器进行通信。
现在问题就在于此。通过BULK传输成功枚举和几个SCSI命令后,可以正确读取容量和所有内容。但是,在我尝试再次发送这些SCSI命令大约15秒后(在相同条件下),USB主机控制器只返回“事务错误”,看起来设备不再响应BULK传输(不是确认)和主机控制器超时。问题是,是否存在USB大容量存储类或SCSI系统的超时机制,以便在超时后系统必须重新枚举或重新探测,否则它将不再响应?
我知道这可能是由于我的程序中出现了一个愚蠢的错误,或者是由于特定硬件的某些限制。然而,当我在PC上使用Linux中的usbmon模块捕获同一个拇指驱动器上的传输时,我可以看到操作系统实际上每隔5个发送一个序列探测命令(Read-max-Lun,然后是Test-unit-ready)秒,这可能是拇指驱动器在我的电脑上没有故障的原因。
谢谢!我期待着任何回复。
答案 0 :(得分:0)
我认为您使用“测试单元就绪”命令处于正确的轨道上......我正在为嵌入式设备编写大容量存储设备驱动程序,并在初始SCSI查询后在OS X上进行测试时,当没有其他活动发生时,我的设备大约每秒接收一次Test Unit Ready命令。由于您的帖子很旧,我建议您发布自己的解决方案,如果您已经解决了问题。
否则,在没有其他活动时,尝试从主机端添加定期测试单元就绪命令。您可以在USB活动发生时设置和激活定时器。如果计时器触发,你可以发送一个Test unit ready命令。冲洗重复。