There are a bunch of USB 2 ports at my home rig: and USB 3 ports: And I noticed something new in those ^ screenshots - the "Companion Port Number" field: - on first screenshot Port 1 (USB 2 one) specifies "Companion Port Number = 17"; - on second screenshot Port 17 (USB 3 one) specifies "Companion Port Number = 1"; I went to search for that "Companion Port Number" thing and look :https://docs.microsoft.com/en-us/windows…ctor_properties
CompanionIndex The index of the companion port that is associated with the port being queried (specified by ConnectionIndex). If there are n companion ports, those ports are indexed from 0 to n–1. If a port is mapped to more than one companion port, CompanionIndex is incremented on multiple queries to enumerate all companion ports. For SuperSpeed hubs and xHCI controllers, CompanionIndex is always 0. For more information, see Remarks. CompanionPortNumber The port number of the companion port that is given by CompanionIndex. If the port being queried shares a USB connector with a port on another hub, CompanionPortNumber indicates the port number of the port on the other hub. Note For root hub of an xHCI controller, the shared port might be on the same hub. CompanionHubSymbolicLinkName The Unicode string that contains the symbolic link of the companion hub that shares the USB connector. If a companion hub exists, CompanionPortNumber is nonzero. Otherwise, CompanionHubSymbolicLinkName [0] is NULL. Remarks A SuperSpeed 3.0 hub contains two independent hub implementations. One is for USB 2.0 devices, and the hub implementation is similar to existing 2.0 hubs. The other hub is only for SuperSpeed devices. Because the USB 2.0 and 3.0 bus signaling are electrically independent, both of those hubs operate simultaneously. Therefore, when a SuperSpeed hub is connected to the host, Windows enumerates the two hubs independently; one hub is associated with a USB 2.0 port, and the other hub with a USB 3.0 port. Each hub has its downstream and upstream ports. USB physical connectors are shared between ports that are associated with those two hub implementations. Similarly, an xHCI controller must be able to handle SuperSpeed, high-speed, full-speed, and low-speed devices. The USB 3.0 specification requires an xHCI controller to contain two independent execution units each for USB 3.0 and USB 2.0 bus speeds. The USB 3.0 execution unit handles SuperSpeed traffic on the bus. The USB 2.0 execution unit must handle low, full, and high speed traffic. That requirement can be met in many ways. For instance, in one implementation, the USB 2.0 execution unit can have either a downstream USB 1.1 execution unit or a downstream USB 2.0 hub. The other execution unit handles SuperSpeed traffic on the bus. For instance, in one implementation, the xHCI controller can have a downstream USB 2.0 hub (instead of a USB 2.0 host controller) with a transaction translator to handle full-speed and low-speed traffic. That downstream hub shares connectors with the ports of the SuperSpeed root hub. In cases where USB connectors are shared, the port that is being queried through the IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES I/O control request is specified by ConnectionIndex, and the port that shares the connector is called the companion port. Upon completion of the request, the CompanionIndex, CompanionPortNumber, and CompanionHubSymbolicLinkName members of USB_PORT_CONNECTOR_PROPERTIES can be used to determine the port routing in those cases. If more than one companion port is associated with the port that is being queried, the application can get information about all companion ports by sending the IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES I/O control request in a loop and incrementing the CompanionIndex value in each iteration. When all of the ports have been enumerated and there is no port associated with the index specified in CompanionIndex, the request completes successfully, CompanionPortNumber is set to 0, and CompanionHubSymbolicLinkName is NULL.
So ports can share physical USB connector. I went to see other USB ports on my rig and found that ports 1 through 8 (USB 2 ones) have ports 17 through 24 (USB 3 ones) as a companion ones - so they share USB connectors (1 with 17, 2 with 18, etc). And some of ports has no companion ones - 9 through 16: and 25 and 26: It can be that ports without companion ones are somewhat better for plugged devices: USB2 ports for not USB3 devices, USB3 ports for USB3 devices. Just because there is no port routing logic involved. I was using UsbView - https://forums.guru3d.com/threads/freshl…utility.421820/ PS Seems an article related to the topic - https://techcommunity.microsoft.com/t5/m…ers/ba-p/270710