问题标签 [usb-mass-storage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1269 浏览

usb - USB 闪存驱动器序列号

这个问题不完全是关于代码,而是更多地了解 USB 闪存驱动器。我正在使用序列号信息生成伪随机数,稍后在我的项目中使用该值。我有一些n来自不同公司的闪存设备,当我读取个人的序列号时,有些显示 20 位数的值,有些则没有序列号。几个示例值如下:

有人能说出这个 20 位数字是标准定义还是其他什么?查找此信息的原因是,我找到了此pdf:Pen DriveTM 2.0 Specification define some standard for pen drive serial number。很少有闪存驱动器序列号如此随机,以至于我无法理解这是怎么回事。

非常感谢任何见解。谢谢。

0 投票
2 回答
8129 浏览

android - 如何在 Android 中获取外部 USB 大容量存储路径?

我需要从 / 到 USB 棒导入/导出一些数据。有没有办法获取已安装的 USB 设备的路径?

我的代码看起来像这样:

当设备为大容量存储时,我可以搜索路径“mnt/usb_storage/*”是否存在。如果仅连接了一个 USB 大容量存储器,或者当连接了第二个 USB 大容量存储器时应用程序处于前台,则此方法可以正常工作。如果您想知道,是的,有多个 USB 端口的 Android 设备。

当我有 UsbManager/UsbDevice/UsbInterface 时,是否无法获取路径?所有设备上的路径都像“mnt/usb_storage/*”吗?

更新1:

目标 Android 版本 5.1 要求:必须在应用程序中集成“文件选择器”,必须应用文件夹过滤器、文件名和文件类型。

更新 2:

正如@greenapps 所建议的,我尝试了“ACTION_OPEN_DOCUMENT_TREE”:

这没有显示 USB 棒,我也无法过滤文件和文件夹。 选择文档树

相同设备:es-datei explorer 能够显示 USB 设备。

ES Datei explorer

我的要求是显示一个自定义文件选择器,用户可以在其中从客户特定的云、内部存储或类似于 es datei explorer 的 USB 设备中选择文件。

我搜索路径是否存在的解决方案:“mnt/usb_storage/*”存在按要求工作我只是想知道是否有更好的方法。

0 投票
0 回答
438 浏览

android - USB OTG 大容量存储设备上的文件删除

我有一个连接到智能手机的 mp3 播放器。

(请参阅我之前的问题中的调试日志:USB OTG 文件删除

出于某种奇怪的原因,可用于 Android的唯一可用应用程序出现在 OTG Disk Explorer Pro。但它没有删除文件的功能。

你以前有过这样的问题吗?是否有任何适用于已连接存储设备的适用于 Android 的应用程序?

如果没有,您能否指出如何根据 ATAPI For Rewritable Media (INF-8070.PDF) 实现文件删除?

编辑:

好吧。我在第 239 页的“USB 大容量存储:设计和编程设备和嵌入式主机”一书中找到了关于如何删除 FAT16 中的文件的很好的解释。

好的。你会推荐一些适用于 Android 的开源项目 oa 文件管理器,我可以使用它来使用我的 mp3 播放器吗?

0 投票
1 回答
599 浏览

linux-kernel - SD 卡如何作为 SCSI 设备安装在 USB 总线上

我有一个 sd 卡,它连接在基于 im6qp 处理器的板上的微芯片 usb224x 控制器上。

SD 信号将转换为 USB dp 和 dm 信号。现在有两个用例,

用例1:上电前已插入SD卡,

现在,如果我移除 SD 卡,我不会得到任何内核打印表明该卡已被移除。

usecase2:在运行内核时插入 SD 卡。没有打印表明 SD 卡被检测为 sda。

在案例 1 中,我可以安装此 SD 卡并访问其内容。在案例 2 中,我不能。

我有这个问题/困惑

  1. udev 等用户空间是否负责判断设备是否存在?我尝试将打印件放入许多 USB 核心文件中,但没有打印任何内容。但是,与此同时,我可以在使用相同 USB 总线但使用另一个通道的触摸设备上获得中断。

我尝试在驱动程序/usb、存储和 scsi 子系统中的 USB 函数中获取打印,但没有出现可观察到的打印。

我尝试启用 debugfs 打印,但即使那时我也没有收到任何日志,这是另一个我无法解决的问题。

主要问题是我不知道如何以及谁启动了这种删除和插入的更改,它是寻找中断并启动整个事情的低级内核驱动程序还是/sbin/hotplug之类的udev

我的内核版本是 4.9,我正在为普通用例使用构建根,以及具有相同内核的 android O。我得到同样的观察。

0 投票
0 回答
205 浏览

android - Android 设备充当 Windows 主机的客户端 FAT32 大容量存储

是否有可能制作一个 android 应用程序,允许运行 Windows 的计算机通过 USB 连接到 Android 并让 Windows 机器相信 android 是 FAT32 存储设备?

到目前为止我所知道的: 1. Android 应用程序需要模拟 SCSI 协议 2. android 应用程序需要模拟 FAT32 文件系统

android 应用程序可以捕获 USB 接口以模拟存储设备吗?

从初始测试开始,Android USB 驱动程序/操作系统在移交给应用程序之前处理设备上的初始通信。这导致了使这项工作出现问题我相信我需要发送原始信号以通知主机将使用 SCSI 完成通信。其他问题是,在我被允许充当客户端之前,我似乎需要将主机的供应商 ID 添加到应用程序中。这将是一个问题,因为我在所有情况下都没有该信息,并且要求用户输入它不是一个好的体验。

我不需要暴露android的文件系统。相反,将向主机(Windows 机器)公开的文件将是自定义的,不会存储在手机上。在这种情况下要清楚,主机将是 windows 机器,客户端将是 android 设备。Android 设备需要充当大容量存储设备。应用程序将是模拟存储接口并公开为主机设计的自定义文件系统的应用程序。

0 投票
0 回答
402 浏览

c - 如何使大容量存储设备从固件只读到 Windows

我正在使用具有 USB 接口的硬件的固件。当设备连接到 USB 端口时,它枚举为 2 个类:CDC 和 MSC。

对于 MSC 部分,该设备是用户可配置的,这样该设备可以被写保护。因此用户可以选择设备是只读的还是具有读写能力的。

我正在使用一个预先编写的 USB 库,它可以枚举具有 2 个接口的设备。我正在努力解决的部分是如何让我的固件像设备是只读的一样工作。

微控制器属于 STM32L4 系列。大部分代码是从 STM32CubeMX 软件生成的。

经过一番调查,我发现 SCSI Write10 和 SCSI Request Sense 命令可以检查 MSC 是否被写保护。目前的实现如下:

我已经调试并检查了IsWriteProtected()当设备配置为写保护时是否正确返回非零值。正在将SCSI_SenseCode()错误代码推送到循环列表中。Windows 应该发送 Request Sense SCSI 命令来检索错误代码,但我已经用断点检查过 Windows 从未发送过这个命令!

如果我以写保护的方式配置设备,PC中的磁盘驱动器枚举需要很长时间,并且文件资源管理器会长时间保持忙碌状态。枚举完成后,我可以打开磁盘驱动器,如果我尝试写入磁盘,Windows 会报告发生磁盘 I/O 并且写入失败。我期待 Windows 告诉我磁盘是只读的。

如果我将设备配置为允许写入,则磁盘驱动器枚举需要定期的时间,就好像我插入了一个普通的笔式驱动器一样。

  1. 为什么 Windows 从不发送 Request Sense SCSI 命令?
  2. 为什么由于 Write10 命令的写保护而返回 -1 时磁盘枚举需要很长时间?我需要磁盘在有或没有写保护的情况下快速枚举。
0 投票
0 回答
322 浏览

filesystems - 带有设备文件的 FAT32 大容量存储模拟器

我有一个类似智能卡的 miniSD 卡(据我所知,它是一个 javacard),我正在尝试为它编写一个在 Windows 和 Linux 上运行的模拟器。该模拟器将用于软件集成测试。由于几个原因,我想在不使用实际硬件的情况下测试我的客户端。一个原因是实际硬件将不可逆地改变其状态并且不允许完全重置。

该设备采用 FAT32 文件系统实现大容量存储。它包含一个特殊的设备文件,用于通过简单的文件写入/读取操作来控制设备。

我的目标是,一旦模拟器启动,虚拟(模拟)设备就会在 Windows 资源管理器中显示驱动器号,就像有人实际插入真实设备一样。

我想知道是否有任何开放的软件项目可以作为我的程序的基础?最大的挑战显然是

  • 提供/开发“虚拟”(USB/SD)大容量存储设备
  • 拦截对特殊设备文件的文件 I/O 操作。

根据 Wikipedia,设备文件是简化驱动程序开发的常用方法。所以我想知道是否有针对驱动程序开发人员的现有仿真解决方案。至少我找不到任何东西。

模拟设备文件本身将是重要的第一步。我的第一个想法是使用普通文件并通过在观察该文件的同时实际读取/写入该文件来与客户端进行通信。即客户端一写入文件就清除文件并将响应写入其中。我不知道这是否可行。一个问题是客户端没有以共享模式打开文件,所以我的模拟器无法同时访问它。

然后我发现QEMU可以模拟大容量存储,但是它似乎只支持图像文件并且可能不允许设备文件。

Microsoft 有一些关于如何编写 USB 设备仿真器和驱动程序的文档,但它似乎非常复杂,我想知道是否有可以扩展的现有解决方案:

最后是USB/IP 项目,但我不知道它是否有帮助,因为我仍然需要开发驱动程序,然后我又回到了上面复杂的 MS 文档。

0 投票
2 回答
183 浏览

macos - 如何在 macOS 上区分 USB 硬盘和 SSD 与 USB 密钥/笔式驱动器

一方面,代码如何区分外部 USB 硬盘驱动器和固态驱动器与另一方面的 USB 记忆棒?

我不熟悉 macOS API(或系统调用、中断、消息传递和其他东西),但我猜它会在 I/O Kit 或磁盘仲裁中?

在终端命令行上,您可以使用system_profiler SPUSBDataType并查看“可移动媒体”下列出的此信息。

0 投票
0 回答
40 浏览

upload - 引导加载程序 Sam4s Atmel Studio

我想用 atmel studio 为 sam4s 制作一个引导加载程序,你对如何进行有什么建议吗?

我喜欢这样做,SD 内存被视为大容量存储,用于将应用程序文件复制给我们。

你对我能做什么有什么建议吗?

我是atmel的新手,我只对keil有一些经验......

谢谢你们

0 投票
0 回答
31 浏览

android - 在 Android Studio 中检测传输文件和传输照片(USB MASS Storage)的 Intent 过滤器

我在接收器中使用意图过滤器

广播接收器类

}

在我的 MainActivity onCreateMethod

在 MainActivity 中注册接收器 -

此代码广播是用户将 USB 连接到手机。但我希望广播接收器仅检测用户是否未禁用传输文件/传输照片。我不想检测仅用于充电选项的 USB 连接。我该怎么做?