【问题标题】:USB - doubts about protocolUSB - 关于协议的疑问
【发布时间】:2015-01-06 22:09:26
【问题描述】:

我目前正在研究 USB 的工作原理。我读到,有些事务是由较小的部分(数据包)构建的。我读到了各种各样的数据包。

我无法理解一件事。正如书中所说 - 每笔交易都包含 3 个数据包令牌、数据和 hanshake

我理解我的书的方式如下图所示。

在我看来:

我认为第一个事务应该只包含令牌 IN 和数据包,而不是 hanshake 包(握手是为了什么?)。

我认为,该响应应该只包含 ACK hanshake 数据包(数据已正确写入设备)。

请帮助我以正确的方式理解它。

最好的问候, 汤姆。

【问题讨论】:

    标签: usb protocols transfer data-transfer


    【解决方案1】:

    交易是一系列一个或多个数据包。

    没有数据的典型 IN 事务如下所示:

    • 主机发送一个 IN 令牌。
    • 设备发送 NAK 握手包,这意味着它没有任何数据要发送。

    带有数据的典型 IN 事务如下所示:

    • 主机发送一个 IN 令牌。
    • 设备发送带有数据的 DATA0 或 DATA1 数据包。
    • 主机发送 ACK 握手。

    典型的 OUT 事务如下所示:

    • 主机发送一个 OUT 令牌。
    • 主机发送带有数据的 DATA0 或 DATA1 数据包。
    • 设备根据是否接受数据发送 NAK 或 ACK 握手。

    请注意,我只是在谈论全速 (12 Mbps) USB 2.0 设备,对于更高速的设备,事情可能会变得有点复杂。

    请注意,这些数据包中的任何一个都可能由于噪声问题而丢失。 USB 规范专门考虑了这一点,确保数据包丢失不会导致设备或主机的错误操作。

    【讨论】:

    • 谢谢你的回答:)。只是为了确定,你能检查一下我的理解是否正确吗?是真的吗,如果我想写入设备,通信看起来像这样(假设我要发送的数据大小大于 MaxPacketSize 并且我正在以海量模式传输它)? 1. [pc->device] OUT 2. [device->pc] ACK 3. [pc->device] DATA0 4. [device->pc] ACK 5. [pc->device] DATA1 6. [device- >pc] ACK 7. [pc->device] DATA0 8. [device->pc] ACK 9. [pc->device] DATA1 10. [device->pc] ACK
    • 不,您需要删除第二个数据包,设备在发送数据之前不会更改以确认 OUT 数据包(至少在谈论全速设备时)。而且您忘记了计算机需要为每笔交易发送一个 OUT 令牌,而 OUT 交易中只能有一个 DATA 数据包。真的,您应该看看我在回答中提供的三个示例交易并复制它们。
    猜你喜欢
    • 2011-02-13
    • 2011-05-12
    • 2021-05-25
    • 2012-04-17
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多