1

我正在通过 USB 连接与定制的实验室设备(小硬件)交谈。如何以最大速度从实验室设备获取数据?

主机是一台 Windows XP 机器,在 Visual Studio 中使用 libsub-win32 运行 c 代码。小硬件收集数据,大量数据。主机可以请求此数据,然后读取它。一切正常。困扰我的是速度,粗略估计为 1Mbit/s,与 USB2 支持的 480 Mbit/s 相差甚远。该设备至少应该能够以该速度向我发送数据。我几乎没有使用 USB 和 libusb-win32 的经验,但我尝试阅读它们。虽然我看不到在哪里以及如何更改任何 USB 通信设置。在规范中,高速巴士上似乎有一种叫做微框架的东西。我该如何使用它们?

我不一定要使用 libusb-win32 库。您还有其他建议吗?

当前实现的详细信息: 如上所述,我使用 libusb-win32 进行通信。所有初始化都是从下载中包含的一个小示例中复制的。

usb_init(); 
...
usb_open();
usb_set_configuration(...);
usb_claim_interface(...);

然后我(使用 usb_bulk_write(...) 和 usb_bulk_read(...))与实验室设备交谈,并说服它与我共享数据,它确实这样做了。它为我提供了 512 字节的数据。使用 usb_bulk_read(...) 读取每个这样的块。

编辑 2011 年 4 月 27 日: 看起来我正在使用全速,但不是高速。如何获得高速?我在 USB 描述符文件中得到了一些错误的参数吗?(是的,我用的是USB2.0,设备应该支持高速的。)


2011 年 5 月 17 日编辑: 我现在已经使用 winUSB 实现了通信(编写了一个 .inf 文件和 c++ 程序)。使用 WinUSB 的好处是它可以告诉我它是否正在尝试使用高速。确实如此,但我仍然没有超过 11+-2 Mbit/s。为什么?

根据 USB2.0 协议,计算机应该发送帧开始标记(每毫秒发送一次),我认为它正在这样做 - 因此是 11Mbit/s。但是当使用高速时,它说“高速使用'微帧',它长 125us(每毫秒 8 微帧)。通过连续 8 次重复每个帧号,高速 SOF 数据包中保持与 1ms 帧编号的对应关系微帧。” 我不太明白这一点,但没有足够频繁地发送微帧可能是问题所在?有懂协议的朋友请赐教!我想了解这个东西是如何工作的,不管我是否可以让它在我的电脑上工作。


6月15日编辑

已解决的问题:计算机端的任何更改都不会使通信速度超过预期(如果您不更改端点数量并且您确实有 USB2.0 连接)。这里的问题在于处理器代码以非常耗时的方式使用其内存区域。这使得这个问题成为一种非问题。感谢所有的指针和信息。我学到了很多关于 USB 的知识!

4

3 回答 3

1

确实需要检查您的 USB 设备在哪种模式下运行。为此,请打开设备管理器,然后导航:查看-> 按连接的设备。

现在您必须将设备树折叠到您的 USB 设备。它将位于“标准 XYZ USB 主机控制器”之一的后面。

使用 XYZ,您可以判断它是高速还是全速/低速:如果 XYZ 是“增强型PCI 转 USB”,则设备确实以 480 MBit/s 的高速运行。但是,如果上层主机控制器是“OpenHCD USB”或其他东西(可能是带有 UHCI 的东西,我这里没有英特尔板),则设备以全速运行 - 最大 12 MBit/s。许多“USB 2.0”微控制器只支持全速而不支持高速。

更新

设备在以下情况下全速运行:

  • 中间有一个USB 1.1 Hub,一个不能说高速
  • 该设备本身只能全速通话。
于 2011-05-01T22:33:28.770 回答
1

尝试使用微软官方驱动的WinUSB,我想会有所帮助。您还可以在Jan Axelson 的网站上找到有关如何使用它的示例,特别是页面涉及 WinUSB。作为补充论点,甚至 LibUSB 也依赖于 WinUSB。

我想问一下您的实验室设备是什么类型的设备:HID、CDC 等?因为它还取决于您的后端设备。它是一个 HID(鼠标、键盘),你不能指望超高速。

于 2011-04-24T08:25:09.693 回答
0

您如何计算数据传输速度?

  1. 数据传输速度计算可能不正确或
  2. 处理数据传输的线程数较少;因此速度更慢。

我没有使用过 libusb-win32 库,也没有深入研究过 USB,但这些要点可能会帮助您找到真正的根本原因或问题(如果有的话)。

于 2011-04-21T07:39:33.870 回答