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

问题描述 投票:4回答:1

在使用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字节/秒。所以基本上速度随字节大小而变化。这是正确的吗?那为什么呢?

serial-port benchmarking
1个回答
6
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.