Answers:
从理论上讲,您最多可以将127台设备连接到一台主机PC,但是实际的功率和数据带宽限制会阻止这种情况。这127个设备可以布置在最多七个级别的集线器的分层网络中,将PC主机计为1级,将最远的设备计为7级。PC向集线器提供5个电源。每个单位为100 mA,每个端口至少需要1个单位。集线器本身消耗1个,剩下4个单元最多4个端口。因此,您永远找不到具有四个以上端口的总线供电集线器。
总线供电的集线器还有其他限制。由于每个端口只有一个电源单元,因此它们只能在下游连接到单个设备。您无法将它们连接到另一个集线器以进行扩展,因为该集线器需要另外5个单元。并非所有设备都能在一个单元上运行。像鼠标这样的低功率设备可以工作,但高功率设备最多可以使用5个单位。高功率USB设备仅在直接插入PC主机或可为该端口提供5个设备的自供电集线器时才能工作。
连接设备时,PC会向设备查询其功能和要求。因此,例如,PC知道它已连接到4端口总线供电的集线器,这意味着每个端口只能驱动一个单元。如果尝试将高功率设备插入该集线器,则操作系统将抛出错误消息并拒绝启用该设备。
由于这些限制,总线供电的集线器通常不是一个好主意,并且主要用于移动设备,而不是台式机。
另一方面,如果插入端口的设备本身是自供电的,则它们可能不需要集线器中的一个以上的设备。例如,外部磁盘驱动器具有自己的电源,因此应该可以在总线供电的集线器上正常工作。
自供电的集线器将能够为每个端口提供5个单元,从而允许使用大功率设备和更高级别的集线器。因此,您可以插入一个7端口自供电集线器,然后再插入7个7端口集线器,从而在第四层仅提供49个可用端口。
一些自供电的集线器将允许您在总线供电的模式下使用它们,但是如果尝试插入太多设备,则操作系统将向您显示错误消息。
大多数集线器控制器芯片具有4个端口,因此您通常会看到4端口集线器。当他们想建立一个更大的集线器时,他们只使用两个4端口芯片。但是它们必须以菊花链的方式将它们与连接到主机的第一个芯片和连接到第一个芯片的下游端口之一的第二个芯片进行菊花链连接。这样仅剩下七个端口供用户使用,第一个芯片上留有三个端口,第二个芯片上留有四个端口,因此是通用的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项其他内容。
因此,您会发现,由于USB3芯片组的硬设备限制为32个(实际上是96个端点限制),因此使用USB3芯片组实际上将达到30个左右的限制。
我也处理这个问题,花了我一段时间才找到真正的问题和解决方案。这是一个很长的页面,所以您可以去那里阅读它http://marc.merlins.org/perso/linux/post_2018-12-20_Getting-Around-USB3-xhci-32-Device-Limit- Max-number-of- devices-this-xHCI-host-supports-is-32 .html
基本上,归结为以下几点:
1)USB3有96个端点限制(仅转换为32个设备)
2)由于集线器,您失去了更多端点,使用USB2电缆连接到USB3集线器可以为您提供一些插槽
3)通常,如果没有USB3,则应该禁用USB3(删除USB3内核驱动程序,或者,如果可以的话,更容易地,在BIOS中禁用USB3)。在USB2模式下使用USB3芯片无济于事,您必须禁用USB3,以便主板将端口重新路由到没有该端点限制的USB2控制器。4)如果无法禁用USB3,请获得仅USB2的PCIe卡这样一来,您就能真正获得120台左右的设备。
其他资源:https :
//www.spinics.net/lists/linux-usb/msg175224.html
https://forums.intel.com/s/question/0D50P00004905stSAA/hardware-limitations-on-usb-endpoints-xhci?语言= zh_CN