使用USB2.0对数据传输块大小有限制吗?
通过一次读取()或写入(),我们可以通过USB接口增加批量数据大小吗?例如,我想传输1024(1K)字节的数据块,如果设备只有64字节的限制,有没有办法通过USB增加读()和写()系统调用的数据包大小 在主机->设备环境中,通过USB传输数据的大小是否有任何限制 多谢各位使用USB2.0对数据传输块大小有限制吗?,usb,Usb,通过一次读取()或写入(),我们可以通过USB接口增加批量数据大小吗?例如,我想传输1024(1K)字节的数据块,如果设备只有64字节的限制,有没有办法通过USB增加读()和写()系统调用的数据包大小 在主机->设备环境中,通过USB传输数据的大小是否有任何限制 多谢各位 -广告越大越好 一般来说,发送的越多,USB传输的速度就越快(批量传输)。 我认为我们达到了2MB块的最佳点。 唯一的限制是主机控制器可以处理的缓冲区大小 一点原因 协议以1ms(全速)1/8ms(高速)数据块对总线进行计时。
-广告越大越好 一般来说,发送的越多,USB传输的速度就越快(批量传输)。 我认为我们达到了2MB块的最佳点。 唯一的限制是主机控制器可以处理的缓冲区大小 一点原因 协议以1ms(全速)1/8ms(高速)数据块对总线进行计时。在此期间,可以发送0-~15个大容量数据包(64B/512B全/高速) 在控制器中设置USB传输并处理其完成需要时间 10字节全速传输示例: ms0-设置OHCI以传输10字节 传输ms1-10字节(这可能在下一个1ms的间隔内发生) ms2-中断以通知完成。 -3ms发送10字节 640字节传输的示例: ms0-设置OHCI ms1-传输640字节 ms3-中断 -3ms发送640字节 我想你明白了 设备的IO缓冲区大小不会改变上述断言,因为较大的主机/设备传输可以避免设置/处理开销 非常慢的设备和256字节传输示例 ms0-设置OHCI ms1-发送64,获取NAKs。。 ms2-发送64,获取NAKs。。 ms3-发送64,获取NAKs。。 ms4-发送64,获取NAKs。。 ms5-中断 希望这对您所说的read()、write()文件系统调用有所帮助 那么,您对底层设备的数据调度策略几乎没有控制权。话虽如此,应用程序最好将大量数据排队,这样命令响应事务开销的数量就会减少 顺便说一句,如果您谈论的是总线级读写事务,那么在USB2.0中,支持的最大批量数据包大小是512字节(与大多数存储设备中1个扇区的大小相同),这就足够了
很多时候,这些管道将在主机缓冲区中实现乒乓球,这意味着任何超过1024字节的内容都将有效地等待物理硬件上层的某个位置(如主机PC缓存~~~)直接回答您的问题,您不能增加最大数据包大小。它是由USB定义的,原因有很多 但是,实际的最大数据包大小并不限制SW级别的传输大小。使用64字节的最大数据包大小,您仍然可以使用单个URB设置更大的传输。事实上,这是批量获得合理高带宽的唯一方法——您的软件应该在USB“传输”级别工作,而不是在数据包级别
较短的数据包大小确实会在线路上造成一些额外的开销(更多的报头、CRC和数据包之间的间隙),但这大约是5-10%。你无论如何也不能改变它。关于“唯一的限制是你的主机控制器可以处理的缓冲区大小”的伟大回答@Boris,你知道确定缓冲区大小的方法吗?@davidcefreitas,这取决于控制器的硬件。这通常在控制器的文档中指定,并且是特定于硬件的。