什么是“零长度数据包”?

ran*_*nsh 4 usb libusb-1.0

USB 标准提到在某些情况下编写“零长度”数据包。

谁能解释一下 USB 术语中“零长度”数据包的含义是什么?

什么是“短包”?(好像“短包”和“零长包”是一起提到的)

Sha*_*bal 5

这两个术语都用于事务完成机制。数据包的最大大小可以从存储在端点描述符中的bMaxPacketSize导出。当数据包小于该值时,称为短包。同样,当您可以发送长度为零的数据包时。

现在的问题是“为什么”。让我们讨论一下。

短包的原因 -

1 - 根据 USB 规范,当主机或设备接收到数据包长度小于最大数据包大小的数据包时,应认为传输已完成,不再有数据包要接收。

2 - 批量传输(大容量存储设备)始终如此。您并不总是询问长度为 MaxPacketSize 倍数的数据。所以最后一个数据包总是小于最大数据包大小。假设您想要来自最大数据包大小为 1024 字节的批量端点的 1025 字节数据。

第一个数据包 = 1024 字节秒数据包 = 1 个字节(短数据包)。

这样主机就会知道数据传输已经完成。

零长度数据包的原因 -

1 - 与短数据包一样,零长度数据包也用于交易完成。假设您要发送 2048 字节的批量数据。

第一个数据包 = 1024 字节 第二个数据包 = 1024 字节。

现在的问题是,两者都等于最大数据包大小。设备将无法理解传输已完成。然后你发送一个零长度的数据包。

第三个数据包 = 0 字节

这将使传输完成,然后设备可以开始处理数据。

2 - 零长度数据包也用于状态阶段的控制传输,以通知成功完成。