USB全速的速度为12 MBit/秒= 1,5兆字节/秒。
但在这12 MBit中也传输了大量非有效负载的额外数据,如令牌、端点地址、CRC5、CRC16、应答、SOF + EOF数据包等。另外,总线管理器保留控制传输帧的10%。
见中断传输 in USB制作简单第3部分
当我有一个中断模式的USB端点,轮询间隔为1ms时,我可以发送每帧64字节=64 bytes /秒。
但是,如果我有两个端点和一个毫秒的投票呢?然后主机将在1ms内轮询两个端点,所以我的总吞吐量为128 kByte/s?
同时,当主机在端点中轮询15时,会导致15 * 64 kByte = 960 kByte/s?
(为了简单起见,我们假设没有OUT传输)
第一个问题:虽然搜索了很多,但我找不到一个网站谈论最大的有效有效负载吞吐量在全速。
第二个问题:全速允许最大64字节/包,最小轮询间隔为1ms。如果我想通过IN传输传输最大可能的有效载荷,我应该使用多个端点并在这些端点上扩展数据传输吗?有多少个端点可以达到极限?
第三个问题:我看到在海量传输中,主机请求在数据中的频率超过每毫秒一次。这是否意味着大容量比中断传输更快?
发布于 2016-10-08 04:10:58
我在第5.7.4和5.8.4章的USB2.0规范中找到了部分答案:
协议开销为大容量传输的13个字节:(3个同步字节、3个PID字节、2个端点+ CRC字节、2个CRC字节和一个3字节的数据包间延迟)和用于中断传输的19个字节(5个同步字节、5个PID字节、2个端点+ CRC字节、2个CRC字节和一个5字节的数据包间延迟)。
如果使用64字节的数据有效负载,则批量传输的最大带宽为1.216.000 Bytes/s。这意味着一个1ms的帧可以传输1216字节=19个64字节的块。
中断端点的轮询间隔最大为每毫秒一次,因此最大有效负载为64 or /s或更少。
但这些价值观是理论上的。该文档声明忽略了位填充。另外,这里忽略了为Control传输预留的10%带宽。对于中断端点,最大吞吐量为每毫秒64字节= 64 kByte /秒。
另一篇关于现实生活中不同全速设备和不同操作系统的速度测量的有趣文章非常有趣,因为它与理论值有很大的不同,特别是对于Windows。
保罗测量的最高速度是1MB/秒,但方向是外。
receive.html
和
发布于 2016-10-07 22:17:18
第三个问题:我看到在海量传输中,主机请求在数据中的频率超过每毫秒一次。这是否意味着大容量比中断传输更快?
快多了。使用一个大容量端点,您可以达到大约1M字节/秒--这也是USB全速所能获得的最大吞吐量。
简而言之:如果您的应用程序希望尽可能快地转移数据,请使用大容量端点。
https://stackoverflow.com/questions/39926448
复制相似问题