我正在通过USB连接与定制的实验室设备(小硬件)进行交谈。如何以最快的速度从实验室设备获取数据?
主机是Windows XP计算机,在Visual Studio中使用libsub-win32运行c代码。小硬件收集数据,大量数据。主机可以请求此数据然后读取它。一切都很好。困扰我的是速度,粗略估计是1Mbit / s,这远远低于480 Mbit / s USB2支持。设备应该能够以至少该速度向我发送数据。我对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协议,计算机应该发送帧起始标记(每个ms发送一次),我认为它正在进行 - 因此是11Mbit / s。但是当使用高速时,它表示“高速使用长度为125us的'Microframe'(每毫秒8个微帧)。通过在8个连续重复每个帧编号,在1ms帧编号的对应关系保持在高速SOF包中微帧“。我真的不明白这一点,但不经常发送微帧可能是问题吗?有人了解这个协议请赐教我!我想了解这件事是如何工作的,如果我可以让它在我的电脑上运行它。
编辑6月15日
问题解决了:计算机端的任何改动都不能使通信速度超出预期(如果你没有改变端点的数量而你真的有USB2.0连接)。这里的问题在于处理器代码以非常耗时的方式使用其存储区域。这使得这个问题成为一个非问题的问题。感谢所有指针和信息。我学到了很多关于USB的知识!
答案 0 :(得分:1)
尝试使用WinUSB官方微软驱动程序,我认为这会有所帮助。您还可以找到有关如何使用它的示例Jan Axelson's website,特别是与WinUSB的this页面交易。作为补充论据,即使LibUSB依赖于WinUSB。
我想问你的实验室设备是什么类型的设备:HID,CDC等?因为它还取决于你的后端设备。它是一个HID(鼠标,键盘)你不能指望超级速度。
答案 1 :(得分:1)
您真的需要检查您的USB设备运行的模式。为此, 打开设备管理器,然后导航: 视图 - >设备连接。
现在您必须将设备树折叠到USB设备。它将落后于其中一个 “标准XYZ USB主机控制器”。
使用XYZ,您可以判断其是高速还是满/低:如果XYZ是“增强型 PCI到USB”,那么设备确实以高速480 MBit / s运行。但是如果上层主机控制器是“OpenHCD USB”或其他东西(可能是UHCI的东西,我这里没有英特尔主板),则设备以全速运行 - 最大12 MBit / s。许多“USB 2.0”微控制器仅支持全速而非高速。
在下列情况下,设备全速运行:
答案 2 :(得分:0)
如何计算数据传输速度?
我没有使用过libusb-win32库,也没有深入使用USB,但这些要点可以帮助你找到真正的根本原因或问题,如果有的话。