在使用FT232R USB到RS232芯片运行一些测试时,它应该能够管理高达3 Mbaud的速度,我的问题是我的实际速度只有38 kbaud或3,8 KB / s。
我在网上搜索过,但我找不到任何类似的数据,以证明或反驳这一限制。
虽然我正在进一步研究这个问题,但我想知道,如果有人在这里有可比较的数据。
我用我自己的代码测试了这个工具:
http://www.aggsoft.com/com-port-stress-test.htm
设置为115,200,8N1和64字节数据包。
我会期待这样的结果:
波特率为115200 - >有效11,520字节/秒或11,52 KB /秒
波特率为921600 - > 92,16 KB / s
我需要确认最低速度为11,2 KB / s,速度更快,大约为15-60 KB / s。
基于数据表,这应该没有问题 - 基于现实,我被困在3,8 KB / s - 至少现在。
哦,我发现了一个非常好的提示 - 我的传输速率高度依赖于数据包的大小。因此,在使用64字节数据包时,我最终得到了3.8 KB / s,使用180字节数据包,它的平均值大约为11,26 KB / s - 当我检查速度为1字节时,主灯亮了数据包 - >大约64字节/秒!
添加一些数学 - > 11,52 KB / s除以180等于64字节/秒。所以基本上速度随字节大小而变化。这是正确的吗?那为什么呢?
您观察到的结果是因为USB串行的工作方式。这是一个USB 1.1芯片。 USB使用数据包进行传输,而不是连续流,例如串行传输。
因此,您的设备将获得一个时间切片窗口,驱动程序可以有效地利用此窗口。将数据包大小设置为1时,每个USB数据包只能传输一个字节。要传输下一个字节,您必须再次等待轮到您。
通常USB设备在设备端有一个缓冲区,它可以在传输之间缓冲数据,从而保持输出速率不变。当您将数据包大小设置得太低时,您正在使用此缓冲区。 USB 1.1上的时间片为10 ms,每秒只能为您提供100次传输,以便在所有设备之间共享。
当您进行“发送”呼叫时,您的所有数据都将在一次传输中发出,以保持交互式应用程序正常工作。最好使用最大传输大小以在USB设备上实现最佳性能。如果您有交互式应用程序,这并不总是可行,但大多数情况下,当您有数据传输应用程序时。