USB大容量存储:PC文件系统上看不到设备端数据

时间:2011-07-21 12:21:51

标签: usb device enumeration

使用细节: USB被用作大容量存储设备。设备本身是一个智能组件,可以在运行时创建文件。

为什么使用大容量存储呢? 因为我不想为不同的平台开发USB DD来传输数据。现有的通用大容量存储驱动程序可用于PC和设备之间的通信

问题: 当我的设备插入PC时,它会被发现为一个单独的驱动器,并在文件系统中可见。 现在如果我在设备端创建一个文件,内存对PC是可见的,它不会反映在PC的文件系统上。只有当我执行USB设备的软复位或插拔并插入设备时,才会看到更新的数据,因为设备枚举将从头开始再次进行。

问题: 为什么设备内存中的修改数据在PC上不可见? USB低层是否有任何方法,我可以使用它向PC发送命令再次进行设备枚举?

3 个答案:

答案 0 :(得分:0)

这是相当可预测的,主机​​很可能会缓存文件系统结构,因为它不希望它在外部进行更改。 您可能想尝试使您的媒体“可移动”,然后通知主机删除/插入,但我怀疑可能会惹恼操作系统(如果介质不是只读)以及您的用户。这可能比设备重置本身的创伤略小。

答案 1 :(得分:0)

我通过在较低的SCSI协议层中将媒体指示为“可移动”来解决了这个问题。当设备更改文件系统时,它会将媒体状态报告为“已删除”几秒钟。 Windows(以及Linux太IMO)大约每秒检查一次媒体状态,并显示媒体已被删除。

再次使媒体可用后,操作系统将根据您的更改重新读取文件系统。你不想经常这样做,因为这也会触发那些恼人的自动运行对话框。

答案 2 :(得分:0)

执行此操作的最佳方法是使用测试单元就绪(TUR)命令响应和请求检测命令响应。介质空闲时,Windows大约每秒钟发送一次测试单元就绪命令。完成文件编辑后,将以下TUR响应标记为失败(0x01),然后主机将发出请求检测命令,您应以“单元注意”(0x06)进行响应。然后使以下测试单元命令响应通过(0x00)。这将使Windows使文件缓存无效,并将重新获取内存。