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

USB (SCSI) firmware development - how to handle removable media

我正在开发 USB mass storage device。我的设备基本上可以正常工作(它太慢了,但那是另一个话题)。无法正常工作的是处理设备移除 - 不是从 USB 端,而是当 USB 设备因(强制)媒体移除而被迫离线时,USB 设备向主机提供正确的响应。

我尝试使用 NOT_READY 感知键和 MEDIUM_NOT_PRESENT 附加信息来响应 read/write 请求,但主机似乎没有以相同的方式对此做出反应他们会断开 USB 数据线。

在操作过程中拔出媒体时,带有可移动媒体的 USB 设备的预期行为是什么?

感谢LUFA的Dean Camera解决了这个问题(不知道他在这里有没有身份)。解决方案是不更改 LUN 计数,而是使用 ILLEGAL_REQUEST 感应键响应 PREVENT_ALLOW_MEDIUM_REMOVAL,并针对设备状态(成功或成功)适当响应 TEST_UNIT_READY NOT_READY/MEDIUM_NOT_PRESENT)。在状态发生任何变化后,我还会为第一个命令生成 UNIT_ATTENTION。现在设备在移除和插入媒体时完全正确地运行。