实际波特率是115200还是更高?

Joo*_*ook 4 benchmarking serial-port

在使用FT232R USBtoRS232芯片运行一些测试时,它应该能够管理高达3Mbaud/s的速度,我遇到的问题是我的实际速度只有38kbaud/s或3,8KB/s.

我搜索过网络,但我找不到任何可比较的数据,以证明或取消这一限制.

虽然我正在进一步研究这个问题,但我想知道,如果有人在这里有可比较的数据.

我用我自己的代码测试了这个工具:

http://www.aggsoft.com/com-port-stress-test.htm

设置为115200 8n1 64Byte数据包.

我会期待这样的结果:

在115200波特 - >有效11520字节/秒或11,52KB/s

在921600波特 - > 92,16KB/s

我需要确认最低速度为11,2KB/s,速度更快,大约为15-60KB/s.

根据数据表,这应该没有问题 - 基于现实,我被困在3,8KB/s - 至少现在.

编辑:

哦,我发现了一个非常好的提示 - 我的传输高度依赖于数据包的大小.因此,在使用64字节数据包的同时,我最终得到了3,8 KB/s,使用180Byte数据包,它的平均值约为11,26KB/s - 当我检查1字节数据包的速度时,主灯亮了 - >大约64B/s!

添加一些数学 - > 11,52KB/s除以180等于64B/s.所以基本上速度随字节大小而变化.这是正确的吗?那为什么呢?

小智 6

您观察到的结果是因为Serial over USB的工作方式.这是USB1.1芯片.USB使用数据包进行传输,而不是连续流,例如串行传输.因此,您的设备将获得一个时间切片窗口,驱动程序可以有效地利用此窗口.将数据包大小设置为1时,每个USB数据包只能传输一个字节.要传输下一个字节,您必须再次等待轮到您.通常USB设备在设备端有一个缓冲区,它可以在传输之间缓冲数据,从而保持输出速率不变.当您将数据包大小设置得太低时,您正在使用此缓冲区.USB1.1上的时间片为10ms,每秒只能为您提供100次传输,以便在所有设备之间共享.当您进行"发送"呼叫时,您的所有数据都将在一次转接中结束,以保持交互式应用正常运行.最好使用最大传输大小以在USB设备上实现最佳性能.如果您有交互式应用程序,这并不总是可行,但是当您有数据传输应用程序时,这种情