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

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

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

答案1

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

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

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

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

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

请推荐一些有关这些内容的书给我。

抱歉,但询问学习建议被视为离题。它太宽泛,而且可能会过时。请参阅帮助中心了解更多信息。

答案2

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

是的。

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

在此处输入图片描述

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

devmgmt.msc 中的 USB PID/VID 图示

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

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

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

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

答案3

关于 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警告——请检查文档的最新版本。

答案4

FTDI 的简短参考

键盘和鼠标在 USB 中略有特殊之处。虽然它们确实有供应商和产品 ID,但您不希望出现新的键盘制造商无法与之前生产的计算机兼容的情况,也不希望必须为每个键盘发送驱动程序。

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

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

USB-HID 非常有用,因为它能够构建通用设备而不需要太多的驱动程序工作。例如,您可以获得一个桌面 USB 导弹发射器,它是一种 HID 设备。

相关内容