我正在通过USB连接与一个定制的实验室设备(小硬件设备)交谈。如何以最快的速度从实验室设备中获取数据?
主机是Windows机器,在Visual中使用libsub 32运行c-代码.小小的硬件设备收集数据,收集大量数据。主机可以请求这些数据,然后读取它。一切都很顺利。困扰我的是速度,粗略估计是1Mbit/s,这与480 Mbit/s USB2支持的距离很远。设备应该能够以至少这个速度发送给我数据。我几乎没有使用USB或libusb 32的经验,但我试着阅读它们。虽然我不知道在哪里和如何更改任何USB通信设置。在规范中,高速公共汽车上似乎有一种叫做微框架的东西。我该怎么用呢?
我不一定要使用libusb 32库。你还有其他建议吗?
关于当前实现的详细信息:如上所述,我使用libusb 32进行通信。所有初始化都是从下载中包含的一个小示例中复制的。
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协议,计算机应该发送帧标记(每毫秒发送),我认为它是这样做的--因此是11 11Mbit/s。但在使用高速时,它说“高速使用125 is长(每毫秒8微帧)的‘微帧’。与1ms帧编号的对应在高速SOF数据包中保持,在连续的8帧中重复每个帧号。”我不太明白这一点,但不经常发送微型框架可能是问题所在?能请了解协议的人来指点我吗?我想了解这个东西是如何工作的--不管我是否能让它在我的电脑上工作。
编辑6月15日
问题解决了:计算机端的任何改动都不能使通信比它想要的更快(如果你不改变端点的数量,并且你真的有一个USB2.0连接)。这里的问题在于处理器代码,它以一种非常耗时的方式使用其内存区域。这使得这个问题成为一个非问题的问题。谢谢你的指点和信息。我学到了很多关于USB的东西!
发布于 2011-04-24 08:25:09
尝试使用微软的官方驱动程序WinUSB,我认为它会有帮助的。此外,您还可以找到有关如何使用扬·阿克尔森的网站的示例,特别是这页面处理WinUSB。作为补充论点,甚至LibUSB也依赖于WinUSB。
我想问你你的实验室设备是什么类型的: HID,CDC等等?因为它也取决于你的后端设备。它是一个隐藏的(鼠标,键盘),你不能期望超级小便。
发布于 2011-05-01 22:33:28
您真正的需要检查您的USB设备runs.To在哪种模式下这样做,打开设备管理器,然后通过连接导航:视图->设备。
现在,您必须折叠设备树到您的USB设备。它将支持“标准XYZ USB主机控制器”之一。
使用XYZ,你可以知道它是高速的还是全/低的:如果XYZ是“增强的 PCI to USB”,那么设备确实以高速480 MBit/s运行。但是如果上层主机控制器是"OpenHCD USB“或其他什么东西(可能是UHCI,我这里没有英特尔板),设备就会全速运行--最大速度为12 MBit/s。许多“USB2.0”微控制器只支持全速而不支持高速。
更新
在下列情况下,设备以全速运行:
发布于 2011-04-21 07:39:33
如何计算数据传输速度?
我没有使用libusb- find 32库,也没有深入研究USB,但如果有,这些要点可能会帮助您找到真正的根本原因或问题。
https://stackoverflow.com/questions/5731772
复制相似问题