2013-03-22 163 views
5

我目前正在研究一個需要Android中的USB主機模式(使用4.2.2)的項目。我需要能夠執行標準文件操作,如列出文件和從USB驅動器讀取。使用主機模式文檔,我已經到了能夠檢測驅動器連接,USB大容量存儲以及查找各種端點的程度。Android USB OTG讀取USB驅動器

那裏我被卡住了,接下來要做什麼。我想我並不真正瞭解控制和批量轉讓之間的區別,或者在控制轉移的情況下甚至發生了什麼。不幸的是,我對USB本身的知識有限,我聽說文檔相當艱鉅。

任何人都可以幫助指導我,或指向我的一個工作示例,我需要做什麼來實質上「掛載」USB驅動器?正如我之前所說的,我只需要列出文件和讀取它們的文件操作,而不是寫入。我還應該提到目標手機是三星Galaxy Nexus。

謝謝

+0

如果我要解決這個問題,我可能會從代碼開始訪問插入小型裸機嵌入式系統的USB存儲設備,因爲這可能比操作系統更便於攜帶文件系統代碼。當然,發佈的應用程序可以實現這一點,但我不知道任何開源代碼。 – 2013-03-22 15:01:18

+0

我知道有應用程序可以做到這一點,但就像你說我找不到任何開源的應用程序。例如,在我的Galaxy S3上,這不是這個項目的目標手機,我不需要做任何事情,只需插入即可使用。你有什麼樣的建議嗎? – echaney 2013-03-22 15:05:47

回答

0

控制端點是(通常)用於發送命令到USB設備。
批量端點(通常)用於將數據傳輸到USB設備。

散裝數據的結構沒有定義。
但在控制轉移數據結構的定義。
主機發送一個8byte數據包,其中包含有關該命令的信息(如請求ID,命令參數,數據傳輸的數據長度等等)。然後可選地接收/發送一些數據,最後通過轉移到狀態階段,主機/設備同意命令成功。而已!
但是,惡魔在細節中,請參閱usb規範。 :)


所有usb存儲器(pendrives,存儲卡,硬盤驅動器)工作在usb大容量存儲類。

使用海量存儲類,您可以執行內存讀寫操作,但其上的文件系統(例如:EXT3,FAT ...)需要另一個驅動程序。

所以,本質上是讀取/寫入文件。您需要連接到該設備:

  1. 連接到設備(你這樣做的話)
  2. 鑑定,並採取控制了海量存儲接口
  3. 寫一個大容量存儲類驅動程序
  4. 寫入文件系統驅動程序將使用海量存儲類驅動程序讀取/寫入文件
  5. 在項目中使用文件系統驅動程序api。

寫一個大容量存儲類驅動程序,您必須閱讀USB大容量存儲CLAS規範 http://www.usb.org/developers/docs/devclass_docs/和probebly你正在尋找的Bulk only

,然後,請你靶向文件系統(S)爲那裏設計和規格。(如果可用)


據我所知,Android已經安裝的文件系統設備連接到USB接口,所以你probebly重新發明輪子。


額外注:
一些文件系統不開放的文檔(儘管反向ENGG信息probely存在)(例如:NTFS)
和一些文件系統是(部分)的專利。 (例如:FAT)