如果 USB 设备可以通过总线和集线器端口唯一标识,为什么还需要枚举?

如果 USB 设备可以通过总线和集线器端口唯一标识,为什么还需要枚举?

通过在 Linux /sys 文件系统中操作,人们可以在名称代表 USB 设备物理地址的目录中找到所有 USB 设备。

ls /sys/bus/usb/devices
1-0:1.0  1-1  1-1:1.0  1-2  1-2:1.0  2-0:1.0 usb1  usb2

现在,从本网站我发现这些数字代表设备的物理路径,包括途中的任何集线器:

随着设备在 USB 树中的位置越来越低,并且使用的 USB 集线器越来越多,集线器端口号将添加到链中上一个集线器端口号后面的字符串中。对于两层深的树,设备名称如下所示:

根集线器-集线器端口-集线器端口:config.接口

所以问题是,如果 USB 设备已经有唯一的识别方式,即总线、集线器和端口号,为什么还要进行枚举(并由操作系统分配易失性编号)?

答案1

我认为有些混乱。Linux 上的奇怪数字似乎是 USB 设备的逻辑句柄,它们是在物理枚举过程完成后形成的。物理 USB 地址与您列出的句柄名称没有任何相似之处,它们是嵌入在每个 USB 数据包中的 1 到 127 之间的数字,可以是该范围内的任何数字。

原始 USB(1.1 和 2.0)设计为“星型拓扑”,其中所有数据包都广播到树中的所有 USB 设备。因此,设备必须具有在枚举过程中分配给它们的唯一地址,才能解码正确的流。虽然系统确实知道设备连接到的所有集线器和端口,但它无法确定数据包的路由,USB 数据包中没有关于集线器/端口号的信息,只有设备地址。然而,对于 USB 3.0 架构,情况可能会有所不同,因为数据包可以通过集线器/端口号明确路由,但出于向后兼容性的原因,枚举过程仍然是必需的。

相关内容