2013-03-22 107 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)