我有一台带有 2 个 USB 2.0 和 1 个 USB 3.0 端口的笔记本电脑,我想知道我可以插入多少个 USB 硬盘。Linux 内核中有硬性限制吗?
在性能方面,插入端口的驱动器共享的速度是多少?
答案1
理论上,一台主机 PC 最多可以连接 127 个设备,但实际功率和数据带宽限制会阻止这种情况发生。这 127 个设备可以排列在最多七层的分层集线器网络中,PC 主机算作第 1 层,最远的设备算作第 7 层。PC 为集线器提供 5 个单位的功率。每个单位为 100 mA,每个端口至少需要 1 个单位。集线器本身消耗一个单位,剩下 4 个单位用于最多 4 个端口。因此,您永远找不到具有超过四个端口的总线供电集线器。
总线供电集线器还有另一个限制。由于每个端口只有一个电源单元,因此它们只能下游连接到单个设备。您无法将它们连接到另一个集线器进行扩展,因为该集线器需要额外的 5 个单元。而且并非所有设备都可以用一个单元运行。像鼠标这样的低功率设备可以工作,但高功率设备最多可以要求 5 个单元。高功率 USB 设备只有在直接插入 PC 主机或可以为端口提供 5 个单元的自供电集线器时才会工作。
当您连接设备时,PC 会查询设备的功能和要求。例如,PC 知道它连接到 4 端口总线供电集线器,这意味着每个端口只能驱动一个单元。如果您尝试将高功率设备插入该集线器,操作系统将抛出错误消息并拒绝启用该设备。
由于这些限制,总线供电集线器通常不是一个好主意,并且主要用于移动设备,而不是桌面使用。
另一方面,如果插入端口的设备本身是自供电的,那么它们可能不需要来自集线器的多于一个单元。例如,外部磁盘驱动器有自己的电源,因此应该可以在总线供电的集线器上正常工作。
自供电集线器将能够为每个端口提供 5 个单元,从而允许使用高功率设备和更多级别的集线器。因此,您可以插入一个 7 端口自供电集线器,然后再插入七个 7 端口集线器,这样仅在第四层就有 49 个可用端口。
一些自供电集线器允许您在总线供电模式下使用它们,但如果您尝试插入太多设备,操作系统将向您发送错误消息。
大多数集线器控制器芯片都有 4 个端口,因此您通常会看到 4 端口集线器。当他们想要构建更大的集线器时,他们只需使用两个 4 端口芯片。但他们必须将它们以菊花链形式连接起来,第一个芯片连接到主机,第二个芯片连接到第一个芯片上的一个下游端口。这样就只剩下 7 个端口供用户使用,第一个芯片上有三个,第二个芯片上有三个——因此就有了常见的 7 端口集线器。
USB 是即插即用的,这意味着您在连接设备时无需了解任何这些内容。操作系统会跟踪每个集线器和设备的功率预算,并会告诉您连接是否无法工作,以及您是否需要使用自供电端口。
编辑:USB 数据包如下所示:
令牌: 数据包ID:8位 地址:7位 端点:4位 CRC:5 位 帧开始: 数据包ID:8位 帧编号:11位 CRC:5 位 数据包: 数据包ID:8位 数据:0-1023字节 CRC:16 位 握手: 数据包ID:8位
由于地址只有 7 位,因此整个总线上只能连接 128 个设备(7 个位可以分别打开和关闭,因此总共只有 128 种不同的位组合)。这包括您的计算机,因此您可以连接的其他设备有 127 个。
答案2
因此,您会发现,使用 USB3 芯片组时,您实际上会达到 30 个设备左右的限制,这是由于 USB3 芯片组上的硬性 32 个设备限制(实际上是 96 个端点限制)。
我也遇到过这个问题,花了一段时间才找到真正的问题和解决方案。我写道关于此内容的博客文章。
基本上可以归结为以下几点
- USB3 的端点限制为 96 个(即只能连接 32 个设备)
- 由于集线器的存在,你会失去更多的端点,使用 USB2 电缆连接到 USB3 集线器可以为你节省一些插槽
- 更一般地,如果可以的话,你应该禁用 USB3(删除 USB3 内核驱动程序,或者更简单的方法,如果可以的话,在 BIOS 中禁用 USB3)。在 USB2 模式下使用 USB3 芯片没有帮助,你必须禁用 USB3,以便主板将端口重新路由到没有该端点限制的 USB2 控制器
- 如果您无法禁用 USB3,请获取仅使用 USB2 的 PCIe 卡,这样您就可以获得大约 120 个设备。
更多资源: