如何排除故障/测试/基准测试 USB 集线器(集线器成为瓶颈...为什么?)

如何排除故障/测试/基准测试 USB 集线器(集线器成为瓶颈...为什么?)

我正在运行 Ubuntu 14.04 LTS 和一些不寻常的串行硬件,它们使用串行到 USB 转换器。

我无法将几个慢速设备(RS232 到 USB 2.0 转换器、RS422 到 USB 2.0 转换器和另一个 USB 2.0 设备)插入 3.0 集线器,否则我的应用程序会因缺少传入消息而崩溃。但是,如果将所有设备直接插入 PC,一切正常。您能解释一下为什么会发生这种情况吗?请继续阅读以了解详情...

我买了一个 Orico 生产的 3.0 USB 集线器。它有 4 个端口,由插入的 USB 端口供电。

我连接了 2 个串行转换器(带有要通信的设备)和一个 USB 设备。以下是详细信息:

  • RS422 到 USB(2.0)-配置为 /dev/ttyUSB0 为 500,000 8N1。
  • RS232 到 USB(2.0)-配置为 /dev/ttyUSB1 于 115200 8N1。
  • USB 2.0 设备(Labjack U3,这是一个通用 IO 系统...收集按下的按钮等...)。

我观察到了一些非常奇怪的行为,导致我连续两天 14 个小时承受涡轮高压,直到我意识到问题出在轮毂上。

USB Hub 的“不良”行为需要花一些时间才能发现:

  • 当仅连接 RS232 到 USB 时,我正在通信的串行设备正在接收 PC 发送的所有数据,但是来自该设备的所有响应都被集线器丢弃(或者更准确地说,只要使用集线器就会被丢弃)。
  • 当两个设备连接时(Labjack USB 2.0 设备 + RS422 转 USB 2.0),一切正常(两个设备的消息都以良好的速率传输到 PC)。如果在连接其他两个设备的同时连接 RS232 转 USB 转换器,一切仍然正常,我可以配置 RS232 端口。但是,一旦连接到 RS232 的串行设备打开并开始发送“消息”,运行在 PC 上的应用程序就会崩溃,并出现错误,表明它缺少来自 RS422 设备的消息(该消息应该通过 USB 集线器到达)。这会在打开(联机)连接到 RS232 转 USB 转换器的串行设备后 5 秒内发生。

我困惑了一段时间...直到我移除 USB 集线器并将所有设备直接连接到 PC...然后一切都开始顺利运行。

您能解释一下为什么会发生这种情况吗?另外,您能推荐一些工具或程序来帮助我准确查明 USB 网络出了什么问题吗?

我需要集线器将所有转换为 USB 消息的串行数据无瓶颈地传输到 PC;考虑到我的 RS232 和 RS422 设备的串行速度非常慢(与 USB 相比……而不是我的故障排除速度……),我认为任何集线器都可以解决问题。发现这个问题后,我很好奇为什么速度比连接到它的设备快得多的集线器会成为瓶颈。

请注意,集线器没有(可能)有缺陷...它可以很好地传输数据;直到它遇到同时插入的 2 个串行转换器和一个 USB 设备,此时它的速度(或可能是电压)导致我的机器人崩溃。

###################编辑 #1

我怀疑电压下降导致了问题,所以我使用了有源 2.0 USB 7 端口集线器,结果是一样的!一旦所有 3 个设备开始发送消息,应用程序就会缺少消息。

##############################################编辑#2

如果我将 RS422 设备直接插入 PC,将 RS232 和 Labjack USB 设备插入 USB 集线器(然后将 USB 集线器插入 PC),Labjack U3 就会出现错误。

这是否意味着 USB 集线器无法以消息到达的速率传输由 2 个串行设备和一个 USB 设备传递给它的数据?这听起来确实不对。

如果我可以提供更多信息,请告诉我。提前致谢。

答案1

RS232 设备通常是 FS 设备,USB 协议以 12Mbps 的速度运行。当插入集线器、USB2 或 USB3 时,通信通过称为“事务转换器”或“TT”的特殊通信处理器进行,该处理器嵌入在每个 USB 集线器中。有两种集线器,一种是所有端口只有一个 TT,另一种是每个下游端口都有单独的 TT。

如果您有多个 FS 设备连接到单 TT 集线器,缓冲资源将不足,并且 FS 带宽(12Mbps)将在连接的设备之间共享。要在每个下游连接上获得完整的 FS 带宽,您需要拥有所谓的“多 TT”集线器。

此外,处理 TT 上的 FS 事务需要主机端采用特殊方法,称为“拆分事务”。

现代计算机通过 XHCI(USB 3.0)主机控制器提供本机 FS 支持,因此直接连接自然由 XHCI 驱动程序处理。较旧的计算机在其硬件内部具有 FS 支持,并且多路复用端口到较旧的 OHCI 或 UHCI 控制器,因此它们也直接支持 FS 流量速率。

但是,如果中间有一个集线器,FS 流量必须通过拆分事务技术来处理,该技术完全基于软件。拆分规则非常复杂,大约有 150 页的 USB 规范涵盖了这些规则。如果您的机器人驱动程序对拆分事务的支持较差(或不支持),FS 和 LS 设备将无法在集线器后面工作,尤其是在有许多此类设备的情况下。

补充:Orico 集线器用途VL812 控制器 IC,其 HS 路径中只有一个 TT。对于配置为 500,000 波特率的(可能是 FS)422-USB 设备和其他 FS 设备,它可能没有剩余带宽,并且主机在事务调度方面存在问题并且出现故障。

相关内容