计算机如何知道哪个设备连接到 USB 端口?

Kap*_*pil 22 motherboard usb computer-architecture hardware-detection

我想知道在同一个 USB 端口中可以连接许多设备,如键盘、鼠标、存储设备等。 那么,计算机如何知道哪个设备连接到 USB 端口,例如当我们插入键盘时键盘适配器如何在主板上知道它是插入的键盘并开始与它通信?
每个USB设备是否都会向计算机发送一些有关它们的独特信息以供计算机识别?

LPC*_*hip 34

是的。USB,又名通用串行总线是 4 个端口的连接。VCC、Data+、Data- 和 Ground,其中较新的规范将具有更多带宽和功率传输。

当您将 USB 设备连接到计算机时,计算机将首先通过端口和数据提供 5v 电压以请求初始化。USB 电缆的另一端,即设备,将具有处理端口通信的控制器芯片。它将发送带有识别码的响应。

它可以使用大量通用标识,或者可以说其他,并传输附加代码。在计算机的情况下,如果发生这种情况,它将查看驱动程序是否已安装或与此唯一标识符匹配。如果没有,它将响应:“设备未被识别。” 并且您只能通过安装正确的驱动程序来使其工作,这将增加对该唯一标识代码的支持。

初始阶段完成后,设备进入操作模式,驱动程序将继续与 USB 设备通信。

小旁注:如果您尝试仅将引线连接到 USB 插头,例如...电源 + 和接地,您会发现它无法可靠工作,因为没有初始化阶段。它会继续然后关闭。

请推荐我一些关于这些东西的书。

抱歉,但要求学习建议被视为离题。它太广泛了,可能会过时。有关详细信息,请参阅帮助中心。


Law*_*ceC 21

每个USB设备是否都会向计算机发送一些有关它们的独特信息以供计算机识别?

是的。

基本上 USB 设备有一个类号(它在设备间不是超级唯一的,但确实定义了设备的“类型”),以及它们在连接时告诉主机的供应商 ID (VID) 和产品 ID (PID)。在 Windows 上,在设备管理器中,您可以在此处的“兼容 ID”下看到 USB 类号...

在此处输入图片说明

...您可以在“硬件 ID”下看到 VID 和 PID ...

devmgmt.msc 中 USB PID/VID 的图示

设备制造商从 USB 实施者论坛获得新的 USB VID,USB-IF 还维护类代码列表。

上面的例子,如果你看这个,你可以看到类 0x03 是一个“人机接口设备”。操作系统或其他可以支持基于类或类+PID/VID 组合的事物。

USB 供应商 ID (VID) 和产品 ID (PID) 是 16 位数字,用于向计算机或其他主机标识 USB 设备。USB 实施者论坛将每个供应商 ID 分配给特定公司,该公司又将 PID 分配给各个产品。参考

PCI/PCIe(以及 90 年代早期的 ISAPNP 的 ISA)在 USB 之前就有这种机制,这就是 PCI/PCIe“即插即用”的原因——操作系统可以检测设备并自动加载驱动程序。PCI/PCIe 的机制更加复杂,因为操作系统除了获取 VID/PID 之外,还可以为设备分配资源。

  • USB 使用所谓的“隐藏”->“人机界面设备”来告诉任何设备它是键盘,这与 bios 无关,即使是游戏机也可以识别键盘 (3认同)
  • 产品 ID 和供应商 ID 通常不用于识别设备类型或其功能。 (2认同)
  • 另一个几乎错误的答案。设备提供的最重要的信息是它的 CLASS。该类定义要加载的通用驱动程序。VID 和 PID 仅在设备具有任何单独的专有功能时使用,然后它们需要由特定于设备的驱动程序启用。HID 是 USB 通用类之一。 (2认同)
  • 我添加了有关课程的信息。如果您试图寻找一些奇怪的 USB 设备的驱动程序,VID 和 PID 会很有用。 (2认同)

ghe*_*ist 17

关于 USB 的一个很好的信息来源是www.usb.org,稍后会详细介绍。我承认可能很难理解从哪里开始,所以我尝试在下面做一个简短的介绍。

首先,USB 有多种变体,但它们的工作原理基本相同。USB 设备使用自己的电缆连接到计算机。大多数情况下使用集线器,但让我们在这里保持简单。

