USB驱动器LED闪烁

3
我最近阅读了关于Arduino的Hello World应用程序,然后我想到自己,“我是否可以用我现在拥有的硬件做到这一点。”
由于我没有Arduino,所以我拿起一个闲置的USB闪存驱动器并开始在Google上搜索相关信息。在这个领域里我没有找到太多有用的信息,所以我现在在这里问:我是否可以通过某种编程环境(我想C#应该有一种方法来实现这一点)访问USB驱动器的硬件(例如LED)并与之交互?
此外,与此主题相关的问题 - 有人知道USB驱动器使用什么样的命令吗?例如,SCSI存储设备有一个标准化的命令集;ATA设备有类似的协议。简单的读/写命令是如何发出到USB存储设备的?

在我所知道的设备上,LED只是连接到存储器写入时闪烁,所以不需要软件控制,只需硬件支持即可。 - Oliver Friedrich
买一个Arduino和相关配件,你不会后悔的!它远远不止是玩LED灯。 - DFectuoso
我赞同,30美元的Arduino完全值得。 - basszero
5个回答

5

虽然USB协议相当通用,但外围设备实际上是功能特定的,需要在主机上安装某种设备驱动程序才能正常工作。

虽然USB闪存驱动器上有微控制器,但大多数USB存储设备遵循通用协议。这就是为什么您不必为每个插入Windows的驱动器安装不同的设备驱动程序。

我非常确定质量存储协议没有“打开LED”消息:)虽然实现USB驱动器的公司可能确实有一个特殊命令来执行此操作(也许是为了调试),但我会怀疑它是否会被公开。

虽然我不是Windows方面的专家,但我认为要直接访问USB堆栈,您需要编写自己的设备驱动程序并将其加载到内核中。您能想象一下,如果常规应用程序可以向任意USB设备发送“格式化所有内容”的命令会发生什么吗?


3

这里有一个DIY USB控制LED灯的链接,比插入USB存储设备需要更多的工作。

如果你想打开USB硬盘上的灯,只需向该驱动器上的文件写入数据,尽管我认为有些驱动器会一直保持亮着的状态,但大多数情况下只有在写入数据时才会亮起。

因此,如果您的USB驱动器已挂载为F:,则可以创建一个名为F:\lights.txt的文件,并向其写入几个k的数据,然后擦除该文件并重新开始。

缺点之一是闪存驱动器会在一段时间后磨损,这将导致它磨损。您也可以尝试从驱动器中读取数据。

如果您想要更精确的控制,可以获取像这些一样的USB数据采集设备,它们将让您驱动特定的电气输出,以为您想要的任何东西供电,包括灯泡或LED。它们最初是由科学家用于测量实验室设备的输入,我在大学物理课上也使用过类似的东西,虽然当时我们使用的是RS-232。

我知道将数据写入驱动器会使LED闪烁,但硬件超出了我的控制范围。我认为你有点太字面理解我的问题了。LED问题更多地是一个例子而不是一个目标。 - troyal

1

我会看这里。他们使用了一种叫做大容量存储的东西。


1

在Linux中,USB驱动器看起来像SCSI驱动器,因此您可以执行INQUIRY、READ、WRITE等操作。通常,闪存驱动器的控制器制造商可能会有一个供应商特定的“后门”,这对一般公众来说是未知的。


大多数USB驱动器控制器供应商都有自己独特的“供应商特定”方式来访问裸金属芯片,因此我无法代表所有供应商发言,因为这些协议要么是保密的,要么不公开。我们只能说SCSI READ/WRITE BUFFER之所以有供应商特定模式是有原因的。 - switchmode

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接