USB(SCSI)固件开发-如何处理可移动介质

USB(SCSI)固件开发-如何处理可移动介质,usb,firmware,scsi,usb-mass-storage,Usb,Firmware,Scsi,Usb Mass Storage,我正在开发一个新的。我让设备基本正常工作(速度太慢了,但这是另一个对话)。我不喜欢的是处理设备移除-不是从USB端,而是当USB设备被(强制)介质移除而强制脱机时,USB设备向主机提供正确的响应 我尝试过用未准备好的感知键来响应读/写请求,但主机的反应似乎与断开USB电缆时的反应不同 使用可移动介质的USB设备在运行过程中被拉出时的预期行为是什么?感谢LUFA的Dean Camera解决了这个问题(我不知道他在这里是否有身份)。解决方案是不更改LUN计数,而是使用非法的\u请求检测密钥响应以防止

我正在开发一个新的。我让设备基本正常工作(速度太慢了,但这是另一个对话)。我不喜欢的是处理设备移除-不是从USB端,而是当USB设备被(强制)介质移除而强制脱机时,USB设备向主机提供正确的响应

我尝试过用未准备好的感知键来响应读/写请求,但主机的反应似乎与断开USB电缆时的反应不同


使用可移动介质的USB设备在运行过程中被拉出时的预期行为是什么?

感谢LUFA的Dean Camera解决了这个问题(我不知道他在这里是否有身份)。解决方案是不更改LUN计数,而是使用非法的\u请求检测密钥响应以防止\u允许\u介质\u删除,并根据设备的状态(成功或未准备好/介质\u不存在)响应测试单元\u就绪。在状态发生任何变化后,我还会为第一个命令生成一个单位注意力。现在,面对介质的移除和插入,设备可以完全正常运行。

您的主机是什么?我在Linux和Windows 7+上都很幸运地使用了MEDIUM_NOT_。如果内存够我用的话,在不存在介质的情况下一致地回复所有命令可能很重要,而不仅仅是读写式的测试单元也应该准备好。我正在用Linux(Raspbian)和mac进行测试。我试着把它添加到TestJuunITyRead中,但是如果这样的话,你可以考虑把你的评论转换成一个答案。我在UNITTI TestYORD中添加了相同的检查/响应,但这似乎没什么帮助。啊,你的最后一段终于渗入了我的大脑。您没有弹出设备,就像使用
eject
命令一样,获得启动\停止\单元弹出?在这种情况下,您可能希望将LUN拉出,而不是表现为媒体刚刚消失。是否可以尝试使用已报告的\u LUN \u数据\u已更改发出单元\u注意,然后再拒绝报告LUN?已报告的\u LUN \u数据\u已更改的值是多少?我看不出来。它是一个附加的感知码值吗?