一旦设备中的微型计算机通电,它就会尝试与计算机通信。计算机和设备以您可能称之为“协商”的方式开始,他们就许多事情达成一致。一个是使用速度,它们从每秒 1.5MBit 上升到 10GBit/s。由于每个 USB 设备都有自己的连接到计算机,通过集线器,每个可以有不同的速度。该设备还会协商电源,因为它从一开始只能消耗 100mA。

USB 设备将有一个或多个端点。这可以用作同时具有音频接口和 MIDI 键盘的设备的示例。

USB 设备将在协议中显示自己的供应商 ID,这是分配给供应商的唯一编号以及有关设备的更多信息。此信息允许计算机中的供应商特定设备驱动程序与设备对话。

然而,总是需要供应商特定的设备并不是一个好主意。今天的大多数设备都是“类兼容的”——它们发送类代码并按预期运行。类代码在此处定义:https : //www.usb.org/defined-class-codes。一种更常见的类代码 03 用于人机接口设备,是键盘、鼠标、操纵杆等的统称。在www.usb.org的文档部分,有一个文档描述了不同类的行为方式。一个例子是https://usb.org/sites/default/files/hut1_2.pdf警告——检查文档的最新版本。


Ale*_*ski 9

每个USB设备是否都会向计算机发送一些有关它们的独特信息以供计算机识别?

是的,它被称为“设备描述符”。

USB 框架中有一个过程叫做“枚举”。当一个设备连接到一个 PC USB 端口时,主机初始化该端口,为其分配新的唯一 USB 地址,并要求该设备提供一组“描述符”。描述符顾名思义,描述设备是什么。除了供应商和产品标识符外,设备还提供有关其所属 USB 设备类别的信息。还有更多关于电源要求、接口的细节、电源管理参数等。类是设备提供的最重要的信息。

类是为了操作系统方便而定义的,它们具有使用设备控制的通用方法。通用键盘和鼠标属于(设计)HID 类(人机接口设备类)。其他典型的类是 COM 设备、网络摄像头视频类、大容量存储类。USB 设备类定义了控制数据的基本功能和常用方法。因此系统为该类设备加载了一个通用驱动程序,该设备就可以正常工作。更复杂的设备可能会定义专有接口,然后您需要下载并安装专有驱动程序以获得设备的扩展功能。但是为了用户方便,所有 USB 设备通常都实现了一些基本的类功能,因此用户可以开始使用它。

键盘设计为符合 HID 类设备,因此您的 BIOS 仅实现一个驱动程序 HID。因此,无论供应商 ID 或产品 ID 是什么,一个驱动程序适用于所有键盘(如果设计正确),包括数百个键盘。但是,除非您加载正确的驱动程序,否则并非所有(特殊)键都可以使用,该驱动程序只能在操作系统下使用。

如果您好奇,您可能想使用一个名为“ USBTreeView ”的实用程序,您会惊讶于 USB 设备向 USB 主机提供了多少信息。


pjc*_*c50 7

来自 FTDI 的简短参考

USB 中的键盘和鼠标稍有特殊。虽然他们确实有供应商和产品 ID,但您不希望出现新键盘制造商无法使用它们存在之前制造的计算机的情况,也不想为每个键盘提供驱动程序。

因此,在具有供应商和产品 ID 的同一个描述符中,有一个设备类、设备子类和协议。所有键盘都报告为设备类 3(人机接口设备,“HID”)协议 1(键盘)。

然后有一组进一步的“用法”可供计算机从设备使用,以描述键盘上有多少个键,它是什么语言,等等。对于鼠标,这些描述轴(通常是两个,但您可以使用 3D 鼠标)和按钮(任意数量)。操纵杆也一样;HID 协议可以涵盖从两轴一键操纵杆到复杂的飞行控制器的所有内容。它不仅包括输入,还包括键盘灯和力反馈或摇杆振动等输出。

USB-HID 在无需太多驱动程序工作的情况下构建通用设备的能力方面非常有用。例如,您可以获得一个桌面 USB 导弹发射器,它是一个 HID 设备。

  • 最后一个例子似乎是一个相当不人性化的界面设备 (2认同)