2013-03-22 27 views
5

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

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

誰でも、私が本質的にUSBドライブをマウントするために何をする必要があるのか​​を実践的な例に向けて案内してくれますか?私が以前に言ったように、私はファイルをリストし、それらを読むのではなく、書くというファイル操作が必要です。私はまた、ターゲットの携帯電話はサムスンのギャラクシーネクサスであることを言及する必要があります。

おかげ

+0

もし私がこの問題に取り組もうとしたら、小さなベアメタル組み込みシステムに接続されたUSBストレージデバイスにアクセスするためのコードから始めるのがよいでしょう。ファイルシステムコード。これを行う公開されたアプリケーションはもちろんありますが、私はオープンソースであることに気づいていません。 –

+0

私はこれを行うことができるアプリケーションがあることを知っていますが、あなたが言ったように私はオープンソースのものを見つけることができません。たとえば、このプロジェクトの対象となる電話ではないGalaxy S3の場合、プラグインするだけで何もする必要はなく、機能します。あなたはあなたが示唆しているものの例を持っていますか? – echaney

答えて

0

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

バルクでは、データ構造が定義されていません。
ですが、制御転送ではデータの構造が定義されています。
ホストは、コマンドに関する情報(要求ID、コマンドパラメータ、データステージで転送するデータの長さなど)を含む8バイトのパケットを送信します。任意にいくつかのデータが受信/送信され、最終的にホスト/デバイスの両方がステータスステージに移動することによってコマンドの成功に同意する。それでおしまい!
しかし、悪魔は詳細です、usb仕様を参照してください。 :)

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

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

ですから、本質的にファイルを読み書きします。マスストレージインターフェース

  • のコントロールを特定し、取る
  • (あなたがそれを行っている)デバイスに接続

    1. マスストレージクラスドライバを書き込む書き込みファイルシステム:あなたは、デバイスに接続する必要があります大容量記憶装置クラスドライバを使用してファイルを読み書きするドライバ
    2. プロジェクト内のファイルシステムドライバapiを使用します。

    は、マスストレージクラスドライバを書くために、あなたが標的にされているファイルシステム(複数可)を参照してください、そして http://www.usb.org/developers/docs/devclass_docs/とprobeblyあなたがBulk only

    を探しているUSBマスストレージCLASの仕様を読んでする必要がありますそこには設計と仕様があります。(利用可能な場合)


    AFAIK、Androidはファイルシステムのマウント機能をUSBに接続しているため、プローブを使って車輪を再開発しています。


    余分ノート:(逆ENGG情報がprobely存在するが)
    いくつかのファイルシステムが公然と文書化されていません(例:NTFS)
    といくつかのファイルシステムである(一部)特許を取得。 (例:FAT)

  • 関連する問題