首先,我对USB知之甚少,所以如果我的问题出错,请提前道歉。
在USB 2.0中,轮询间隔为0.125ms,因此主机从设备读取某些数据的最佳延迟时间为0.125ms。我希望减少USB 3.0设备的延迟,但我发现很难了解最小延迟是什么。 USB 3.0规范称,“USB 2.0样式轮询已被异步通知取代”,这意味着0.125ms轮询间隔可能不再是限制。
我找到了一些USB 3.0固态硬盘的基准测试,看起来数据可以在略低于0.125ms的时间内从设备中读取,其中包括在主机操作系统和设备的闪存控制器上花费的所有时间。
http://www.guru3d.com/articles_pages/ocz_enyo_usb_3_portable_ssd_review,8.html
有人能告诉我最低延迟是多少吗?理论上的答案很好。答案包括各种版本的Linux和Windows USB堆栈的实际限制将是非常棒的。
为了阻止“告诉我你想要实现的目标”的问题,我正在为我公司设计的ASIC创建调试接口。即PC通过调试加密狗连接到我们的ASIC之一。一个可能的用例是当ASIC硬件仅实现简单断点时实现条件断点。为此,我需要确定何时命中一个简单的断点,评估条件,如果为false则设置处理器再次运行。在条件成立之前,简单断点可能会被击中数百万次。我们可能会在FPGA或现成的USB 3.0微控制器上实现调试加密狗。
答案 0 :(得分:15)
回答我自己的问题......
我已经意识到这个问题有点遗漏了USB 3.0。与2.0不同,它不是共享总线系统。相反,它使用主机和每个设备之间的点对点链接(我过于简单,但要点是真的)。使用USB 2.0,125 us轮询间隔对于总线在设备之间进行时分复用至关重要。但是,由于3.0使用点对点链接,因此不需要进行多路复用,因此轮询间隔不再存在。因此,与USB 2.0相比,数据包传输的延迟 。
在我使用赛普拉斯FX-3 devkit的实验中,我发现从Windows应用程序到设备的平均往返行程很容易,并且平均延迟为30 us 。我怀疑绝大部分时间花在各种操作系统延迟上,例如用户空间到内核空间模式切换以及驱动程序内的DPC延迟。
答案 1 :(得分:6)
我有几个资源供您使用,我刚下载了一个资源,这是USB3的完整specs ... several pdfs zipped up,这里是第58,59页的简短摘录(USB 3_r1.0_06_06_2011.pdf) :
USB 2.0 transmits SOF/uSOF at fixed 1 ms/125 μs intervals. A device driver may change
the interval with small finite adjustments depending on the implementation of host and
system software. USB 3.0 adds mechanism for devices to send a Bus Interval Adjustment
Message that is used by the host to adjust its 125 μs bus interval up to +/-13.333 μs.
In addition, the host may send an Isochronous Timestamp Packet (ITP) within a relaxed
timing window from a bus interval boundary.
Here是另一个看起来很有趣的资源,用于计算延迟。
您对操作系统延迟问题提出了一个很好的观点,尤其是在非实时操作系统中。
我可能会建议您检查SuperUser,也许有人有其他想法。 CHEERS
答案 2 :(得分:1)
Embedded.com的摘录:"USB 3.0 vs USB 2.0: A quick reference summary for the busy engineer"
通信体系结构差异 USB 2.0采用一种通信架构,其中数据事务必须由主机启动。主机会经常轮询设备并询问数据,并且设备只能在主机请求数据后才传输数据。高轮询频率不仅会增加功耗,还会增加传输延迟,因为仅当主机轮询设备时才能传输数据。 USB 3.0改进了这种通信模型,并通过最小化轮询来减少了传输延迟,还允许设备在就绪后立即传输数据。
...
时间戳增强功能
不同于USB 2.0摄像机(其精度范围可以从0到125 us),源自USB 3.0摄像机的时间戳更加精确,并且模仿了FireWire摄像机的1394循环计时器的精度。
...
USB 3.0(或超高速USB)克服了其他规格的关键限制,所有这些限制带来了六倍的带宽(通过IEEE 1394b)到九倍的速率(通过USB 2.0),更高的带宽,更好的错误管理,更高的电源。 ..并降低延迟和抖动时间。
P.S。还说了USB 3.0的“更长的电缆长度”,但其他段落与此矛盾,并说USB 2.0的最大长度为5m,USB 3.0的最大长度为3m。
答案 3 :(得分:1)
我对标记的答案表示怀疑。
在Windows上,无法通过USB实现声明的往返延迟。 SuperSpeed(3.0)与否。该文档指出:
The number of isochronous packets must be a multiple of the number of packets per frame.
每帧的数据包由bInterval
给出,并且还确定轮询间隔。例如。如果您想每microframe
(125usec)实现一次传输,您将 每个URB(USB请求块)提交8次传输,这意味着调度服务间隔为 1ms < / strong>。
其他任何东西都需要您自己的内核模式驱动程序或不合规格。
在RT Linux上,我可以确认2 * 125usec的往返行程和一些开销。