4

在使用 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 字节/秒。所以基本上速度与字节大小成比例。这是正确的吗?为什么是这样?

4

1 回答 1

7

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

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

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

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

于 2013-04-25T20:36:39.297 回答