2

複合USBフレームワークを使用して大容量記憶装置ドライバーを変更し、組み込みの大容量記憶装置をXbox 360で表示できるようにしようとしています。これは、単純なVendorID/ProductIDブロックではないことを確認しました。

Xbox 360など、一部のデバイスが特定の大容量記憶装置を認識できない原因を具体的に理解したいと思います。私の質問はXboxに固有のものですが、デバイスが特定の種類の大容量記憶装置を認識できない理由を説明する一般的な回答も受け入れられます。

私が所有しているフラッシュデバイスのうち、機能しないのは、2つのエンドポイント(バルクIN、バルクOUT)のみが定義されているデバイスであることがわかりました。一方、3つのエンドポイント(バルク入力、バルク出力、割り込み入力)を含むすべての大容量記憶装置は機能しました。これは関連する観察または偶然の一致ですか?

4

1 に答える 1

3

大容量記憶装置が特定のホストで機能しない理由は2つあります。

最も単純な理由は、ベンダーと製品IDブロックです。iTunesなどの一部のソフトウェアは、提示されたベンダーと製品IDに基づいてデバイスが同期するのを防ぎます。これは非常に基本的な防止策であり、ベンダー/製品IDのなりすましによって簡単に回避されます。

特にXbox360の場合、その理由はXbox360SCSIの実装とUSBデバイスドライバーの実装の組み合わせです。USBマスストレージの仕様には、コマンドブロックラッパーと呼ばれる構造が含まれています。この構造には、実行するコマンドブロックの長さを宣言するメンバーbCBWCBLengthが含まれています。仕様によると、これには1から16までの値を合法的に含めることができます。

コマンドブロックの長さは合法的に1〜16ですが、CDBの従来の長さは6、10、12、または16バイトです。長さはコマンドによって異なります。たとえば、TEST UNIT READYコマンドは6バイトですが、MODESENSEには6バイトと10バイトのバージョンがあります。

Xbox 360は、TEST UNIT READYなどの特定のコマンドを6ではなく10バイトとして送信します。古いドライバー(Palm PreやAndroidなど)を搭載したUSBデバイスの場合、ドライバーが何をすべきかわからないため、問題が発生する可能性があります。これらの奇妙なサイズのCDB。

最終的に問題となるのは、デバイス側での不十分なドライバ処理とホスト側での奇妙なSCSI実装が混在していることです。Microsoftでない限り、修正は、奇妙なサイズのCBW長さフィールドを処理するように大容量記憶装置ドライバーを変更することです。

バルクのみのエンドポイントとバルク割り込みエンドポイントに関する観察は単なる偶然であり、問​​題、解決策、またはその間の何かとは何の関係もありませんでした。

于 2010-09-21T07:03:13.413 に答える