【问题标题】:Android USB OTG Read Usb DriveAndroid USB OTG 读取 USB 驱动器
【发布时间】:2013-03-12 11:17:14
【问题描述】:

我目前正在开发一个需要 Android 中的 Usb 主机模式的项目(使用 4.2.2)。我需要能够执行标准文件操作,例如列出文件和从 USB 驱动器读取。使用主机模式文档,我已经能够检测到驱动器是否连接,是 USB 大容量存储,并找到各种端点。

我被卡住的地方是在那之后该怎么做。我想我不太了解控制传输和批量传输之间的区别,或者在控制传输的情况下甚至发生了什么。不幸的是,我对 USB 本身的了解有些有限,而且我听说文档相当令人生畏。

任何人都可以帮助指导我完成,或者指出一个工作示例,我需要做什么才能基本上“安装”USB 驱动器?正如我之前所说,我只需要那些列出文件并读取它们的文件操作,而不是写入。我还应该提到目标手机是三星的 Galaxy Nexus。

谢谢

【问题讨论】:

  • 如果我要解决这个问题,我可能会从旨在访问插入小型裸机嵌入式系统的 USB 存储设备的代码开始,因为这可能比操作系统更干净便携文件系统代码。当然有已发布的应用程序可以做到这一点,但我不知道有任何开源应用程序。
  • 我知道有应用程序可以做到这一点,但就像你说的我找不到任何开源的。例如,在我的 Galaxy S3 上,它不是这个项目的目标手机,我不需要做任何事情,只需插入它就可以工作。你有什么建议的例子吗?

标签: android usb host mode


【解决方案1】:

控制端点(通常)用于向 USB 设备发送命令。
批量端点(通常)用于将数据传输到 USB 设备。

批量数据的结构没有定义。
但是在控制传输中定义了数据的结构。
主机发送一个 8 字节的数据包,其中包含有关命令的信息(如请求 ID、命令参数、在数据阶段传输的数据长度等)。然后可选地接收/发送一些数据,最后主机/设备都通过移动到状态阶段来同意命令的成功。就是这样!
但是,魔鬼在细节中,请参阅 USB 规范。 :)


所有 USB 存储器(笔式驱动器、存储卡、硬盘驱动器)都适用于 USB 大容量存储类。

使用大容量存储类,您可以执行内存读写,但其上的文件系统(例如:EXT3、FAT...)需要另一个驱动程序。

所以,本质上是读/写文件。您需要连接到设备:

  1. 连接到设备(你已经完成了)
  2. 识别并控制大容量存储接口
  3. 编写海量存储类驱动程序
  4. 编写将使用大容量存储类驱动程序读取/写入文件的文件系统驱动程序
  5. 在您的项目中使用文件系统驱动程序 api。

要编写海量存储类驱动程序,您必须阅读 USB 海量存储类规范 http://www.usb.org/developers/docs/devclass_docs/ 并且您正在寻找 Bulk only

然后,参考您所针对的文件系统进行设计和规范。 (如果有)


AFAIK,Android 具有连接到 USB 的文件系统安装工具,因此您正在探索性地重新发明轮子。


补充说明:
一些文件系统没有公开记录(尽管反向 engg 信息可能存在)(例如:NTFS)
并且一些文件系统(部分)获得了专利。 (例如:FAT)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2020-02-17
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多