由于我没有Arduino,所以我拿起一个闲置的USB闪存驱动器并开始在Google上搜索相关信息。在这个领域里我没有找到太多有用的信息,所以我现在在这里问:我是否可以通过某种编程环境(我想C#应该有一种方法来实现这一点)访问USB驱动器的硬件(例如LED)并与之交互?
此外,与此主题相关的问题 - 有人知道USB驱动器使用什么样的命令吗?例如,SCSI存储设备有一个标准化的命令集;ATA设备有类似的协议。简单的读/写命令是如何发出到USB存储设备的?
虽然USB协议相当通用,但外围设备实际上是功能特定的,需要在主机上安装某种设备驱动程序才能正常工作。
虽然USB闪存驱动器上有微控制器,但大多数USB存储设备遵循通用协议。这就是为什么您不必为每个插入Windows的驱动器安装不同的设备驱动程序。
我非常确定质量存储协议没有“打开LED”消息:)虽然实现USB驱动器的公司可能确实有一个特殊命令来执行此操作(也许是为了调试),但我会怀疑它是否会被公开。
虽然我不是Windows方面的专家,但我认为要直接访问USB堆栈,您需要编写自己的设备驱动程序并将其加载到内核中。您能想象一下,如果常规应用程序可以向任意USB设备发送“格式化所有内容”的命令会发生什么吗?
这里有一个DIY USB控制LED灯的链接,比插入USB存储设备需要更多的工作。
如果你想打开USB硬盘上的灯,只需向该驱动器上的文件写入数据,尽管我认为有些驱动器会一直保持亮着的状态,但大多数情况下只有在写入数据时才会亮起。
因此,如果您的USB驱动器已挂载为F:,则可以创建一个名为F:\lights.txt的文件,并向其写入几个k的数据,然后擦除该文件并重新开始。
缺点之一是闪存驱动器会在一段时间后磨损,这将导致它磨损。您也可以尝试从驱动器中读取数据。
如果您想要更精确的控制,可以获取像这些一样的USB数据采集设备,它们将让您驱动特定的电气输出,以为您想要的任何东西供电,包括灯泡或LED。它们最初是由科学家用于测量实验室设备的输入,我在大学物理课上也使用过类似的东西,虽然当时我们使用的是RS-232。在Linux中,USB驱动器看起来像SCSI驱动器,因此您可以执行INQUIRY、READ、WRITE等操作。通常,闪存驱动器的控制器制造商可能会有一个供应商特定的“后门”,这对一般公众来说是未知的。
您可以像控制RS232端口一样控制USB,希望这个MSDN链接能为您提供更多帮助 http://www.microsoft.com/downloads/details.aspx?FamilyID=075318ca-e4f1-4846-912c-b4ed37a1578b&DisplayLang=en