2011-07-21 14 views
1

使用の詳細: USBが大容量記憶装置として使用されています。デバイス自体はインテリジェントなコンポーネントであり、実行時にファイルを作成できます。USBマスストレージ:デバイス側のデータ変更がPCファイルシステムで表示されない

なぜ大容量ストレージを使用しますか? 私は、データを転送するためのさまざまなプラットフォーム用のUSB DDを開発したくなかったので。既存のユニバーサルマスストレージドライバをPCとデバイス間の通信に使用することができます。

問題: デバイスがPCに接続されると、別のドライブとして検出され、ファイルシステムに表示されます。 デバイス側でファイルを作成すると、メモリはPCから見えますが、PCのファイルシステムに反映されません。更新されたデータは、USBデバイスのソフトリセットを実行するか、プラグインしてデバイスに接続すると表示されます。デバイスの列挙は最初から再度行われるためです。

質問: デバイスメモリの変更されたデータがPCで見えないのはなぜですか? USBの下位層には、デバイスの列挙を再度実行するためのコマンドをPCに送信する方法がありますか?

答えて

0

これはかなり予測可能です。ホストは、ファイルシステムの構造が外部から変更されることを想定していないため、キャッシュする可能性が最も高いです。 あなたのメディアを「リムーバブル」にしてからホストに削除/挿入を知らせたいかもしれませんが、OSが邪魔になるかもしれないと思います。これはおそらく、デバイス自体をリセットするよりもわずかに外傷を軽減するでしょう。

+0

あなたはファイルシステム構造の問題がある限り正しいです。しかし、キャッシュ全体のUSBドライブは、私は可能性は疑いがあります。 32 GBのメモリを搭載した大容量記憶装置を考えてみると、PCはメモリ全体をキャッシュすることはできません。このキャッシングには一定の制限があります。私の憶測は、システムが使用しているページのサイズに関係なく、データの量はキャッシュされ、残りはアクセスに応じて後で取り出されます。 – ADushyant

+0

現在、デバイスにソフトリセットを実行するように設定しました。これはOSにデバイスの再列挙を通知する方法ですが、一部のOSではエラープロンプトが表示されます。これは避けたいものです。 OSに何らかの信号を送りたいので、再び列挙を始めることができます。 – ADushyant

+0

@Adushyant:どのFSを使用していますか? IIRCの場合、FAT32などの構造をキャッシュすることはかなり可能であるはずです(実際には、リセット以外の唯一の方法はSCSIメディアの削除だと思いますが、それでもエラーが発生する可能性があります。 OSでは手動ではなく) – Hasturkun

0

この問題は、メディアを下位のSCSIプロトコルレイヤで「リムーバブル」と指定することで解決しました。デバイスがファイルシステムを変更すると、メディアステータスは数秒間「削除済み」と報告されます。 Windows(およびLinuxでもIMO)は、約1秒でメディアの状態をチェックし、メディアが削除されたことを示します。

メディアを再び使用可能にすると、OSは変更を加えたファイルシステムを再読み込みします。あまりにも頻繁にやりたいとは思わない。これはまた、迷惑な自動実行ダイアログを引き起こすからだ。

+0

同様の方法で私のシステムを構成しましたが、MACではエラープロンプトが出ます。 MACでこれを試しましたか?私はWindowsとLinux上でこのプロンプトを取得しませんが、MAC上で私はいつもそれを取得します。それはあなたのためにMACでプロンプトを表示しない場合、おそらく私は間違った何かをしなければならないSCSI層を構成している。 – ADushyant

関連する問題