我有两个嵌入式 Linux 设备,总共创建了 5 个 UVC 相机设备,其中一个 SOC 中有 3 个 UVC 设备,第二个 SOC 中有 2 个 UVC 设备。这两个 Linux SOC 板通过 superspeedplus 集线器(外部供电)连接到主机(Windows 11 或 Ubuntu PC)。每个 SOC 在不同的端点上发送图像流。
我的主机 PC 是 Windows 11、配备 intel USB 3.10 可扩展主机控制器的 Dell Vostro 7510。
streaming_maxpacket:3072 流最大突发:10 流媒体间隔:2
streaming_maxpacket:3072 流最大突发:10 流媒体间隔:2
streaming_maxpacket:3072 流最大突发:4 流媒体间隔:3
UVC 相机设备 2 和 3 在第二个 SOC 上重复,从而形成 5 个 UVC 相机设备。问题是 Windows 11 主机无法分配所需的约 431,134,720 字节/秒的带宽。 Windows 主机可分配的最大容量约为 380 MB/秒。当我使用 Windows Media Foundation API 打开最后一个流时,出现“控制器没有足够的资源”弹出窗口,并且最后一个流无法打开。仅当组合带宽低于 380 MB/秒时,减少 UVC 设备的带宽才允许打开所有流。
对于 USB 同步模式,主机端的带宽分配限制为 380 MB/秒是什么?此限制似乎是超高速设备在同步传输模式 (1024316*8000) 下的能力,其中 8000 是每秒传输间隔数(每个间隔 125 微秒)。鉴于 PCIe 每个通道为 10 Gbps,Windows/Ubuntu 主机应该能够通过 USB 实现 10 Gbps 速度。我们在 Ubuntu 主机上看到了同样的问题。因此该限制不仅仅适用于 Windows 主机。
可以调整设备上的哪些参数,以便我们可以改善带宽分配?
考虑到我们有通过超高速集线器连接到主机的超高速设备,主机端可实现的最大带宽是多少(在同步模式或批量模式下)?
更新: 我已经检查过,相同的 2 个 SOC 能够一起向 Windows 主机发送 7.2 Gbps 批量数据,并且主机以 7.2 Gbps 接收数据。只是 Windows 11 主机无法在等时模式下接收接近 7.2 Gbps 的数据,在等时模式下主机实现的最大吞吐量为 3.048 Gbps。
谢谢, 维奈
在测试时找到答案,BW限制是由于主机控制器分配BW的算法造成的,使用单个端点似乎给出了5 gbps,当增加端点或UVC设备数量时,BW似乎会下降,可能是因为上下文切换所致需要处理多个 UVC 端点。