USB 3.0的最小延迟是多少

USB 3.0的最小延迟是多少,usb,hardware,Usb,Hardware,首先,我对USB不太了解,所以如果我的问题错了,请提前道歉 在USB 2.0中,轮询间隔为0.125ms,因此主机从设备读取某些数据的最佳可能延迟为0.125ms。我希望减少USB 3.0设备的延迟,但我发现很难了解最小延迟是多少。USB3.0规范说,“USB2.0风格的轮询已被异步通知取代”,这意味着0.125ms轮询间隔可能不再是一个限制 我发现了一些USB 3.0 SSD的基准测试,看起来数据可以在略少于0.125ms的时间内从设备中读取,包括在主机操作系统和设备闪存控制器中花费的所有时间

首先,我对USB不太了解,所以如果我的问题错了,请提前道歉

在USB 2.0中,轮询间隔为0.125ms,因此主机从设备读取某些数据的最佳可能延迟为0.125ms。我希望减少USB 3.0设备的延迟,但我发现很难了解最小延迟是多少。USB3.0规范说,“USB2.0风格的轮询已被异步通知取代”,这意味着0.125ms轮询间隔可能不再是一个限制

我发现了一些USB 3.0 SSD的基准测试,看起来数据可以在略少于0.125ms的时间内从设备中读取,包括在主机操作系统和设备闪存控制器中花费的所有时间

有人能告诉我可能的最低延迟是多少吗?理论上的答案很好。一个包括各种版本的Linux和Windows USB堆栈的实际限制的答案将是非常棒的


为了避免“告诉我你想要实现什么”的问题,我正在为我公司设计的ASIC创建一个调试界面。ie PC通过调试软件狗连接到我们的一个ASIC。一个可能的用例是在ASIC硬件仅实现简单断点时实现条件断点。为此,我需要确定何时到达一个简单的断点,评估条件,如果为false,则设置处理器再次运行。在条件变为真之前,简单断点可能会被命中数百万次。我们可能会在FPGA或现成的支持USB 3.0的微控制器上实现调试加密狗。

我为您准备了一些资源,我刚刚下载了一个,这是USB3的完整资源,下面是第58,59页的简短摘录(USB 3_r1.0_06_06_2011.pdf):

USB 2.0以固定的1 ms/125μs间隔传输SOF/uSOF。根据主机和系统软件的实施情况,设备驱动程序可以通过有限的小调整来改变间隔。USB 3.0增加了设备发送总线间隔调整消息的机制,主机使用该消息将其125μs总线间隔调整至+/-13.333μs

此外,主机可以从总线间隔边界在放松的定时窗口内发送等时时间戳分组(ITP)

是另外一个看起来很有趣的资源,用于计算延迟

您对操作系统延迟问题有很好的看法,特别是在非实时操作系统中


我可能建议你也去看看超级用户,也许有人有其他想法。干杯回答我自己的问题

我逐渐意识到这个问题有点忽略了USB 3.0的意义。与2.0不同,它不是一个共享总线系统。相反,它在主机和每个设备之间使用点对点链接(我过于简化了,但要点是正确的)。在USB 2.0中,125 us轮询间隔对于设备之间的总线时分复用方式至关重要。但是,由于3.0使用点到点链路,因此不需要进行多路复用,因此轮询间隔不再存在。因此,数据包传递的延迟比使用USB 2.0时要小得多


在我使用Cypress FX-3 devkit进行的实验中,我发现从Windows应用程序到设备的平均往返非常容易,平均延迟为30 us。我怀疑大部分时间都花在各种操作系统延迟上,例如用户空间到内核空间模式切换和驱动程序中的DPC延迟。

摘自embedded.com:

通信架构差异 USB 2.0采用了一种通信体系结构,其中数据事务必须由主机启动。主机将经常轮询设备并请求数据,并且设备只能在主机请求数据后传输数据。高轮询频率不仅会增加功耗,还会增加传输延迟,因为只有在主机轮询设备时才能传输数据。USB 3.0改进了这种通信模式,通过最小化轮询来减少传输延迟,并允许设备在数据准备就绪后尽快传输数据

时间戳增强功能

与USB 2.0摄像头不同,USB 2.0摄像头的精度范围为0到125 us,而源自USB 3.0摄像头的时间戳更精确,并且模仿FireWire摄像头的1394周期计时器的精度

USB 3.0——或超高速USB——克服了其他规范的关键限制——所有这些限制都具有六倍(超过IEEE 1394b)到九倍(超过USB 2.0)的更高带宽、更好的错误管理、更高的电源。。。和更低的延迟和抖动时间


另外,它还提到了USB 3.0的“更长的电缆长度”,但其他段落与此相矛盾&USB 2.0的电缆长度高达5米,USB 3.0的电缆长度高达3米。

我对标记的答案表示怀疑

在Windows上,无法通过USB实现规定的往返延迟。超高速(3.0)与否。文件规定:

The number of isochronous packets must be a multiple of the number of packets per frame.

每帧的数据包由
bInterval
给出,并确定轮询间隔。例如,如果您想实现每
微帧一次传输(125usec),您需要每URB(USB请求块)提交8次传输,这意味着调度服务间隔1ms

其他任何东西都需要您自己的内核模式驱动程序或不符合规范


在RT Linux上,我可以确认2*125usec+一些开销的往返。

Andrew,我和我的项目组和您有相同的问题。我们也在测试Cypress FX-3的往返时间,但似乎无法获得与您相同的结果。您是否使用单个数据包或数据流进行测试?您使用哪种传输模式