实际的波特率是115,200或更高吗?

时间:2012-12-11 16:28:17

标签: serial-port benchmarking

使用FT232R USBtoRS232芯片进行一些测试时,应该能够管理高达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字节/秒。所以基本上速度随字节大小而变化。这是正确的吗?那是为什么?

1 个答案:

答案 0 :(得分:6)

您观察到的结果是因为USB串行的工作方式。这是一个USB 1.1芯片。 USB使用数据包进行传输,而不是连续流,例如串行传输。

因此,您的设备将获得时间切片窗口,驱动程序可以有效地利用此窗口。将数据包大小设置为1时,每个USB数据包只能传输一个字节。要传输下一个字节,您必须再次等待轮到你。

通常USB设备在设备端有一个缓冲区,它可以在传输之间缓冲数据,从而保持输出速率不变。当您将数据包大小设置得太低时,您正在使用此缓冲区。 USB 1.1上的时间片为10 ms,每秒只能为您提供100次传输,以便在所有设备之间共享。

当您进行“发送”呼叫时,您的所有数据都将在一次转接中熄灭,以保持交互式应用程序的正常运行。最好使用最大传输大小以在USB设备上实现最佳性能。如果您有交互式应用程序,这并不总是可行的,但是当您有数据传输应用程序时,这种情况几乎是可能的。