USB全速的速度为12 MBit /秒= 1,5 MByte / s。
但是在这12 MBit内还传输了许多额外的数据,这些数据不是有效载荷,如令牌,端点地址,CRC5,CRC16,确认,SOF + EOF数据包等。另外,总线管理器保留了10%的数据。控制传输的框架。
参见Interrupt Transfer 在USB Made Simple Part 3
当我的USB端点处于中断模式且轮询间隔为1 ms时,我可以每帧传输64个字节= 64kByte /秒。
但是如果我有2个端点和1毫秒轮询怎么办? 然后主机将在1毫秒内轮询两个端点,因此我的总吞吐量为128 kByte / s?
当主机同时轮询15个IN端点时会导致15 * 64 kByte = 960 kByte / s?
(为简单起见,我们假设没有OUT转移)
第一个问题: 虽然搜索了很多,但我找不到一个网站谈论全速最大有效载荷吞吐量。
第二个问题: 全速允许最多64字节/包,最小轮询间隔为1毫秒。如果我想通过IN传输传输最大可能的有效负载,我应该使用多个端点并在这些端点上传播数据传输吗?我有多少端点可以达到极限?
第三个问题: 我看到,在批量传输中,主机每毫秒更频繁地请求IN数据。这是否意味着Bulk比中断传输更快?
答案 0 :(得分:0)
第三个问题:我发现在批量传输中,主机每毫秒更频繁地请求IN数据。这是否意味着Bulk比中断传输更快?
lot 更快。使用单个批量端点可以达到大约1 MByte / sec - 这也是USB全速可以达到的最大吞吐量。
简而言之:如果您的应用程序想要尽快转发数据,请使用批量端点。
答案 1 :(得分:0)
我在第5.7.4和5.8.4章的USB 2.0规范中找到了部分答案:
批量传输的协议开销为13个字节:(3个SYNC字节,3个PID字节,2个端点+ CRC字节,2个CRC字节和3个字节的数据包间延迟)和19个字节用于中断传输(5个SYNC字节) ,5个PID字节,2个端点+ CRC字节,2个CRC字节和5字节的数据包间延迟)
如果使用64字节的数据有效负载,则批量传输的最大带宽为1.216.000字节/秒。这意味着1 ms的一帧可以传输1216个字节= 19个64字节的块。
中断端点以每毫秒一次的最大间隔进行轮询,因此最大有效载荷将为64kB / s或更低。
但这些价值观是理论。该文档指出忽略位填充。此处忽略为控制传输保留的10%带宽。对于中断端点,最大吞吐量为每毫秒64字节= 64 kByte /秒。
另一篇关于不同全速设备和不同操作系统的现实生活测量速度的有趣文章非常有趣,因为它与理论值有很大不同,特别是对于Windows。
保罗测量的最大速度为1兆字节/秒,但是在OUT方向。
http://www.pjrc.com/teensy/benchmark_usb_serial_receive.html
和