5

私は現在、Android で Usb Host モードを必要とするプロジェクトに取り組んでいます (4.2.2 を使用)。ファイルの一覧表示や USB ドライブからの読み取りなど、標準的なファイル操作を実行できる必要があります。ホスト モードのドキュメントを使用して、ドライブが接続されていること、USB 大容量ストレージであること、およびさまざまなエンドポイントを検出できるようになりました。

行き詰まったところは、その後どうするかです。コントロール転送とバルク転送の違い、またはコントロール転送の場合は実際に何が起こっているのかをよく理解していないと思います。残念ながら、USB 自体に関する私の知識はいくぶん限定されており、ドキュメントはかなり難しいと聞いています。

USBドライブを本質的に「マウント」するために何をする必要があるかについて、誰かが私を案内したり、実際の例を教えてくれたりできますか? 前に述べたように、ファイルの一覧表示と読み取りのファイル操作だけが必要であり、書き込みは必要ありません。また、ターゲットの電話は Samsung の Galaxy Nexus であることにも言及する必要があります。

ありがとう

4

1 に答える 1

0

コントロール エンドポイントは、(通常) USB デバイスにコマンドを送信するために使用されます。
バルク エンドポイントは (通常) USB デバイスにデータを転送するために使用されます。

バルクでは、データの構造は定義されていません。
しかし、コントロール転送ではデータの構造が定義されています。
ホストは、コマンドに関する情報 (リクエスト ID、コマンド パラメータ、データ ステージで転送するデータの長さなど) を含む 8 バイトのパケットを送信します。その後、オプションで一部のデータが受信/送信され、最終的にホスト/デバイスの両方がステータスステージに移動してコマンドの成功に同意します。それでおしまい!
しかし、devils は詳細にあります。usb の仕様を参照してください。:)


すべての USB メモリ (ペンドライブ、メモリ カード、ハード ドライブ) は、USB マス ストレージ クラスで動作します。

マスストレージクラスを使用すると、メモリの読み書きを実行できますが、その上のファイルシステム (例: EXT3、FAT...) には別のドライバーが必要です。

したがって、基本的にファイルの読み取り/書き込みを行います。デバイスに接続する必要があります。

  1. デバイスに接続します(完了しました)
  2. 大容量ストレージ インターフェイスを特定して制御する
  3. マスストレージクラスドライバーを書く
  4. マスストレージクラスドライバーを使用してファイルを読み書きするファイルシステムドライバーを書く
  5. プロジェクトでファイルシステム ドライバー API を使用します。

大容量ストレージ クラス ドライバーを作成するには、USB 大容量ストレージ クラスの仕様 http://www.usb.org/developers/docs/devclass_docs/を読む必要があります。おそらく、 Bulk のみを探しています。

次に、設計と仕様についてターゲットにしているファイルシステムを参照してください。(可能な場合は)


私の知る限り、AndroidにはUSBに接続されたファイルシステムのマウント機能があるため、おそらく車輪を再発明しています.


追記:
一部のファイルシステムは公に文書化されていません (リバースエンジニアリング情報は確実に存在しますが) (例: NTFS)
。一部のファイルシステムは (部分的に) 特許を取得しています。(例:FAT)

于 2015-11-02T19:37:01.100 に答える