我正在为USB设备编写代码。假设USB主机启动一个从设备读取某些数据的控制读传输,并且请求的数据量(安装包中的wLength)是端点0最大数据包大小的倍数。那么,当主机接收到所有数据(以几个具有最大数据包的IN事务的形式)之后,它是否会启动另一个IN事务,看看是否有更多的数据,即使没有更多的数据?
下面是我想知道的一系列事件:
USB枚举过程:端点0上的最大数据包大小报告为64。
SETUP事务启动一个控件读传输,wLength =128个.
IN ACK事务将前64字节的数据传递给主机.
IN ACK事务将最后64字节的数据传递给主机.
有零长度数据包的ACK?这种交易曾
我正在为USB2.0全速设备编写固件,该设备与WinUSB主机通信,每个方向都有一个散装管道。设备何时应该发送零长度数据包(ZLP)来终止IN传输,以及它如何知道它应该?
第5.8.3节说:
当端点执行下列操作之一时,大容量传输就完成了:
已经准确地传输了预期的数据量。
传输有效载荷小于wMaxPacketSize的数据包或传输零长度数据包ZLP。
我将此解释为,当传输大小是最大数据包大小的整数倍时,应该发送ZLP,并且传输的“预期”大小大于实际大小(即可以发送的内容)。但是接受者是如何知道预期的呢?
例如,我在C#中使用了C#包装器。当我像这样从烟斗里读到
int b
Host A (eth0-1500 bytes)--->(eth0-1500) Router (eth1-1000)---> (eth0-1000) Host B
请您解释一下这个情况,路由器如何处理数据包?如果主机发送数据大小为4000字节。在此,路由器接收大小为1500字节的分段数据包,但路由器的输出接口为1000字节,然后路由器将再次对数据包进行分段并发送到主机B,或者路由器将ICMP错误消息发送到主机A。