【问题标题】:Isochronous USB transfers confusion同步 USB 传输混乱
【发布时间】:2013-11-04 18:47:30
【问题描述】:
  1. 同步端点只是一种方式。但是在各种来源(例如,这里http://www.beyondlogic.org/usbnutshell/usb4.shtml#Isochronous)中将单个同步 IN 传输描述为一个 IN 令牌包(从主机到设备),然后是一个数据包(从设备到主机)。所以我在这里看到了双向交流。来自主机的令牌包接收是否由同一个IN同步端点发送数据?
  2. 同步有什么用?这里:http://wiki.osdev.org/Universal_Serial_Bus#Supporting_Isochronous_Transfers 我们读到:“由于特定于应用程序的采样率、不同的硬件时钟设计、操作系统中的调度策略,甚至是物理异常,主机和同步设备可能会失去同步。”但是怎么做?我理解这样的事件序列:设备用数据填充其传出缓冲区,并等待令牌(可能是一些中断)。主机发送令牌包,并等待数据包,(我认为)应该立即到达。每一帧都重复序列(@F.S.),每个人都很高兴。令牌包不是在同步设备的回复吗?
  3. 在这里http://wiki.osdev.org/Universal_Serial_Bus#SYNC_Field 我们读到:“所有 USB 数据包都以 SYNC 字段开头,不出所料,该字段用作接收器和发送器之间的同步机制。”所以我再次问:为什么要以其他方式同步同步传输?

【问题讨论】:

    标签: linux usb


    【解决方案1】:
    1. 所有 USB 事务始终由主机发起。例如。对于同步 IN 事务,主机将首先向设备询问下一条数据。这当然是到设备的数据流,但在较低的协议级别(令牌包)。所以一种控制数据被发送到设备,但有意义的数据(数据包)仅从设备(IN方向)发送。当您为设备开发软件时,您通常可以抽象出总线协议细节,因为它们是在硬件(USB 设备外围设备)中处理的。低级消息不进入端点。端点位于更高层。

    2. 考虑一个 USB 麦克风:它以非常特定的采样率记录音频数据,该采样率基于设备的本地振荡器。主持人和麦克风的时钟会漂移只是时间问题。几分钟后,会出现数据间隙(或发生缓冲区溢出),因为麦克风记录数据的速度与 USB 预期的速度略有不同(来自设备的配置描述符)。所以他们需要某种同步。

    3. SYNC 字段位于最低层。它仅用于位同步,不应与同步端点的同步混淆 (2.)

    您可能想看看官方的USB 2.0 Specification (usb_20.pdf) 而不是所有的第三方 wiki,这会让您感到困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多