我正在通过 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 的知识!