![]() |
1
11
仔细阅读USB规范: 当端点执行以下操作之一时,从端点到主机的控制传输的数据阶段即完成: 以下是:
所以,在您的例子中,当wLength==传输大小时,答案是否定的,您不需要ZLP。
|
![]() |
2
5
通常,USB使用小于最大长度的数据包来划分传输的结束。因此,在传输是最大数据包长度的整数倍的情况下,ZLP用于划分。 你经常在散装管道中看到这种情况。例如,如果您有一个4096字节的传输,它将被分解为整数个最大长度数据包加上一个零长度数据包。如果SW驱动程序设置了足够大的接收缓冲区,则当ZLP发生时,更高级别的SW会立即接收整个传输。
但我强烈建议SW对两者都要灵活,因为您可能会看到不同USB主机硅或低级别HCD驱动程序的变化。 |
![]() |
3
4
USB specification 2.0 ,在第5.5.3节中说:
我对该引文中的一句话进行了强调,因为它似乎特别说明了设备应该做什么:如果主机在完成后尝试继续数据阶段,它应该“停止”管道,如果所有请求的数据都已传输(即传输的字节数大于或等于
换句话说,在这种情况下,设备不需要零长度的数据包,事实上,USB规范说它不应该提供零长度的数据包。 |
![]() |
4
1
你不必这么做。(*)
|
|
user8040474 · 网络连接不工作 6 年前 |
![]() |
Genhain · swift中链式泛型类型推断闭包 7 年前 |
![]() |
Joe · 将数据从子VC传回集合视图单元格 7 年前 |
![]() |
NaderBesada · 协议字典Swift 4 7 年前 |
![]() |
Marmelador · 通过协议更改代理的属性 7 年前 |