serial-port - 使用 FTDI 芯片从另一个设备发送到 PC 的 uart 数据包之间的延迟
问题描述
我有一个设备发送一系列 20 字节 UART 帧(每个 20 字节,在 20 字节之间没有延迟)。通过使用FTDI 芯片 TTL 到 USB 转换器将数据从设备发送到 PC,之间有16 毫秒的延迟有时是 20 个字节。为什么会这样?
这是在 - Look RS232软件上监控的
在 PC 的监控软件上观察时,在某些帧的 20 个字节之间存在 16ms 的延迟。例如,先是 4 个字节,然后是 16 个字节,依此类推。或者先是 6 个字节,然后是 16 毫秒后剩下的 10 个字节。已尝试使用不同的波特率。同样的问题仍然存在。
我读到如果没有收到最少 64 个字节,FTDI 芯片中就会出现延迟超时,而这个延迟是 16 毫秒。但这不应该影响我的应用程序,因为连续发送数据的最大长度是 20 字节,之后会有延迟,然后下一个 20 字节到达。因此,一旦收到 20 个字节,就会发生超时。两者之间不应有延迟。参考: https ://www.ftdichip.com/Support/Documents/AppNotes/AN_107_AdvancedDriverOptions_AN_000073.pdf
这可能是由于 USB 调度延迟以及它不是完全由中断驱动的事实吗?有人对此有可能的解决方案吗?延迟始终为 16 毫秒。
预期结果是 20 字节数据,中间没有延迟。
解决方案
没有延迟将是不可能的。当我们谈论 USB 时,由于 USB 和大多数总线系统的性质,总会有一些抖动。FT 驱动程序的延迟/超时设置通常设置为 16 ms。您可以通过相应虚拟com端口的设置对话框在设备管理器的windows下更改它。对于来回传输的数据包,我能用波特率超过 10 MBps 的 FT2232H 获得的最佳时间是 1.46+-0.31 ms(n=1000 个包)。
推荐阅读
- pyspark - pyspark 并行运行引导程序
- azure - 来自 Microsoft 的 Azure CDN 中的缓存内容过早过期
- java - 通过 JGit 将分支重置为 HEAD
- javascript - 将项目从另一个数组添加到对象数组
- python - 如何相对导入 *resource* 本身?
- postgresql - 如何使用 PowerShell 将 CSV 数据复制到 PostgreSQL
- java - 线程“主”java.lang.ClassNotFoundException 中的异常:org.apache.hive.jdbc.HiveDriver
- python - 熊猫列连接
- debugging - Safari 远程调试快速关闭
- java - 永远关闭锁,使用 Findify S3 Mock 时 JVM 不会终止