Arm USB大容量存储类是否需要在超时后重新枚举?

Arm USB大容量存储类是否需要在超时后重新枚举?,arm,usb,linux-device-driver,embedded-linux,usb-mass-storage,Arm,Usb,Linux Device Driver,Embedded Linux,Usb Mass Storage,这可能是个愚蠢的问题 我在运行嵌入式Linux的ARM-CortexM4平台(STM32F4系列)上调试USB存储设备。ARM作为USB主机工作,并尝试以USB全速(12Mb/s)与拇指驱动器通信 现在问题来了。在通过批量传输成功枚举和几个SCSI命令后,可以正确读取容量和所有内容。但是,当我再次尝试发送这些SCSI命令(在相同条件下)大约15秒后,USB主机控制器仅返回“Transaction Error”(事务错误),看起来设备不再响应批量传输(而不是确认),主机控制器超时。问题是,USB大

这可能是个愚蠢的问题

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

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

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


谢谢!我期待任何回复。

我认为您使用测试单元就绪命令的思路是正确的。。我正在为一个嵌入式设备编写一个大容量存储设备驱动程序,当在OS X上测试时,在初始SCSI查询之后,我的设备在没有其他活动发生时每秒接收一次测试单元就绪命令。因为你的帖子已经很老了,如果你已经解决了你的问题,我建议你发布你自己的解决方案


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

谢谢您的回复。不幸的是,这个问题已经有一段时间没有解决了,我现在已经放弃了。我曾经尝试切换回STMicro提供的USB主机固件,它似乎正常工作,但我尝试将所有内容复制到Linux设备驱动程序中,它在几秒钟后像以前一样挂起设备。我的问题可能与你的不同,因为我正在调试主机,而你正在设计设备。我不知道谁应该把定期测试装置准备好。显然,它不会自动发送到Linux内核驱动程序内部的任何地方,所以我怀疑它是由一些用户空间守护进程发送的,比如udev?我不太熟悉用户空间程序,这只是一个猜测。希望这方面的专家能帮助我。谢谢