等时USB传输混乱

时间:2013-10-25 15:06:39

标签: linux usb

  1. 同步端点只是一种方式。但是,单个等时IN传输在各种源(例如,此处为http://www.beyondlogic.org/usbnutshell/usb4.shtml#Isochronous)中描述为一个IN令牌包(从主机到设备),后跟一个DATA包(从设备到主机)。所以我在这里看到两个方向的沟通。来自主机的令牌包是否由同一个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字段开头,不出所料,它作为接收者和发送者之间的同步机制。”所以我再次问:为什么要用另一种方式同步等时传输呢?

1 个答案:

答案 0 :(得分:4)

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

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

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

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